MCE Table Buttons - Version 3.3

Version Description

  • Significantly update TinyMCE plugin from 4.1.x to 4.7.11
  • Drop support for WordPress 3.x, which means dropping TinyMCE 3.x and 4.0.x
Download this release

Release Info

Developer helen
Plugin Icon 128x128 MCE Table Buttons
Version 3.3
Comparing to
See all releases

Code changes from version 3.2 to 3.3

mce_table_buttons.php CHANGED
@@ -1,13 +1,13 @@
1
  <?php
2
  /**
3
- Plugin Name: MCE Table Buttons
4
- Plugin URI: http://10up.com/plugins-modules/wordpress-mce-table-buttons/
5
- Description: Add <strong>controls for table editing</strong> to the visual content editor with this <strong>light weight</strong> plug-in.
6
- Version: 3.2
7
- Author: Jake Goldman, 10up, Oomph
8
- Author URI: http://10up.com
9
- License: GPLv2 or later
10
- */
11
 
12
  class MCE_Table_Buttons {
13
 
@@ -40,6 +40,7 @@ class MCE_Table_Buttons {
40
  add_filter( 'mce_external_plugins', array( __CLASS__, 'mce_external_plugins' ) );
41
  add_filter( 'mce_buttons_2', array( __CLASS__, 'mce_buttons_2' ) );
42
  add_filter( 'content_save_pre', array( __CLASS__, 'content_save_pre' ), 20 );
 
43
  }
44
 
45
  /**
@@ -52,22 +53,13 @@ class MCE_Table_Buttons {
52
  global $tinymce_version;
53
  $variant = ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) ? '' : '.min';
54
 
55
- if ( version_compare( $tinymce_version, '400', '<' ) ) {
56
 
57
- wp_register_style( 'mce-table-buttons', plugin_dir_url( __FILE__ ) . 'tinymce3-assets/mce-table-buttons.css' );
58
- wp_print_styles( 'mce-table-buttons' );
59
-
60
- $plugin_dir_url = plugin_dir_url( __FILE__ );
61
- $plugin_array['table'] = $plugin_dir_url . 'tinymce3-table/editor_plugin.js';
62
- $plugin_array['mcetablebuttons'] = $plugin_dir_url . 'tinymce3-assets/mce-table-buttons.js';
63
-
64
- } elseif ( version_compare( $tinymce_version, '4100', '<' ) ) {
65
-
66
- $plugin_array['table'] = plugin_dir_url( __FILE__ ) . 'tinymce4-table/plugin' . $variant . '.js';
67
 
68
  } else {
69
 
70
- $plugin_array['table'] = plugin_dir_url( __FILE__ ) . 'tinymce41-table/plugin' . $variant . '.js';
71
 
72
  }
73
 
@@ -81,35 +73,14 @@ class MCE_Table_Buttons {
81
  * @return array Buttons for the second row
82
  */
83
  public static function mce_buttons_2( $buttons ) {
84
- global $tinymce_version;
85
-
86
- if ( version_compare( $tinymce_version, '400', '<' ) ) {
87
-
88
- add_filter( 'mce_buttons_3', array( __CLASS__, 'mce_buttons_3' ) );
89
-
90
- } else {
91
-
92
- // in case someone is manipulating other buttons, drop table controls at the end of the row
93
- if ( ! $pos = array_search( 'undo', $buttons ) ) {
94
- array_push( $buttons, 'table' );
95
- return $buttons;
96
- }
97
-
98
- $buttons = array_merge( array_slice( $buttons, 0, $pos ), array( 'table' ), array_slice( $buttons, $pos ) );
99
-
100
  }
101
 
102
- return $buttons;
103
- }
104
 
105
- /**
106
- * Add TinyMCE 3.x table control to the second row, after other formatting controls
107
- *
108
- * @param array $buttons Buttons for the second row
109
- * @return array Buttons for the second row
110
- */
111
- public static function mce_buttons_3( $buttons ) {
112
- array_push( $buttons, 'tablecontrols' );
113
  return $buttons;
114
  }
115
 
@@ -132,6 +103,22 @@ class MCE_Table_Buttons {
132
 
133
  return $content;
134
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  }
136
 
137
  MCE_Table_Buttons::get_instance();
1
  <?php
2
  /**
3
+ * Plugin Name: MCE Table Buttons
4
+ * Plugin URI: http://10up.com/plugins-modules/wordpress-mce-table-buttons/
5
+ * Description: Add <strong>controls for table editing</strong> to the visual content editor with this <strong>light weight</strong> plug-in.
6
+ * Version: 3.3
7
+ * Author: Jake Goldman, 10up, Oomph
8
+ * Author URI: http://10up.com
9
+ * License: GPLv2 or later
10
+ */
11
 
12
  class MCE_Table_Buttons {
13
 
40
  add_filter( 'mce_external_plugins', array( __CLASS__, 'mce_external_plugins' ) );
41
  add_filter( 'mce_buttons_2', array( __CLASS__, 'mce_buttons_2' ) );
42
  add_filter( 'content_save_pre', array( __CLASS__, 'content_save_pre' ), 20 );
43
+ add_filter( 'tiny_mce_before_init', array( __CLASS__, 'tiny_mce_before_init' ), 10, 2 );
44
  }
45
 
46
  /**
53
  global $tinymce_version;
54
  $variant = ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) ? '' : '.min';
55
 
56
+ if ( version_compare( $tinymce_version, '4700', '<' ) ) {
57
 
58
+ $plugin_array['table'] = plugin_dir_url( __FILE__ ) . 'tinymce41-table/plugin' . $variant . '.js';
 
 
 
 
 
 
 
 
 
59
 
60
  } else {
61
 
62
+ $plugin_array['table'] = plugin_dir_url( __FILE__ ) . 'tinymce47-table/plugin' . $variant . '.js';
63
 
64
  }
65
 
73
  * @return array Buttons for the second row
74
  */
75
  public static function mce_buttons_2( $buttons ) {
76
+ // in case someone is manipulating other buttons, drop table controls at the end of the row
77
+ if ( ! $pos = array_search( 'undo', $buttons ) ) {
78
+ array_push( $buttons, 'table' );
79
+ return $buttons;
 
 
 
 
 
 
 
 
 
 
 
 
80
  }
81
 
82
+ $buttons = array_merge( array_slice( $buttons, 0, $pos ), array( 'table' ), array_slice( $buttons, $pos ) );
 
83
 
 
 
 
 
 
 
 
 
84
  return $buttons;
85
  }
86
 
103
 
104
  return $content;
105
  }
106
+
107
+ /**
108
+ * Remove the table toolbar introduced in TinyMCE 4.3.0.
109
+ *
110
+ * Its positioning does not work correctly inside WordPress and blocks editing.
111
+ *
112
+ * @param array $mceInit An array with TinyMCE config.
113
+ * @param string $editor_id Unique editor identifier, e.g. 'content'.
114
+ *
115
+ * @return array TinyMCE config array
116
+ */
117
+ public static function tiny_mce_before_init ( $mceInit, $editor_id ) {
118
+ $mceInit['table_toolbar'] = '';
119
+
120
+ return $mceInit;
121
+ }
122
  }
123
 
124
  MCE_Table_Buttons::get_instance();
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === MCE Table Buttons ===
2
- Contributors: jakemgold, 10up, thinkoomph
3
  Donate link: http://10up.com/plugins-modules/wordpress-mce-table-buttons/
4
  Tags: tables, table, editor, WYSIWYG, buttons, tinymce
5
- Requires at least: 3.4
6
- Tested up to: 4.0
7
- Stable tag: 3.2
8
 
9
  Adds table editing controls to the visual content editor (TinyMCE).
10
 
@@ -18,18 +18,21 @@ Note that the table controls are contained in the “kitchen sink” toolbar, to
18
 
19
  == Installation ==
20
 
21
- 1. Install easily with the WordPress plugin control panel or manually download the plugin and upload the folder
22
  `mce-table-buttons` to the `/wp-content/plugins/` directory
23
  1. Activate the plugin through the 'Plugins' menu in WordPress
24
  1. Show the toolbar in the editor by opening the "kitchen sink" (the last button in the first row)
25
 
26
  == Screenshots ==
27
 
28
- 1. The editor with the new table editing controls in WordPress 3.9 or newer.
29
- 1. The editor with the new table editing controls in WordPress 3.4 through 3.8.
30
 
31
  == Changelog ==
32
 
 
 
 
 
33
  = 3.2 =
34
  * WordPress 4.0 support, including a much newer TinyMCE plugin, with many new features, including background color and horizontal alignment
35
  * Dramatically improved support for paragraphed content inside of a cell (paragraph breaks no longer disappear on save)
1
  === MCE Table Buttons ===
2
+ Contributors: 10up, jakemgold, helen, thinkoomph
3
  Donate link: http://10up.com/plugins-modules/wordpress-mce-table-buttons/
4
  Tags: tables, table, editor, WYSIWYG, buttons, tinymce
5
+ Requires at least: 4.0
6
+ Tested up to: 4.9.6
7
+ Stable tag: 3.3
8
 
9
  Adds table editing controls to the visual content editor (TinyMCE).
10
 
18
 
19
  == Installation ==
20
 
21
+ 1. Install easily with the WordPress plugin control panel or manually download the plugin and upload the folder
22
  `mce-table-buttons` to the `/wp-content/plugins/` directory
23
  1. Activate the plugin through the 'Plugins' menu in WordPress
24
  1. Show the toolbar in the editor by opening the "kitchen sink" (the last button in the first row)
25
 
26
  == Screenshots ==
27
 
28
+ 1. The editor with the added table editing controls.
 
29
 
30
  == Changelog ==
31
 
32
+ = 3.3 =
33
+ * Significantly update TinyMCE plugin from 4.1.x to 4.7.11
34
+ * Drop support for WordPress 3.x, which means dropping TinyMCE 3.x and 4.0.x
35
+
36
  = 3.2 =
37
  * WordPress 4.0 support, including a much newer TinyMCE plugin, with many new features, including background color and horizontal alignment
38
  * Dramatically improved support for paragraphed content inside of a cell (paragraph breaks no longer disappear on save)
tinymce3-assets/mce-table-buttons-2x.png DELETED
Binary file
tinymce3-assets/mce-table-buttons.css DELETED
@@ -1,106 +0,0 @@
1
- .wp_themeSkin .mceButton span.mce_table,
2
- .wp_themeSkin .mceButton span.mce_row_props,
3
- .wp_themeSkin .mceButton span.mce_cell_props,
4
- .wp_themeSkin .mceButton span.mce_row_before,
5
- .wp_themeSkin .mceButton span.mce_row_after,
6
- .wp_themeSkin .mceButton span.mce_delete_row,
7
- .wp_themeSkin .mceButton span.mce_col_before,
8
- .wp_themeSkin .mceButton span.mce_col_after,
9
- .wp_themeSkin .mceButton span.mce_delete_col,
10
- .wp_themeSkin .mceButton span.mce_split_cells,
11
- .wp_themeSkin .mceButton span.mce_merge_cells {
12
- background: url('mce-table-buttons.png') 2px -16px no-repeat;
13
- }
14
- .wp_themeSkin .mceButtonEnabled:hover span.mce_table, .wp_themeSkin .mceButtonActive span.mce_table {
15
- background-position: 2px 2px;
16
- }
17
-
18
- .wp_themeSkin .mceButton span.mce_row_props {
19
- background-position: -198px -16px;
20
- }
21
- .wp_themeSkin .mceButtonEnabled:hover span.mce_row_props, .wp_themeSkin .mceButtonActive span.mce_row_props {
22
- background-position: -198px 2px;
23
- }
24
-
25
- .wp_themeSkin .mceButton span.mce_cell_props {
26
- background-position: -18px -16px;
27
- }
28
- .wp_themeSkin .mceButtonEnabled:hover span.mce_cell_props, .wp_themeSkin .mceButtonActive span.mce_cell_props {
29
- background-position: -18px 2px;
30
- }
31
-
32
- .wp_themeSkin .mceButton span.mce_row_before {
33
- background-position: -158px -16px;
34
- }
35
- .wp_themeSkin .mceButtonEnabled:hover span.mce_row_before, .wp_themeSkin .mceButtonActive span.mce_row_before {
36
- background-position: -158px 2px;
37
- }
38
-
39
- .wp_themeSkin .mceButton span.mce_row_after {
40
- background-position: -138px -16px;
41
- }
42
- .wp_themeSkin .mceButtonEnabled:hover span.mce_row_after, .wp_themeSkin .mceButtonActive span.mce_row_after {
43
- background-position: -138px 2px;
44
- }
45
-
46
- .wp_themeSkin .mceButton span.mce_delete_row {
47
- background-position: -78px -16px;
48
- }
49
- .wp_themeSkin .mceButtonEnabled:hover span.mce_delete_row, .wp_themeSkin .mceButtonActive span.mce_delete_row {
50
- background-position: -78px 2px;
51
- }
52
-
53
- .wp_themeSkin .mceButton span.mce_col_before {
54
- background-position: -118px -16px;
55
- }
56
- .wp_themeSkin .mceButtonEnabled:hover span.mce_col_before, .wp_themeSkin .mceButtonActive span.mce_col_before {
57
- background-position: -118px 2px;
58
- }
59
-
60
- .wp_themeSkin .mceButton span.mce_col_after {
61
- background-position: -98px -16px;
62
- }
63
- .wp_themeSkin .mceButtonEnabled:hover span.mce_col_after, .wp_themeSkin .mceButtonActive span.mce_col_after {
64
- background-position: -98px 2px;
65
- }
66
-
67
- .wp_themeSkin .mceButton span.mce_delete_col {
68
- background-position: -58px -16px;
69
- }
70
- .wp_themeSkin .mceButtonEnabled:hover span.mce_delete_col, .wp_themeSkin .mceButtonActive span.mce_delete_col {
71
- background-position: -58px 2px;
72
- }
73
-
74
- .wp_themeSkin .mceButton span.mce_split_cells {
75
- background-position: -218px -16px;
76
- }
77
- .wp_themeSkin .mceButtonEnabled:hover span.mce_split_cells, .wp_themeSkin .mceButtonActive span.mce_split_cells {
78
- background-position: -218px 2px;
79
- }
80
-
81
- .wp_themeSkin .mceButton span.mce_merge_cells {
82
- background-position: -178px -16px;
83
- }
84
- .wp_themeSkin .mceButtonEnabled:hover span.mce_merge_cells, .wp_themeSkin .mceButtonActive span.mce_merge_cells {
85
- background-position: -178px 2px;
86
- }
87
-
88
- @media print,
89
- (-o-min-device-pixel-ratio: 5/4),
90
- (-webkit-min-device-pixel-ratio: 1.25),
91
- (min-resolution: 120dpi) {
92
- .wp_themeSkin .mceButton span.mce_table,
93
- .wp_themeSkin .mceButton span.mce_row_props,
94
- .wp_themeSkin .mceButton span.mce_cell_props,
95
- .wp_themeSkin .mceButton span.mce_row_before,
96
- .wp_themeSkin .mceButton span.mce_row_after,
97
- .wp_themeSkin .mceButton span.mce_delete_row,
98
- .wp_themeSkin .mceButton span.mce_col_before,
99
- .wp_themeSkin .mceButton span.mce_col_after,
100
- .wp_themeSkin .mceButton span.mce_delete_col,
101
- .wp_themeSkin .mceButton span.mce_split_cells,
102
- .wp_themeSkin .mceButton span.mce_merge_cells {
103
- background-image: url('mce-table-buttons-2x.png');
104
- background-size: 235px 34px;
105
- }
106
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-assets/mce-table-buttons.js DELETED
@@ -1,32 +0,0 @@
1
- /**
2
- * WordPress plugin.
3
- */
4
-
5
- (function() {
6
- var DOM = tinymce.DOM;
7
-
8
- tinymce.create('tinymce.plugins.mcetablebuttons', {
9
- init : function(ed, url) {
10
- var mce_table_toolbar;
11
-
12
- // Hides the specified toolbar and resizes the iframe
13
- ed.onPostRender.add(function() {
14
- mce_table_toolbar = ed.controlManager.get('toolbar3');
15
- if ( ed.getParam('wordpress_adv_hidden', 1) && mce_table_toolbar )
16
- DOM.hide(mce_table_toolbar.id);
17
- });
18
-
19
- ed.onExecCommand.add(function(ed, cmd, ui, val) {
20
- if ( cmd == 'WP_Adv' ) {
21
- if ( ed.settings.wordpress_adv_hidden == 1 )
22
- DOM.hide( mce_table_toolbar.id );
23
- else
24
- DOM.show( mce_table_toolbar.id );
25
- }
26
- });
27
- }
28
- });
29
-
30
- // Register plugin
31
- tinymce.PluginManager.add('mcetablebuttons', tinymce.plugins.mcetablebuttons);
32
- })();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-assets/mce-table-buttons.png DELETED
Binary file
tinymce3-table/cell.htm DELETED
@@ -1,180 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#table_dlg.cell_title}</title>
5
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/mctabs.js"></script>
7
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/form_utils.js"></script>
8
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/validate.js"></script>
9
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/editable_selects.js"></script>
10
- <script type="text/javascript" src="js/cell.js"></script>
11
- <link href="css/cell.css" rel="stylesheet" type="text/css" />
12
- </head>
13
- <body id="tablecell" style="display: none" role="application">
14
- <form onsubmit="updateAction();return false;" action="#">
15
- <div class="tabs">
16
- <ul>
17
- <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
18
- <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
19
- </ul>
20
- </div>
21
-
22
- <div class="panel_wrapper">
23
- <div id="general_panel" class="panel current">
24
- <fieldset>
25
- <legend>{#table_dlg.general_props}</legend>
26
-
27
- <table role="presentation" border="0" cellpadding="4" cellspacing="0">
28
- <tr>
29
- <td><label for="align">{#table_dlg.align}</label></td>
30
- <td>
31
- <select id="align" name="align" class="mceFocus">
32
- <option value="">{#not_set}</option>
33
- <option value="center">{#table_dlg.align_middle}</option>
34
- <option value="left">{#table_dlg.align_left}</option>
35
- <option value="right">{#table_dlg.align_right}</option>
36
- </select>
37
- </td>
38
-
39
- <td><label for="celltype">{#table_dlg.cell_type}</label></td>
40
- <td>
41
- <select id="celltype" name="celltype">
42
- <option value="td">{#table_dlg.td}</option>
43
- <option value="th">{#table_dlg.th}</option>
44
- </select>
45
- </td>
46
- </tr>
47
-
48
- <tr>
49
- <td><label for="valign">{#table_dlg.valign}</label></td>
50
- <td>
51
- <select id="valign" name="valign">
52
- <option value="">{#not_set}</option>
53
- <option value="top">{#table_dlg.align_top}</option>
54
- <option value="middle">{#table_dlg.align_middle}</option>
55
- <option value="bottom">{#table_dlg.align_bottom}</option>
56
- </select>
57
- </td>
58
-
59
- <td><label for="scope">{#table_dlg.scope}</label></td>
60
- <td>
61
- <select id="scope" name="scope">
62
- <option value="">{#not_set}</option>
63
- <option value="col">{#table.col}</option>
64
- <option value="row">{#table.row}</option>
65
- <option value="rowgroup">{#table_dlg.rowgroup}</option>
66
- <option value="colgroup">{#table_dlg.colgroup}</option>
67
- </select>
68
- </td>
69
-
70
- </tr>
71
-
72
- <tr>
73
- <td><label for="width">{#table_dlg.width}</label></td>
74
- <td><input id="width" name="width" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
75
-
76
- <td><label for="height">{#table_dlg.height}</label></td>
77
- <td><input id="height" name="height" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
78
- </tr>
79
-
80
- <tr id="styleSelectRow">
81
- <td><label for="class">{#class_name}</label></td>
82
- <td colspan="3">
83
- <select id="class" name="class" class="mceEditableSelect">
84
- <option value="" selected="selected">{#not_set}</option>
85
- </select>
86
- </td>
87
- </tr>
88
- </table>
89
- </fieldset>
90
- </div>
91
-
92
- <div id="advanced_panel" class="panel">
93
- <fieldset>
94
- <legend>{#table_dlg.advanced_props}</legend>
95
-
96
- <table role="presentation" border="0" cellpadding="0" cellspacing="4">
97
- <tr>
98
- <td class="column1"><label for="id">{#table_dlg.id}</label></td>
99
- <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
100
- </tr>
101
-
102
- <tr>
103
- <td><label for="style">{#table_dlg.style}</label></td>
104
- <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
105
- </tr>
106
-
107
- <tr>
108
- <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
109
- <td>
110
- <select id="dir" name="dir" style="width: 200px">
111
- <option value="">{#not_set}</option>
112
- <option value="ltr">{#table_dlg.ltr}</option>
113
- <option value="rtl">{#table_dlg.rtl}</option>
114
- </select>
115
- </td>
116
- </tr>
117
-
118
- <tr>
119
- <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
120
- <td>
121
- <input id="lang" name="lang" type="text" value="" style="width: 200px" />
122
- </td>
123
- </tr>
124
-
125
- <tr>
126
- <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
127
- <td>
128
- <table role="presentation" border="0" cellpadding="0" cellspacing="0">
129
- <tr>
130
- <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
131
- <td id="backgroundimagebrowsercontainer">&nbsp;</td>
132
- </tr>
133
- </table>
134
- </td>
135
- </tr>
136
-
137
- <tr role="group" aria-labelledby="bordercolor_label">
138
- <td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td>
139
- <td>
140
- <table role="presentation" border="0" cellpadding="0" cellspacing="0">
141
- <tr>
142
- <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
143
- <td id="bordercolor_pickcontainer">&nbsp;</td>
144
- </tr>
145
- </table>
146
- </td>
147
- </tr>
148
-
149
- <tr role="group" aria-labelledby="bgcolor_label">
150
- <td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td>
151
- <td>
152
- <table role="presentation" border="0" cellpadding="0" cellspacing="0">
153
- <tr>
154
- <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
155
- <td id="bgcolor_pickcontainer">&nbsp;</td>
156
- </tr>
157
- </table>
158
- </td>
159
- </tr>
160
- </table>
161
- </fieldset>
162
- </div>
163
- </div>
164
-
165
- <div class="mceActionPanel">
166
- <div>
167
- <select id="action" name="action">
168
- <option value="cell">{#table_dlg.cell_cell}</option>
169
- <option value="row">{#table_dlg.cell_row}</option>
170
- <option value="col">{#table_dlg.cell_col}</option>
171
- <option value="all">{#table_dlg.cell_all}</option>
172
- </select>
173
- </div>
174
-
175
- <input type="submit" id="insert" name="insert" value="{#update}" />
176
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
177
- </div>
178
- </form>
179
- </body>
180
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/css/cell.css DELETED
@@ -1,17 +0,0 @@
1
- /* CSS file for cell dialog in the table plugin */
2
-
3
- .panel_wrapper div.current {
4
- height: 200px;
5
- }
6
-
7
- .advfield {
8
- width: 200px;
9
- }
10
-
11
- #action {
12
- margin-bottom: 3px;
13
- }
14
-
15
- #class {
16
- width: 150px;
17
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/css/row.css DELETED
@@ -1,25 +0,0 @@
1
- /* CSS file for row dialog in the table plugin */
2
-
3
- .panel_wrapper div.current {
4
- height: 200px;
5
- }
6
-
7
- .advfield {
8
- width: 200px;
9
- }
10
-
11
- #action {
12
- margin-bottom: 3px;
13
- }
14
-
15
- #rowtype,#align,#valign,#class,#height {
16
- width: 150px;
17
- }
18
-
19
- #height {
20
- width: 50px;
21
- }
22
-
23
- .col2 {
24
- padding-left: 20px;
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/css/table.css DELETED
@@ -1,13 +0,0 @@
1
- /* CSS file for table dialog in the table plugin */
2
-
3
- .panel_wrapper div.current {
4
- height: 245px;
5
- }
6
-
7
- .advfield {
8
- width: 200px;
9
- }
10
-
11
- #class {
12
- width: 150px;
13
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/editor_plugin.js DELETED
@@ -1 +0,0 @@
1
- (function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T<Q+U;T++){if(!g[T]){g[T]=[]}for(S=R;S<R+V;S++){g[T][S]={part:N,real:T==Q&&S==R,elm:W,rowspan:U,colspan:V}}}})});M+=O.length})}function z(M,O){var N;N=g[O];if(N){return N[M]}}function s(O,M,N){if(O){N=parseInt(N);if(N===1){O.removeAttribute(M,1)}else{O.setAttribute(M,N,1)}}}function j(M){return M&&(G.hasClass(M.elm,"mceSelected")||M==o)}function k(){var M=[];e(H.rows,function(N){e(N.cells,function(O){if(G.hasClass(O,"mceSelected")||O==o.elm){M.push(N);return false}})});return M}function r(){var M=G.createRng();M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H)}function f(M){var N;d.walk(M,function(P){var O;if(P.nodeType==3){e(G.getParents(P.parentNode,null,M).reverse(),function(Q){Q=A(Q,false);if(!N){N=O=Q}else{if(O){O.appendChild(Q)}}O=Q});if(O){O.innerHTML=d.isIE?"&nbsp;":'<br data-mce-bogus="1" />'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE){M.innerHTML='<br data-mce-bogus="1" />'}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q<S-1;Q++){G.insertAfter(f(P),P)}u(O,N,R-1,S)}}})})}function p(V,S,Y){var P,O,X,W,U,R,T,M,V,N,Q;if(V){pos=F(V);P=pos.x;O=pos.y;X=P+(S-1);W=O+(Y-1)}else{L=D=null;e(g,function(Z,aa){e(Z,function(ac,ab){if(j(ac)){if(!L){L={x:ab,y:aa}}D={x:ab,y:aa}}})});P=L.x;O=L.y;X=D.x;W=D.y}T=z(P,O);M=z(X,W);if(T&&M&&T.part==M.part){C();t();T=z(P,O).elm;s(T,"colSpan",(X-P)+1);s(T,"rowSpan",(W-O)+1);for(R=O;R<=W;R++){for(U=P;U<=X;U++){if(!g[R]||!g[R][U]){continue}V=g[R][U].elm;if(V!=T){N=d.grep(V.childNodes);e(N,function(Z){T.appendChild(Z)});if(N.length){N=d.grep(T.childNodes);Q=0;e(N,function(Z){if(Z.nodeName=="BR"&&G.getAttrib(Z,"data-mce-bogus")&&Q++<N.length-1){T.removeChild(Z)}})}G.remove(V)}}}q()}}function l(Q){var M,S,P,R,T,U,N,V,O;e(g,function(W,X){e(W,function(Z,Y){if(j(Z)){Z=Z.elm;T=Z.parentNode;U=A(T,false);M=X;if(Q){return false}}});if(Q){return !M}});for(R=0;R<g[0].length;R++){if(!g[M][R]){continue}S=g[M][R].elm;if(S!=P){if(!Q){O=a(S,"rowspan");if(O>1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;i<S;i++){R=T.cells[i];s(R,"colSpan",1);s(R,"rowSpan",1)}for(i=S;i<Q;i++){T.appendChild(f(T.cells[S-1]))}for(i=Q;i<S;i++){G.remove(T.cells[i])}if(N){M.parentNode.insertBefore(T,M)}else{G.insertAfter(T,M)}});G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected")}function F(M){var N;e(g,function(O,P){e(O,function(R,Q){if(R.elm==M){N={x:Q,y:P};return false}});return !N});return N}function w(M){L=F(M)}function I(){var O,N,M;N=M=0;e(g,function(P,Q){e(P,function(S,R){var U,T;if(j(S)){S=g[Q][R];if(R>N){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)<P){P-=S.colspan-1}}}for(x=P;x<=N;x++){S=g[O][x];if(!S.real){if(O-(S.rowspan-1)<O){O-=S.rowspan-1}}}for(y=O;y<=T;y++){for(x=P;x<=U;x++){S=g[y][x];if(S.real){Q=S.colspan-1;R=S.rowspan-1;if(Q){if(x+Q>N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){if(r.settings.forced_root_block){r.dom.add(r.getBody(),r.settings.forced_root_block,null,d.isIE?"&nbsp;":'<br data-mce-bogus="1" />')}else{r.dom.add(r.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&(z.nodeName=="BR"||(z.childNodes.length==1&&(z.firstChild.nodeName=="BR"||z.firstChild.nodeValue=="\u00a0")))&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce);
 
tinymce3-table/editor_plugin_src.js DELETED
@@ -1,1452 +0,0 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function(tinymce) {
12
- var each = tinymce.each;
13
-
14
- // Checks if the selection/caret is at the start of the specified block element
15
- function isAtStart(rng, par) {
16
- var doc = par.ownerDocument, rng2 = doc.createRange(), elm;
17
-
18
- rng2.setStartBefore(par);
19
- rng2.setEnd(rng.endContainer, rng.endOffset);
20
-
21
- elm = doc.createElement('body');
22
- elm.appendChild(rng2.cloneContents());
23
-
24
- // Check for text characters of other elements that should be treated as content
25
- return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0;
26
- };
27
-
28
- function getSpanVal(td, name) {
29
- return parseInt(td.getAttribute(name) || 1);
30
- }
31
-
32
- /**
33
- * Table Grid class.
34
- */
35
- function TableGrid(table, dom, selection) {
36
- var grid, startPos, endPos, selectedCell;
37
-
38
- buildGrid();
39
- selectedCell = dom.getParent(selection.getStart(), 'th,td');
40
- if (selectedCell) {
41
- startPos = getPos(selectedCell);
42
- endPos = findEndPos();
43
- selectedCell = getCell(startPos.x, startPos.y);
44
- }
45
-
46
- function cloneNode(node, children) {
47
- node = node.cloneNode(children);
48
- node.removeAttribute('id');
49
-
50
- return node;
51
- }
52
-
53
- function buildGrid() {
54
- var startY = 0;
55
-
56
- grid = [];
57
-
58
- each(['thead', 'tbody', 'tfoot'], function(part) {
59
- var rows = dom.select('> ' + part + ' tr', table);
60
-
61
- each(rows, function(tr, y) {
62
- y += startY;
63
-
64
- each(dom.select('> td, > th', tr), function(td, x) {
65
- var x2, y2, rowspan, colspan;
66
-
67
- // Skip over existing cells produced by rowspan
68
- if (grid[y]) {
69
- while (grid[y][x])
70
- x++;
71
- }
72
-
73
- // Get col/rowspan from cell
74
- rowspan = getSpanVal(td, 'rowspan');
75
- colspan = getSpanVal(td, 'colspan');
76
-
77
- // Fill out rowspan/colspan right and down
78
- for (y2 = y; y2 < y + rowspan; y2++) {
79
- if (!grid[y2])
80
- grid[y2] = [];
81
-
82
- for (x2 = x; x2 < x + colspan; x2++) {
83
- grid[y2][x2] = {
84
- part : part,
85
- real : y2 == y && x2 == x,
86
- elm : td,
87
- rowspan : rowspan,
88
- colspan : colspan
89
- };
90
- }
91
- }
92
- });
93
- });
94
-
95
- startY += rows.length;
96
- });
97
- };
98
-
99
- function getCell(x, y) {
100
- var row;
101
-
102
- row = grid[y];
103
- if (row)
104
- return row[x];
105
- };
106
-
107
- function setSpanVal(td, name, val) {
108
- if (td) {
109
- val = parseInt(val);
110
-
111
- if (val === 1)
112
- td.removeAttribute(name, 1);
113
- else
114
- td.setAttribute(name, val, 1);
115
- }
116
- }
117
-
118
- function isCellSelected(cell) {
119
- return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell);
120
- };
121
-
122
- function getSelectedRows() {
123
- var rows = [];
124
-
125
- each(table.rows, function(row) {
126
- each(row.cells, function(cell) {
127
- if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) {
128
- rows.push(row);
129
- return false;
130
- }
131
- });
132
- });
133
-
134
- return rows;
135
- };
136
-
137
- function deleteTable() {
138
- var rng = dom.createRng();
139
-
140
- rng.setStartAfter(table);
141
- rng.setEndAfter(table);
142
-
143
- selection.setRng(rng);
144
-
145
- dom.remove(table);
146
- };
147
-
148
- function cloneCell(cell) {
149
- var formatNode;
150
-
151
- // Clone formats
152
- tinymce.walk(cell, function(node) {
153
- var curNode;
154
-
155
- if (node.nodeType == 3) {
156
- each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) {
157
- node = cloneNode(node, false);
158
-
159
- if (!formatNode)
160
- formatNode = curNode = node;
161
- else if (curNode)
162
- curNode.appendChild(node);
163
-
164
- curNode = node;
165
- });
166
-
167
- // Add something to the inner node
168
- if (curNode)
169
- curNode.innerHTML = tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />';
170
-
171
- return false;
172
- }
173
- }, 'childNodes');
174
-
175
- cell = cloneNode(cell, false);
176
- setSpanVal(cell, 'rowSpan', 1);
177
- setSpanVal(cell, 'colSpan', 1);
178
-
179
- if (formatNode) {
180
- cell.appendChild(formatNode);
181
- } else {
182
- if (!tinymce.isIE)
183
- cell.innerHTML = '<br data-mce-bogus="1" />';
184
- }
185
-
186
- return cell;
187
- };
188
-
189
- function cleanup() {
190
- var rng = dom.createRng();
191
-
192
- // Empty rows
193
- each(dom.select('tr', table), function(tr) {
194
- if (tr.cells.length == 0)
195
- dom.remove(tr);
196
- });
197
-
198
- // Empty table
199
- if (dom.select('tr', table).length == 0) {
200
- rng.setStartAfter(table);
201
- rng.setEndAfter(table);
202
- selection.setRng(rng);
203
- dom.remove(table);
204
- return;
205
- }
206
-
207
- // Empty header/body/footer
208
- each(dom.select('thead,tbody,tfoot', table), function(part) {
209
- if (part.rows.length == 0)
210
- dom.remove(part);
211
- });
212
-
213
- // Restore selection to start position if it still exists
214
- buildGrid();
215
-
216
- // Restore the selection to the closest table position
217
- row = grid[Math.min(grid.length - 1, startPos.y)];
218
- if (row) {
219
- selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true);
220
- selection.collapse(true);
221
- }
222
- };
223
-
224
- function fillLeftDown(x, y, rows, cols) {
225
- var tr, x2, r, c, cell;
226
-
227
- tr = grid[y][x].elm.parentNode;
228
- for (r = 1; r <= rows; r++) {
229
- tr = dom.getNext(tr, 'tr');
230
-
231
- if (tr) {
232
- // Loop left to find real cell
233
- for (x2 = x; x2 >= 0; x2--) {
234
- cell = grid[y + r][x2].elm;
235
-
236
- if (cell.parentNode == tr) {
237
- // Append clones after
238
- for (c = 1; c <= cols; c++)
239
- dom.insertAfter(cloneCell(cell), cell);
240
-
241
- break;
242
- }
243
- }
244
-
245
- if (x2 == -1) {
246
- // Insert nodes before first cell
247
- for (c = 1; c <= cols; c++)
248
- tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]);
249
- }
250
- }
251
- }
252
- };
253
-
254
- function split() {
255
- each(grid, function(row, y) {
256
- each(row, function(cell, x) {
257
- var colSpan, rowSpan, newCell, i;
258
-
259
- if (isCellSelected(cell)) {
260
- cell = cell.elm;
261
- colSpan = getSpanVal(cell, 'colspan');
262
- rowSpan = getSpanVal(cell, 'rowspan');
263
-
264
- if (colSpan > 1 || rowSpan > 1) {
265
- setSpanVal(cell, 'rowSpan', 1);
266
- setSpanVal(cell, 'colSpan', 1);
267
-
268
- // Insert cells right
269
- for (i = 0; i < colSpan - 1; i++)
270
- dom.insertAfter(cloneCell(cell), cell);
271
-
272
- fillLeftDown(x, y, rowSpan - 1, colSpan);
273
- }
274
- }
275
- });
276
- });
277
- };
278
-
279
- function merge(cell, cols, rows) {
280
- var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count;
281
-
282
- // Use specified cell and cols/rows
283
- if (cell) {
284
- pos = getPos(cell);
285
- startX = pos.x;
286
- startY = pos.y;
287
- endX = startX + (cols - 1);
288
- endY = startY + (rows - 1);
289
- } else {
290
- startPos = endPos = null;
291
-
292
- // Calculate start/end pos by checking for selected cells in grid works better with context menu
293
- each(grid, function(row, y) {
294
- each(row, function(cell, x) {
295
- if (isCellSelected(cell)) {
296
- if (!startPos) {
297
- startPos = {x: x, y: y};
298
- }
299
-
300
- endPos = {x: x, y: y};
301
- }
302
- });
303
- });
304
-
305
- // Use selection
306
- startX = startPos.x;
307
- startY = startPos.y;
308
- endX = endPos.x;
309
- endY = endPos.y;
310
- }
311
-
312
- // Find start/end cells
313
- startCell = getCell(startX, startY);
314
- endCell = getCell(endX, endY);
315
-
316
- // Check if the cells exists and if they are of the same part for example tbody = tbody
317
- if (startCell && endCell && startCell.part == endCell.part) {
318
- // Split and rebuild grid
319
- split();
320
- buildGrid();
321
-
322
- // Set row/col span to start cell
323
- startCell = getCell(startX, startY).elm;
324
- setSpanVal(startCell, 'colSpan', (endX - startX) + 1);
325
- setSpanVal(startCell, 'rowSpan', (endY - startY) + 1);
326
-
327
- // Remove other cells and add it's contents to the start cell
328
- for (y = startY; y <= endY; y++) {
329
- for (x = startX; x <= endX; x++) {
330
- if (!grid[y] || !grid[y][x])
331
- continue;
332
-
333
- cell = grid[y][x].elm;
334
-
335
- if (cell != startCell) {
336
- // Move children to startCell
337
- children = tinymce.grep(cell.childNodes);
338
- each(children, function(node) {
339
- startCell.appendChild(node);
340
- });
341
-
342
- // Remove bogus nodes if there is children in the target cell
343
- if (children.length) {
344
- children = tinymce.grep(startCell.childNodes);
345
- count = 0;
346
- each(children, function(node) {
347
- if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1)
348
- startCell.removeChild(node);
349
- });
350
- }
351
-
352
- // Remove cell
353
- dom.remove(cell);
354
- }
355
- }
356
- }
357
-
358
- // Remove empty rows etc and restore caret location
359
- cleanup();
360
- }
361
- };
362
-
363
- function insertRow(before) {
364
- var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan;
365
-
366
- // Find first/last row
367
- each(grid, function(row, y) {
368
- each(row, function(cell, x) {
369
- if (isCellSelected(cell)) {
370
- cell = cell.elm;
371
- rowElm = cell.parentNode;
372
- newRow = cloneNode(rowElm, false);
373
- posY = y;
374
-
375
- if (before)
376
- return false;
377
- }
378
- });
379
-
380
- if (before)
381
- return !posY;
382
- });
383
-
384
- for (x = 0; x < grid[0].length; x++) {
385
- // Cell not found could be because of an invalid table structure
386
- if (!grid[posY][x])
387
- continue;
388
-
389
- cell = grid[posY][x].elm;
390
-
391
- if (cell != lastCell) {
392
- if (!before) {
393
- rowSpan = getSpanVal(cell, 'rowspan');
394
- if (rowSpan > 1) {
395
- setSpanVal(cell, 'rowSpan', rowSpan + 1);
396
- continue;
397
- }
398
- } else {
399
- // Check if cell above can be expanded
400
- if (posY > 0 && grid[posY - 1][x]) {
401
- otherCell = grid[posY - 1][x].elm;
402
- rowSpan = getSpanVal(otherCell, 'rowSpan');
403
- if (rowSpan > 1) {
404
- setSpanVal(otherCell, 'rowSpan', rowSpan + 1);
405
- continue;
406
- }
407
- }
408
- }
409
-
410
- // Insert new cell into new row
411
- newCell = cloneCell(cell);
412
- setSpanVal(newCell, 'colSpan', cell.colSpan);
413
-
414
- newRow.appendChild(newCell);
415
-
416
- lastCell = cell;
417
- }
418
- }
419
-
420
- if (newRow.hasChildNodes()) {
421
- if (!before)
422
- dom.insertAfter(newRow, rowElm);
423
- else
424
- rowElm.parentNode.insertBefore(newRow, rowElm);
425
- }
426
- };
427
-
428
- function insertCol(before) {
429
- var posX, lastCell;
430
-
431
- // Find first/last column
432
- each(grid, function(row, y) {
433
- each(row, function(cell, x) {
434
- if (isCellSelected(cell)) {
435
- posX = x;
436
-
437
- if (before)
438
- return false;
439
- }
440
- });
441
-
442
- if (before)
443
- return !posX;
444
- });
445
-
446
- each(grid, function(row, y) {
447
- var cell, rowSpan, colSpan;
448
-
449
- if (!row[posX])
450
- return;
451
-
452
- cell = row[posX].elm;
453
- if (cell != lastCell) {
454
- colSpan = getSpanVal(cell, 'colspan');
455
- rowSpan = getSpanVal(cell, 'rowspan');
456
-
457
- if (colSpan == 1) {
458
- if (!before) {
459
- dom.insertAfter(cloneCell(cell), cell);
460
- fillLeftDown(posX, y, rowSpan - 1, colSpan);
461
- } else {
462
- cell.parentNode.insertBefore(cloneCell(cell), cell);
463
- fillLeftDown(posX, y, rowSpan - 1, colSpan);
464
- }
465
- } else
466
- setSpanVal(cell, 'colSpan', cell.colSpan + 1);
467
-
468
- lastCell = cell;
469
- }
470
- });
471
- };
472
-
473
- function deleteCols() {
474
- var cols = [];
475
-
476
- // Get selected column indexes
477
- each(grid, function(row, y) {
478
- each(row, function(cell, x) {
479
- if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) {
480
- each(grid, function(row) {
481
- var cell = row[x].elm, colSpan;
482
-
483
- colSpan = getSpanVal(cell, 'colSpan');
484
-
485
- if (colSpan > 1)
486
- setSpanVal(cell, 'colSpan', colSpan - 1);
487
- else
488
- dom.remove(cell);
489
- });
490
-
491
- cols.push(x);
492
- }
493
- });
494
- });
495
-
496
- cleanup();
497
- };
498
-
499
- function deleteRows() {
500
- var rows;
501
-
502
- function deleteRow(tr) {
503
- var nextTr, pos, lastCell;
504
-
505
- nextTr = dom.getNext(tr, 'tr');
506
-
507
- // Move down row spanned cells
508
- each(tr.cells, function(cell) {
509
- var rowSpan = getSpanVal(cell, 'rowSpan');
510
-
511
- if (rowSpan > 1) {
512
- setSpanVal(cell, 'rowSpan', rowSpan - 1);
513
- pos = getPos(cell);
514
- fillLeftDown(pos.x, pos.y, 1, 1);
515
- }
516
- });
517
-
518
- // Delete cells
519
- pos = getPos(tr.cells[0]);
520
- each(grid[pos.y], function(cell) {
521
- var rowSpan;
522
-
523
- cell = cell.elm;
524
-
525
- if (cell != lastCell) {
526
- rowSpan = getSpanVal(cell, 'rowSpan');
527
-
528
- if (rowSpan <= 1)
529
- dom.remove(cell);
530
- else
531
- setSpanVal(cell, 'rowSpan', rowSpan - 1);
532
-
533
- lastCell = cell;
534
- }
535
- });
536
- };
537
-
538
- // Get selected rows and move selection out of scope
539
- rows = getSelectedRows();
540
-
541
- // Delete all selected rows
542
- each(rows.reverse(), function(tr) {
543
- deleteRow(tr);
544
- });
545
-
546
- cleanup();
547
- };
548
-
549
- function cutRows() {
550
- var rows = getSelectedRows();
551
-
552
- dom.remove(rows);
553
- cleanup();
554
-
555
- return rows;
556
- };
557
-
558
- function copyRows() {
559
- var rows = getSelectedRows();
560
-
561
- each(rows, function(row, i) {
562
- rows[i] = cloneNode(row, true);
563
- });
564
-
565
- return rows;
566
- };
567
-
568
- function pasteRows(rows, before) {
569
- var selectedRows = getSelectedRows(),
570
- targetRow = selectedRows[before ? 0 : selectedRows.length - 1],
571
- targetCellCount = targetRow.cells.length;
572
-
573
- // Calc target cell count
574
- each(grid, function(row) {
575
- var match;
576
-
577
- targetCellCount = 0;
578
- each(row, function(cell, x) {
579
- if (cell.real)
580
- targetCellCount += cell.colspan;
581
-
582
- if (cell.elm.parentNode == targetRow)
583
- match = 1;
584
- });
585
-
586
- if (match)
587
- return false;
588
- });
589
-
590
- if (!before)
591
- rows.reverse();
592
-
593
- each(rows, function(row) {
594
- var cellCount = row.cells.length, cell;
595
-
596
- // Remove col/rowspans
597
- for (i = 0; i < cellCount; i++) {
598
- cell = row.cells[i];
599
- setSpanVal(cell, 'colSpan', 1);
600
- setSpanVal(cell, 'rowSpan', 1);
601
- }
602
-
603
- // Needs more cells
604
- for (i = cellCount; i < targetCellCount; i++)
605
- row.appendChild(cloneCell(row.cells[cellCount - 1]));
606
-
607
- // Needs less cells
608
- for (i = targetCellCount; i < cellCount; i++)
609
- dom.remove(row.cells[i]);
610
-
611
- // Add before/after
612
- if (before)
613
- targetRow.parentNode.insertBefore(row, targetRow);
614
- else
615
- dom.insertAfter(row, targetRow);
616
- });
617
-
618
- // Remove current selection
619
- dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
620
- };
621
-
622
- function getPos(target) {
623
- var pos;
624
-
625
- each(grid, function(row, y) {
626
- each(row, function(cell, x) {
627
- if (cell.elm == target) {
628
- pos = {x : x, y : y};
629
- return false;
630
- }
631
- });
632
-
633
- return !pos;
634
- });
635
-
636
- return pos;
637
- };
638
-
639
- function setStartCell(cell) {
640
- startPos = getPos(cell);
641
- };
642
-
643
- function findEndPos() {
644
- var pos, maxX, maxY;
645
-
646
- maxX = maxY = 0;
647
-
648
- each(grid, function(row, y) {
649
- each(row, function(cell, x) {
650
- var colSpan, rowSpan;
651
-
652
- if (isCellSelected(cell)) {
653
- cell = grid[y][x];
654
-
655
- if (x > maxX)
656
- maxX = x;
657
-
658
- if (y > maxY)
659
- maxY = y;
660
-
661
- if (cell.real) {
662
- colSpan = cell.colspan - 1;
663
- rowSpan = cell.rowspan - 1;
664
-
665
- if (colSpan) {
666
- if (x + colSpan > maxX)
667
- maxX = x + colSpan;
668
- }
669
-
670
- if (rowSpan) {
671
- if (y + rowSpan > maxY)
672
- maxY = y + rowSpan;
673
- }
674
- }
675
- }
676
- });
677
- });
678
-
679
- return {x : maxX, y : maxY};
680
- };
681
-
682
- function setEndCell(cell) {
683
- var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan;
684
-
685
- endPos = getPos(cell);
686
-
687
- if (startPos && endPos) {
688
- // Get start/end positions
689
- startX = Math.min(startPos.x, endPos.x);
690
- startY = Math.min(startPos.y, endPos.y);
691
- endX = Math.max(startPos.x, endPos.x);
692
- endY = Math.max(startPos.y, endPos.y);
693
-
694
- // Expand end positon to include spans
695
- maxX = endX;
696
- maxY = endY;
697
-
698
- // Expand startX
699
- for (y = startY; y <= maxY; y++) {
700
- cell = grid[y][startX];
701
-
702
- if (!cell.real) {
703
- if (startX - (cell.colspan - 1) < startX)
704
- startX -= cell.colspan - 1;
705
- }
706
- }
707
-
708
- // Expand startY
709
- for (x = startX; x <= maxX; x++) {
710
- cell = grid[startY][x];
711
-
712
- if (!cell.real) {
713
- if (startY - (cell.rowspan - 1) < startY)
714
- startY -= cell.rowspan - 1;
715
- }
716
- }
717
-
718
- // Find max X, Y
719
- for (y = startY; y <= endY; y++) {
720
- for (x = startX; x <= endX; x++) {
721
- cell = grid[y][x];
722
-
723
- if (cell.real) {
724
- colSpan = cell.colspan - 1;
725
- rowSpan = cell.rowspan - 1;
726
-
727
- if (colSpan) {
728
- if (x + colSpan > maxX)
729
- maxX = x + colSpan;
730
- }
731
-
732
- if (rowSpan) {
733
- if (y + rowSpan > maxY)
734
- maxY = y + rowSpan;
735
- }
736
- }
737
- }
738
- }
739
-
740
- // Remove current selection
741
- dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
742
-
743
- // Add new selection
744
- for (y = startY; y <= maxY; y++) {
745
- for (x = startX; x <= maxX; x++) {
746
- if (grid[y][x])
747
- dom.addClass(grid[y][x].elm, 'mceSelected');
748
- }
749
- }
750
- }
751
- };
752
-
753
- // Expose to public
754
- tinymce.extend(this, {
755
- deleteTable : deleteTable,
756
- split : split,
757
- merge : merge,
758
- insertRow : insertRow,
759
- insertCol : insertCol,
760
- deleteCols : deleteCols,
761
- deleteRows : deleteRows,
762
- cutRows : cutRows,
763
- copyRows : copyRows,
764
- pasteRows : pasteRows,
765
- getPos : getPos,
766
- setStartCell : setStartCell,
767
- setEndCell : setEndCell
768
- });
769
- };
770
-
771
- tinymce.create('tinymce.plugins.TablePlugin', {
772
- init : function(ed, url) {
773
- var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload
774
-
775
- function createTableGrid(node) {
776
- var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table');
777
-
778
- if (tblElm)
779
- return new TableGrid(tblElm, ed.dom, selection);
780
- };
781
-
782
- function cleanup() {
783
- // Restore selection possibilities
784
- ed.getBody().style.webkitUserSelect = '';
785
-
786
- if (hasCellSelection) {
787
- ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
788
- hasCellSelection = false;
789
- }
790
- };
791
-
792
- // Register buttons
793
- each([
794
- ['table', 'table.desc', 'mceInsertTable', true],
795
- ['delete_table', 'table.del', 'mceTableDelete'],
796
- ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],
797
- ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],
798
- ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],
799
- ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],
800
- ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],
801
- ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],
802
- ['row_props', 'table.row_desc', 'mceTableRowProps', true],
803
- ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],
804
- ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],
805
- ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]
806
- ], function(c) {
807
- ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});
808
- });
809
-
810
- // Select whole table is a table border is clicked
811
- if (!tinymce.isIE) {
812
- ed.onClick.add(function(ed, e) {
813
- e = e.target;
814
-
815
- if (e.nodeName === 'TABLE') {
816
- ed.selection.select(e);
817
- ed.nodeChanged();
818
- }
819
- });
820
- }
821
-
822
- ed.onPreProcess.add(function(ed, args) {
823
- var nodes, i, node, dom = ed.dom, value;
824
-
825
- nodes = dom.select('table', args.node);
826
- i = nodes.length;
827
- while (i--) {
828
- node = nodes[i];
829
- dom.setAttrib(node, 'data-mce-style', '');
830
-
831
- if ((value = dom.getAttrib(node, 'width'))) {
832
- dom.setStyle(node, 'width', value);
833
- dom.setAttrib(node, 'width', '');
834
- }
835
-
836
- if ((value = dom.getAttrib(node, 'height'))) {
837
- dom.setStyle(node, 'height', value);
838
- dom.setAttrib(node, 'height', '');
839
- }
840
- }
841
- });
842
-
843
- // Handle node change updates
844
- ed.onNodeChange.add(function(ed, cm, n) {
845
- var p;
846
-
847
- n = ed.selection.getStart();
848
- p = ed.dom.getParent(n, 'td,th,caption');
849
- cm.setActive('table', n.nodeName === 'TABLE' || !!p);
850
-
851
- // Disable table tools if we are in caption
852
- if (p && p.nodeName === 'CAPTION')
853
- p = 0;
854
-
855
- cm.setDisabled('delete_table', !p);
856
- cm.setDisabled('delete_col', !p);
857
- cm.setDisabled('delete_table', !p);
858
- cm.setDisabled('delete_row', !p);
859
- cm.setDisabled('col_after', !p);
860
- cm.setDisabled('col_before', !p);
861
- cm.setDisabled('row_after', !p);
862
- cm.setDisabled('row_before', !p);
863
- cm.setDisabled('row_props', !p);
864
- cm.setDisabled('cell_props', !p);
865
- cm.setDisabled('split_cells', !p);
866
- cm.setDisabled('merge_cells', !p);
867
- });
868
-
869
- ed.onInit.add(function(ed) {
870
- var startTable, startCell, dom = ed.dom, tableGrid;
871
-
872
- winMan = ed.windowManager;
873
-
874
- // Add cell selection logic
875
- ed.onMouseDown.add(function(ed, e) {
876
- if (e.button != 2) {
877
- cleanup();
878
-
879
- startCell = dom.getParent(e.target, 'td,th');
880
- startTable = dom.getParent(startCell, 'table');
881
- }
882
- });
883
-
884
- dom.bind(ed.getDoc(), 'mouseover', function(e) {
885
- var sel, table, target = e.target;
886
-
887
- if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) {
888
- table = dom.getParent(target, 'table');
889
- if (table == startTable) {
890
- if (!tableGrid) {
891
- tableGrid = createTableGrid(table);
892
- tableGrid.setStartCell(startCell);
893
-
894
- ed.getBody().style.webkitUserSelect = 'none';
895
- }
896
-
897
- tableGrid.setEndCell(target);
898
- hasCellSelection = true;
899
- }
900
-
901
- // Remove current selection
902
- sel = ed.selection.getSel();
903
-
904
- try {
905
- if (sel.removeAllRanges)
906
- sel.removeAllRanges();
907
- else
908
- sel.empty();
909
- } catch (ex) {
910
- // IE9 might throw errors here
911
- }
912
-
913
- e.preventDefault();
914
- }
915
- });
916
-
917
- ed.onMouseUp.add(function(ed, e) {
918
- var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode;
919
-
920
- // Move selection to startCell
921
- if (startCell) {
922
- if (tableGrid)
923
- ed.getBody().style.webkitUserSelect = '';
924
-
925
- function setPoint(node, start) {
926
- var walker = new tinymce.dom.TreeWalker(node, node);
927
-
928
- do {
929
- // Text node
930
- if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {
931
- if (start)
932
- rng.setStart(node, 0);
933
- else
934
- rng.setEnd(node, node.nodeValue.length);
935
-
936
- return;
937
- }
938
-
939
- // BR element
940
- if (node.nodeName == 'BR') {
941
- if (start)
942
- rng.setStartBefore(node);
943
- else
944
- rng.setEndBefore(node);
945
-
946
- return;
947
- }
948
- } while (node = (start ? walker.next() : walker.prev()));
949
- }
950
-
951
- // Try to expand text selection as much as we can only Gecko supports cell selection
952
- selectedCells = dom.select('td.mceSelected,th.mceSelected');
953
- if (selectedCells.length > 0) {
954
- rng = dom.createRng();
955
- node = selectedCells[0];
956
- endNode = selectedCells[selectedCells.length - 1];
957
- rng.setStartBefore(node);
958
- rng.setEndAfter(node);
959
-
960
- setPoint(node, 1);
961
- walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table'));
962
-
963
- do {
964
- if (node.nodeName == 'TD' || node.nodeName == 'TH') {
965
- if (!dom.hasClass(node, 'mceSelected'))
966
- break;
967
-
968
- lastNode = node;
969
- }
970
- } while (node = walker.next());
971
-
972
- setPoint(lastNode);
973
-
974
- sel.setRng(rng);
975
- }
976
-
977
- ed.nodeChanged();
978
- startCell = tableGrid = startTable = null;
979
- }
980
- });
981
-
982
- ed.onKeyUp.add(function(ed, e) {
983
- cleanup();
984
- });
985
-
986
- ed.onKeyDown.add(function (ed, e) {
987
- fixTableCellSelection(ed);
988
- });
989
-
990
- ed.onMouseDown.add(function (ed, e) {
991
- if (e.button != 2) {
992
- fixTableCellSelection(ed);
993
- }
994
- });
995
- function tableCellSelected(ed, rng, n, currentCell) {
996
- // The decision of when a table cell is selected is somewhat involved. The fact that this code is
997
- // required is actually a pointer to the root cause of this bug. A cell is selected when the start
998
- // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases)
999
- // or the parent of the table (in the case of the selection containing the last cell of a table).
1000
- var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'),
1001
- tableParent, allOfCellSelected, tableCellSelection;
1002
- if (table)
1003
- tableParent = table.parentNode;
1004
- allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE &&
1005
- rng.startOffset == 0 &&
1006
- rng.endOffset == 0 &&
1007
- currentCell &&
1008
- (n.nodeName=="TR" || n==tableParent);
1009
- tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell;
1010
- return allOfCellSelected || tableCellSelection;
1011
- // return false;
1012
- }
1013
-
1014
- // this nasty hack is here to work around some WebKit selection bugs.
1015
- function fixTableCellSelection(ed) {
1016
- if (!tinymce.isWebKit)
1017
- return;
1018
-
1019
- var rng = ed.selection.getRng();
1020
- var n = ed.selection.getNode();
1021
- var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH');
1022
-
1023
- if (!tableCellSelected(ed, rng, n, currentCell))
1024
- return;
1025
- if (!currentCell) {
1026
- currentCell=n;
1027
- }
1028
-
1029
- // Get the very last node inside the table cell
1030
- var end = currentCell.lastChild;
1031
- while (end.lastChild)
1032
- end = end.lastChild;
1033
-
1034
- // Select the entire table cell. Nothing outside of the table cell should be selected.
1035
- rng.setEnd(end, end.nodeValue.length);
1036
- ed.selection.setRng(rng);
1037
- }
1038
- ed.plugins.table.fixTableCellSelection=fixTableCellSelection;
1039
-
1040
- // Add context menu
1041
- if (ed && ed.plugins.contextmenu) {
1042
- ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
1043
- var sm, se = ed.selection, el = se.getNode() || ed.getBody();
1044
-
1045
- if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) {
1046
- m.removeAll();
1047
-
1048
- if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {
1049
- m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
1050
- m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
1051
- m.addSeparator();
1052
- }
1053
-
1054
- if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {
1055
- m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
1056
- m.addSeparator();
1057
- }
1058
-
1059
- m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}});
1060
- m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'});
1061
- m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'});
1062
- m.addSeparator();
1063
-
1064
- // Cell menu
1065
- sm = m.addMenu({title : 'table.cell'});
1066
- sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'});
1067
- sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'});
1068
- sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'});
1069
-
1070
- // Row menu
1071
- sm = m.addMenu({title : 'table.row'});
1072
- sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'});
1073
- sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});
1074
- sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});
1075
- sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});
1076
- sm.addSeparator();
1077
- sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});
1078
- sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});
1079
- sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows);
1080
- sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows);
1081
-
1082
- // Column menu
1083
- sm = m.addMenu({title : 'table.col'});
1084
- sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});
1085
- sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});
1086
- sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});
1087
- } else
1088
- m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'});
1089
- });
1090
- }
1091
-
1092
- // Fix to allow navigating up and down in a table in WebKit browsers.
1093
- if (tinymce.isWebKit) {
1094
- function moveSelection(ed, e) {
1095
- var VK = tinymce.VK;
1096
- var key = e.keyCode;
1097
-
1098
- function handle(upBool, sourceNode, event) {
1099
- var siblingDirection = upBool ? 'previousSibling' : 'nextSibling';
1100
- var currentRow = ed.dom.getParent(sourceNode, 'tr');
1101
- var siblingRow = currentRow[siblingDirection];
1102
-
1103
- if (siblingRow) {
1104
- moveCursorToRow(ed, sourceNode, siblingRow, upBool);
1105
- tinymce.dom.Event.cancel(event);
1106
- return true;
1107
- } else {
1108
- var tableNode = ed.dom.getParent(currentRow, 'table');
1109
- var middleNode = currentRow.parentNode;
1110
- var parentNodeName = middleNode.nodeName.toLowerCase();
1111
- if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) {
1112
- var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody');
1113
- if (targetParent !== null) {
1114
- return moveToRowInTarget(upBool, targetParent, sourceNode, event);
1115
- }
1116
- }
1117
- return escapeTable(upBool, currentRow, siblingDirection, tableNode, event);
1118
- }
1119
- }
1120
-
1121
- function getTargetParent(upBool, topNode, secondNode, nodeName) {
1122
- var tbodies = ed.dom.select('>' + nodeName, topNode);
1123
- var position = tbodies.indexOf(secondNode);
1124
- if (upBool && position === 0 || !upBool && position === tbodies.length - 1) {
1125
- return getFirstHeadOrFoot(upBool, topNode);
1126
- } else if (position === -1) {
1127
- var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1;
1128
- return tbodies[topOrBottom];
1129
- } else {
1130
- return tbodies[position + (upBool ? -1 : 1)];
1131
- }
1132
- }
1133
-
1134
- function getFirstHeadOrFoot(upBool, parent) {
1135
- var tagName = upBool ? 'thead' : 'tfoot';
1136
- var headOrFoot = ed.dom.select('>' + tagName, parent);
1137
- return headOrFoot.length !== 0 ? headOrFoot[0] : null;
1138
- }
1139
-
1140
- function moveToRowInTarget(upBool, targetParent, sourceNode, event) {
1141
- var targetRow = getChildForDirection(targetParent, upBool);
1142
- targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool);
1143
- tinymce.dom.Event.cancel(event);
1144
- return true;
1145
- }
1146
-
1147
- function escapeTable(upBool, currentRow, siblingDirection, table, event) {
1148
- var tableSibling = table[siblingDirection];
1149
- if (tableSibling) {
1150
- moveCursorToStartOfElement(tableSibling);
1151
- return true;
1152
- } else {
1153
- var parentCell = ed.dom.getParent(table, 'td,th');
1154
- if (parentCell) {
1155
- return handle(upBool, parentCell, event);
1156
- } else {
1157
- var backUpSibling = getChildForDirection(currentRow, !upBool);
1158
- moveCursorToStartOfElement(backUpSibling);
1159
- return tinymce.dom.Event.cancel(event);
1160
- }
1161
- }
1162
- }
1163
-
1164
- function getChildForDirection(parent, up) {
1165
- var child = parent && parent[up ? 'lastChild' : 'firstChild'];
1166
- // BR is not a valid table child to return in this case we return the table cell
1167
- return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child;
1168
- }
1169
-
1170
- function moveCursorToStartOfElement(n) {
1171
- ed.selection.setCursorLocation(n, 0);
1172
- }
1173
-
1174
- function isVerticalMovement() {
1175
- return key == VK.UP || key == VK.DOWN;
1176
- }
1177
-
1178
- function isInTable(ed) {
1179
- var node = ed.selection.getNode();
1180
- var currentRow = ed.dom.getParent(node, 'tr');
1181
- return currentRow !== null;
1182
- }
1183
-
1184
- function columnIndex(column) {
1185
- var colIndex = 0;
1186
- var c = column;
1187
- while (c.previousSibling) {
1188
- c = c.previousSibling;
1189
- colIndex = colIndex + getSpanVal(c, "colspan");
1190
- }
1191
- return colIndex;
1192
- }
1193
-
1194
- function findColumn(rowElement, columnIndex) {
1195
- var c = 0;
1196
- var r = 0;
1197
- each(rowElement.children, function(cell, i) {
1198
- c = c + getSpanVal(cell, "colspan");
1199
- r = i;
1200
- if (c > columnIndex)
1201
- return false;
1202
- });
1203
- return r;
1204
- }
1205
-
1206
- function moveCursorToRow(ed, node, row, upBool) {
1207
- var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th'));
1208
- var tgtColumnIndex = findColumn(row, srcColumnIndex);
1209
- var tgtNode = row.childNodes[tgtColumnIndex];
1210
- var rowCellTarget = getChildForDirection(tgtNode, upBool);
1211
- moveCursorToStartOfElement(rowCellTarget || tgtNode);
1212
- }
1213
-
1214
- function shouldFixCaret(preBrowserNode) {
1215
- var newNode = ed.selection.getNode();
1216
- var newParent = ed.dom.getParent(newNode, 'td,th');
1217
- var oldParent = ed.dom.getParent(preBrowserNode, 'td,th');
1218
- return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent)
1219
- }
1220
-
1221
- function checkSameParentTable(nodeOne, NodeTwo) {
1222
- return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE');
1223
- }
1224
-
1225
- if (isVerticalMovement() && isInTable(ed)) {
1226
- var preBrowserNode = ed.selection.getNode();
1227
- setTimeout(function() {
1228
- if (shouldFixCaret(preBrowserNode)) {
1229
- handle(!e.shiftKey && key === VK.UP, preBrowserNode, e);
1230
- }
1231
- }, 0);
1232
- }
1233
- }
1234
-
1235
- ed.onKeyDown.add(moveSelection);
1236
- }
1237
-
1238
- // Fixes an issue on Gecko where it's impossible to place the caret behind a table
1239
- // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
1240
- function fixTableCaretPos() {
1241
- var last;
1242
-
1243
- // Skip empty text nodes form the end
1244
- for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ;
1245
-
1246
- if (last && last.nodeName == 'TABLE') {
1247
- if (ed.settings.forced_root_block)
1248
- ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />');
1249
- else
1250
- ed.dom.add(ed.getBody(), 'br', {'data-mce-bogus': '1'});
1251
- }
1252
- };
1253
-
1254
- // Fixes an bug where it's impossible to place the caret before a table in Gecko
1255
- // this fix solves it by detecting when the caret is at the beginning of such a table
1256
- // and then manually moves the caret infront of the table
1257
- if (tinymce.isGecko) {
1258
- ed.onKeyDown.add(function(ed, e) {
1259
- var rng, table, dom = ed.dom;
1260
-
1261
- // On gecko it's not possible to place the caret before a table
1262
- if (e.keyCode == 37 || e.keyCode == 38) {
1263
- rng = ed.selection.getRng();
1264
- table = dom.getParent(rng.startContainer, 'table');
1265
-
1266
- if (table && ed.getBody().firstChild == table) {
1267
- if (isAtStart(rng, table)) {
1268
- rng = dom.createRng();
1269
-
1270
- rng.setStartBefore(table);
1271
- rng.setEndBefore(table);
1272
-
1273
- ed.selection.setRng(rng);
1274
-
1275
- e.preventDefault();
1276
- }
1277
- }
1278
- }
1279
- });
1280
- }
1281
-
1282
- ed.onKeyUp.add(fixTableCaretPos);
1283
- ed.onSetContent.add(fixTableCaretPos);
1284
- ed.onVisualAid.add(fixTableCaretPos);
1285
-
1286
- ed.onPreProcess.add(function(ed, o) {
1287
- var last = o.node.lastChild;
1288
-
1289
- if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 && (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) && last.previousSibling && last.previousSibling.nodeName == "TABLE") {
1290
- ed.dom.remove(last);
1291
- }
1292
- });
1293
-
1294
-
1295
- /**
1296
- * Fixes bug in Gecko where shift-enter in table cell does not place caret on new line
1297
- *
1298
- * Removed: Since the new enter logic seems to fix this one.
1299
- */
1300
- /*
1301
- if (tinymce.isGecko) {
1302
- ed.onKeyDown.add(function(ed, e) {
1303
- if (e.keyCode === tinymce.VK.ENTER && e.shiftKey) {
1304
- var node = ed.selection.getRng().startContainer;
1305
- var tableCell = dom.getParent(node, 'td,th');
1306
- if (tableCell) {
1307
- var zeroSizedNbsp = ed.getDoc().createTextNode("\uFEFF");
1308
- dom.insertAfter(zeroSizedNbsp, node);
1309
- }
1310
- }
1311
- });
1312
- }
1313
- */
1314
-
1315
- fixTableCaretPos();
1316
- ed.startContent = ed.getContent({format : 'raw'});
1317
- });
1318
-
1319
- // Register action commands
1320
- each({
1321
- mceTableSplitCells : function(grid) {
1322
- grid.split();
1323
- },
1324
-
1325
- mceTableMergeCells : function(grid) {
1326
- var rowSpan, colSpan, cell;
1327
-
1328
- cell = ed.dom.getParent(ed.selection.getNode(), 'th,td');
1329
- if (cell) {
1330
- rowSpan = cell.rowSpan;
1331
- colSpan = cell.colSpan;
1332
- }
1333
-
1334
- if (!ed.dom.select('td.mceSelected,th.mceSelected').length) {
1335
- winMan.open({
1336
- url : url + '/merge_cells.htm',
1337
- width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)),
1338
- height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)),
1339
- inline : 1
1340
- }, {
1341
- rows : rowSpan,
1342
- cols : colSpan,
1343
- onaction : function(data) {
1344
- grid.merge(cell, data.cols, data.rows);
1345
- },
1346
- plugin_url : url
1347
- });
1348
- } else
1349
- grid.merge();
1350
- },
1351
-
1352
- mceTableInsertRowBefore : function(grid) {
1353
- grid.insertRow(true);
1354
- },
1355
-
1356
- mceTableInsertRowAfter : function(grid) {
1357
- grid.insertRow();
1358
- },
1359
-
1360
- mceTableInsertColBefore : function(grid) {
1361
- grid.insertCol(true);
1362
- },
1363
-
1364
- mceTableInsertColAfter : function(grid) {
1365
- grid.insertCol();
1366
- },
1367
-
1368
- mceTableDeleteCol : function(grid) {
1369
- grid.deleteCols();
1370
- },
1371
-
1372
- mceTableDeleteRow : function(grid) {
1373
- grid.deleteRows();
1374
- },
1375
-
1376
- mceTableCutRow : function(grid) {
1377
- clipboardRows = grid.cutRows();
1378
- },
1379
-
1380
- mceTableCopyRow : function(grid) {
1381
- clipboardRows = grid.copyRows();
1382
- },
1383
-
1384
- mceTablePasteRowBefore : function(grid) {
1385
- grid.pasteRows(clipboardRows, true);
1386
- },
1387
-
1388
- mceTablePasteRowAfter : function(grid) {
1389
- grid.pasteRows(clipboardRows);
1390
- },
1391
-
1392
- mceTableDelete : function(grid) {
1393
- grid.deleteTable();
1394
- }
1395
- }, function(func, name) {
1396
- ed.addCommand(name, function() {
1397
- var grid = createTableGrid();
1398
-
1399
- if (grid) {
1400
- func(grid);
1401
- ed.execCommand('mceRepaint');
1402
- cleanup();
1403
- }
1404
- });
1405
- });
1406
-
1407
- // Register dialog commands
1408
- each({
1409
- mceInsertTable : function(val) {
1410
- winMan.open({
1411
- url : url + '/table.htm',
1412
- width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)),
1413
- height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)),
1414
- inline : 1
1415
- }, {
1416
- plugin_url : url,
1417
- action : val ? val.action : 0
1418
- });
1419
- },
1420
-
1421
- mceTableRowProps : function() {
1422
- winMan.open({
1423
- url : url + '/row.htm',
1424
- width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)),
1425
- height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)),
1426
- inline : 1
1427
- }, {
1428
- plugin_url : url
1429
- });
1430
- },
1431
-
1432
- mceTableCellProps : function() {
1433
- winMan.open({
1434
- url : url + '/cell.htm',
1435
- width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)),
1436
- height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)),
1437
- inline : 1
1438
- }, {
1439
- plugin_url : url
1440
- });
1441
- }
1442
- }, function(func, name) {
1443
- ed.addCommand(name, function(ui, val) {
1444
- func(val);
1445
- });
1446
- });
1447
- }
1448
- });
1449
-
1450
- // Register plugin
1451
- tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);
1452
- })(tinymce);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/js/cell.js DELETED
@@ -1,319 +0,0 @@
1
- tinyMCEPopup.requireLangPack();
2
-
3
- var ed;
4
-
5
- function init() {
6
- ed = tinyMCEPopup.editor;
7
- tinyMCEPopup.resizeToInnerSize();
8
-
9
- document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
10
- document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
11
- document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')
12
-
13
- var inst = ed;
14
- var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th");
15
- var formObj = document.forms[0];
16
- var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));
17
-
18
- // Get table cell data
19
- var celltype = tdElm.nodeName.toLowerCase();
20
- var align = ed.dom.getAttrib(tdElm, 'align');
21
- var valign = ed.dom.getAttrib(tdElm, 'valign');
22
- var width = trimSize(getStyle(tdElm, 'width', 'width'));
23
- var height = trimSize(getStyle(tdElm, 'height', 'height'));
24
- var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));
25
- var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));
26
- var className = ed.dom.getAttrib(tdElm, 'class');
27
- var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
28
- var id = ed.dom.getAttrib(tdElm, 'id');
29
- var lang = ed.dom.getAttrib(tdElm, 'lang');
30
- var dir = ed.dom.getAttrib(tdElm, 'dir');
31
- var scope = ed.dom.getAttrib(tdElm, 'scope');
32
-
33
- // Setup form
34
- addClassesToList('class', 'table_cell_styles');
35
- TinyMCE_EditableSelects.init();
36
-
37
- if (!ed.dom.hasClass(tdElm, 'mceSelected')) {
38
- formObj.bordercolor.value = bordercolor;
39
- formObj.bgcolor.value = bgcolor;
40
- formObj.backgroundimage.value = backgroundimage;
41
- formObj.width.value = width;
42
- formObj.height.value = height;
43
- formObj.id.value = id;
44
- formObj.lang.value = lang;
45
- formObj.style.value = ed.dom.serializeStyle(st);
46
- selectByValue(formObj, 'align', align);
47
- selectByValue(formObj, 'valign', valign);
48
- selectByValue(formObj, 'class', className, true, true);
49
- selectByValue(formObj, 'celltype', celltype);
50
- selectByValue(formObj, 'dir', dir);
51
- selectByValue(formObj, 'scope', scope);
52
-
53
- // Resize some elements
54
- if (isVisible('backgroundimagebrowser'))
55
- document.getElementById('backgroundimage').style.width = '180px';
56
-
57
- updateColor('bordercolor_pick', 'bordercolor');
58
- updateColor('bgcolor_pick', 'bgcolor');
59
- } else
60
- tinyMCEPopup.dom.hide('action');
61
- }
62
-
63
- function updateAction() {
64
- var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
65
-
66
- if (!AutoValidator.validate(formObj)) {
67
- tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
68
- return false;
69
- }
70
-
71
- tinyMCEPopup.restoreSelection();
72
- el = ed.selection.getStart();
73
- tdElm = ed.dom.getParent(el, "td,th");
74
- trElm = ed.dom.getParent(el, "tr");
75
- tableElm = ed.dom.getParent(el, "table");
76
-
77
- // Cell is selected
78
- if (ed.dom.hasClass(tdElm, 'mceSelected')) {
79
- // Update all selected sells
80
- tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {
81
- updateCell(td);
82
- });
83
-
84
- ed.addVisual();
85
- ed.nodeChanged();
86
- inst.execCommand('mceEndUndoLevel');
87
- tinyMCEPopup.close();
88
- return;
89
- }
90
-
91
- switch (getSelectValue(formObj, 'action')) {
92
- case "cell":
93
- var celltype = getSelectValue(formObj, 'celltype');
94
- var scope = getSelectValue(formObj, 'scope');
95
-
96
- function doUpdate(s) {
97
- if (s) {
98
- updateCell(tdElm);
99
-
100
- ed.addVisual();
101
- ed.nodeChanged();
102
- inst.execCommand('mceEndUndoLevel');
103
- tinyMCEPopup.close();
104
- }
105
- };
106
-
107
- if (ed.getParam("accessibility_warnings", 1)) {
108
- if (celltype == "th" && scope == "")
109
- tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);
110
- else
111
- doUpdate(1);
112
-
113
- return;
114
- }
115
-
116
- updateCell(tdElm);
117
- break;
118
-
119
- case "row":
120
- var cell = trElm.firstChild;
121
-
122
- if (cell.nodeName != "TD" && cell.nodeName != "TH")
123
- cell = nextCell(cell);
124
-
125
- do {
126
- cell = updateCell(cell, true);
127
- } while ((cell = nextCell(cell)) != null);
128
-
129
- break;
130
-
131
- case "col":
132
- var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr");
133
-
134
- if (cell.nodeName != "TD" && cell.nodeName != "TH")
135
- cell = nextCell(cell);
136
-
137
- do {
138
- if (cell == tdElm)
139
- break;
140
- col += cell.getAttribute("colspan")?cell.getAttribute("colspan"):1;
141
- } while ((cell = nextCell(cell)) != null);
142
-
143
- for (var i=0; i<rows.length; i++) {
144
- cell = rows[i].firstChild;
145
-
146
- if (cell.nodeName != "TD" && cell.nodeName != "TH")
147
- cell = nextCell(cell);
148
-
149
- curr = 0;
150
- do {
151
- if (curr == col) {
152
- cell = updateCell(cell, true);
153
- break;
154
- }
155
- curr += cell.getAttribute("colspan")?cell.getAttribute("colspan"):1;
156
- } while ((cell = nextCell(cell)) != null);
157
- }
158
-
159
- break;
160
-
161
- case "all":
162
- var rows = tableElm.getElementsByTagName("tr");
163
-
164
- for (var i=0; i<rows.length; i++) {
165
- var cell = rows[i].firstChild;
166
-
167
- if (cell.nodeName != "TD" && cell.nodeName != "TH")
168
- cell = nextCell(cell);
169
-
170
- do {
171
- cell = updateCell(cell, true);
172
- } while ((cell = nextCell(cell)) != null);
173
- }
174
-
175
- break;
176
- }
177
-
178
- ed.addVisual();
179
- ed.nodeChanged();
180
- inst.execCommand('mceEndUndoLevel');
181
- tinyMCEPopup.close();
182
- }
183
-
184
- function nextCell(elm) {
185
- while ((elm = elm.nextSibling) != null) {
186
- if (elm.nodeName == "TD" || elm.nodeName == "TH")
187
- return elm;
188
- }
189
-
190
- return null;
191
- }
192
-
193
- function updateCell(td, skip_id) {
194
- var inst = ed;
195
- var formObj = document.forms[0];
196
- var curCellType = td.nodeName.toLowerCase();
197
- var celltype = getSelectValue(formObj, 'celltype');
198
- var doc = inst.getDoc();
199
- var dom = ed.dom;
200
-
201
- if (!skip_id)
202
- dom.setAttrib(td, 'id', formObj.id.value);
203
-
204
- dom.setAttrib(td, 'align', formObj.align.value);
205
- dom.setAttrib(td, 'vAlign', formObj.valign.value);
206
- dom.setAttrib(td, 'lang', formObj.lang.value);
207
- dom.setAttrib(td, 'dir', getSelectValue(formObj, 'dir'));
208
- dom.setAttrib(td, 'style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
209
- dom.setAttrib(td, 'scope', formObj.scope.value);
210
- dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
211
-
212
- // Clear deprecated attributes
213
- ed.dom.setAttrib(td, 'width', '');
214
- ed.dom.setAttrib(td, 'height', '');
215
- ed.dom.setAttrib(td, 'bgColor', '');
216
- ed.dom.setAttrib(td, 'borderColor', '');
217
- ed.dom.setAttrib(td, 'background', '');
218
-
219
- // Set styles
220
- td.style.width = getCSSSize(formObj.width.value);
221
- td.style.height = getCSSSize(formObj.height.value);
222
- if (formObj.bordercolor.value != "") {
223
- td.style.borderColor = formObj.bordercolor.value;
224
- td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;
225
- td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;
226
- } else
227
- td.style.borderColor = '';
228
-
229
- td.style.backgroundColor = formObj.bgcolor.value;
230
-
231
- if (formObj.backgroundimage.value != "")
232
- td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
233
- else
234
- td.style.backgroundImage = '';
235
-
236
- if (curCellType != celltype) {
237
- // changing to a different node type
238
- var newCell = doc.createElement(celltype);
239
-
240
- for (var c=0; c<td.childNodes.length; c++)
241
- newCell.appendChild(td.childNodes[c].cloneNode(1));
242
-
243
- for (var a=0; a<td.attributes.length; a++)
244
- ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
245
-
246
- td.parentNode.replaceChild(newCell, td);
247
- td = newCell;
248
- }
249
-
250
- dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
251
-
252
- return td;
253
- }
254
-
255
- function changedBackgroundImage() {
256
- var formObj = document.forms[0];
257
- var st = ed.dom.parseStyle(formObj.style.value);
258
-
259
- st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
260
-
261
- formObj.style.value = ed.dom.serializeStyle(st);
262
- }
263
-
264
- function changedSize() {
265
- var formObj = document.forms[0];
266
- var st = ed.dom.parseStyle(formObj.style.value);
267
-
268
- var width = formObj.width.value;
269
- if (width != "")
270
- st['width'] = getCSSSize(width);
271
- else
272
- st['width'] = "";
273
-
274
- var height = formObj.height.value;
275
- if (height != "")
276
- st['height'] = getCSSSize(height);
277
- else
278
- st['height'] = "";
279
-
280
- formObj.style.value = ed.dom.serializeStyle(st);
281
- }
282
-
283
- function changedColor() {
284
- var formObj = document.forms[0];
285
- var st = ed.dom.parseStyle(formObj.style.value);
286
-
287
- st['background-color'] = formObj.bgcolor.value;
288
- st['border-color'] = formObj.bordercolor.value;
289
-
290
- formObj.style.value = ed.dom.serializeStyle(st);
291
- }
292
-
293
- function changedStyle() {
294
- var formObj = document.forms[0];
295
- var st = ed.dom.parseStyle(formObj.style.value);
296
-
297
- if (st['background-image'])
298
- formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
299
- else
300
- formObj.backgroundimage.value = '';
301
-
302
- if (st['width'])
303
- formObj.width.value = trimSize(st['width']);
304
-
305
- if (st['height'])
306
- formObj.height.value = trimSize(st['height']);
307
-
308
- if (st['background-color']) {
309
- formObj.bgcolor.value = st['background-color'];
310
- updateColor('bgcolor_pick','bgcolor');
311
- }
312
-
313
- if (st['border-color']) {
314
- formObj.bordercolor.value = st['border-color'];
315
- updateColor('bordercolor_pick','bordercolor');
316
- }
317
- }
318
-
319
- tinyMCEPopup.onInit.add(init);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/js/merge_cells.js DELETED
@@ -1,27 +0,0 @@
1
- tinyMCEPopup.requireLangPack();
2
-
3
- var MergeCellsDialog = {
4
- init : function() {
5
- var f = document.forms[0];
6
-
7
- f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);
8
- f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);
9
- },
10
-
11
- merge : function() {
12
- var func, f = document.forms[0];
13
-
14
- tinyMCEPopup.restoreSelection();
15
-
16
- func = tinyMCEPopup.getWindowArg('onaction');
17
-
18
- func({
19
- cols : f.numcols.value,
20
- rows : f.numrows.value
21
- });
22
-
23
- tinyMCEPopup.close();
24
- }
25
- };
26
-
27
- tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/js/row.js DELETED
@@ -1,237 +0,0 @@
1
- tinyMCEPopup.requireLangPack();
2
-
3
- function init() {
4
- tinyMCEPopup.resizeToInnerSize();
5
-
6
- document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
7
- document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
8
-
9
- var inst = tinyMCEPopup.editor;
10
- var dom = inst.dom;
11
- var trElm = dom.getParent(inst.selection.getStart(), "tr");
12
- var formObj = document.forms[0];
13
- var st = dom.parseStyle(dom.getAttrib(trElm, "style"));
14
-
15
- // Get table row data
16
- var rowtype = trElm.parentNode.nodeName.toLowerCase();
17
- var align = dom.getAttrib(trElm, 'align');
18
- var valign = dom.getAttrib(trElm, 'valign');
19
- var height = trimSize(getStyle(trElm, 'height', 'height'));
20
- var className = dom.getAttrib(trElm, 'class');
21
- var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));
22
- var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
23
- var id = dom.getAttrib(trElm, 'id');
24
- var lang = dom.getAttrib(trElm, 'lang');
25
- var dir = dom.getAttrib(trElm, 'dir');
26
-
27
- selectByValue(formObj, 'rowtype', rowtype);
28
-
29
- // Any cells selected
30
- if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {
31
- // Setup form
32
- addClassesToList('class', 'table_row_styles');
33
- TinyMCE_EditableSelects.init();
34
-
35
- formObj.bgcolor.value = bgcolor;
36
- formObj.backgroundimage.value = backgroundimage;
37
- formObj.height.value = height;
38
- formObj.id.value = id;
39
- formObj.lang.value = lang;
40
- formObj.style.value = dom.serializeStyle(st);
41
- selectByValue(formObj, 'align', align);
42
- selectByValue(formObj, 'valign', valign);
43
- selectByValue(formObj, 'class', className, true, true);
44
- selectByValue(formObj, 'dir', dir);
45
-
46
- // Resize some elements
47
- if (isVisible('backgroundimagebrowser'))
48
- document.getElementById('backgroundimage').style.width = '180px';
49
-
50
- updateColor('bgcolor_pick', 'bgcolor');
51
- } else
52
- tinyMCEPopup.dom.hide('action');
53
- }
54
-
55
- function updateAction() {
56
- var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
57
- var action = getSelectValue(formObj, 'action');
58
-
59
- if (!AutoValidator.validate(formObj)) {
60
- tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
61
- return false;
62
- }
63
-
64
- tinyMCEPopup.restoreSelection();
65
- trElm = dom.getParent(inst.selection.getStart(), "tr");
66
- tableElm = dom.getParent(inst.selection.getStart(), "table");
67
-
68
- // Update all selected rows
69
- if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {
70
- tinymce.each(tableElm.rows, function(tr) {
71
- var i;
72
-
73
- for (i = 0; i < tr.cells.length; i++) {
74
- if (dom.hasClass(tr.cells[i], 'mceSelected')) {
75
- updateRow(tr, true);
76
- return;
77
- }
78
- }
79
- });
80
-
81
- inst.addVisual();
82
- inst.nodeChanged();
83
- inst.execCommand('mceEndUndoLevel');
84
- tinyMCEPopup.close();
85
- return;
86
- }
87
-
88
- switch (action) {
89
- case "row":
90
- updateRow(trElm);
91
- break;
92
-
93
- case "all":
94
- var rows = tableElm.getElementsByTagName("tr");
95
-
96
- for (var i=0; i<rows.length; i++)
97
- updateRow(rows[i], true);
98
-
99
- break;
100
-
101
- case "odd":
102
- case "even":
103
- var rows = tableElm.getElementsByTagName("tr");
104
-
105
- for (var i=0; i<rows.length; i++) {
106
- if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))
107
- updateRow(rows[i], true, true);
108
- }
109
-
110
- break;
111
- }
112
-
113
- inst.addVisual();
114
- inst.nodeChanged();
115
- inst.execCommand('mceEndUndoLevel');
116
- tinyMCEPopup.close();
117
- }
118
-
119
- function updateRow(tr_elm, skip_id, skip_parent) {
120
- var inst = tinyMCEPopup.editor;
121
- var formObj = document.forms[0];
122
- var dom = inst.dom;
123
- var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
124
- var rowtype = getSelectValue(formObj, 'rowtype');
125
- var doc = inst.getDoc();
126
-
127
- // Update row element
128
- if (!skip_id)
129
- dom.setAttrib(tr_elm, 'id', formObj.id.value);
130
-
131
- dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));
132
- dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));
133
- dom.setAttrib(tr_elm, 'lang', formObj.lang.value);
134
- dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));
135
- dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
136
- dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
137
-
138
- // Clear deprecated attributes
139
- dom.setAttrib(tr_elm, 'background', '');
140
- dom.setAttrib(tr_elm, 'bgColor', '');
141
- dom.setAttrib(tr_elm, 'height', '');
142
-
143
- // Set styles
144
- tr_elm.style.height = getCSSSize(formObj.height.value);
145
- tr_elm.style.backgroundColor = formObj.bgcolor.value;
146
-
147
- if (formObj.backgroundimage.value != "")
148
- tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
149
- else
150
- tr_elm.style.backgroundImage = '';
151
-
152
- // Setup new rowtype
153
- if (curRowType != rowtype && !skip_parent) {
154
- // first, clone the node we are working on
155
- var newRow = tr_elm.cloneNode(1);
156
-
157
- // next, find the parent of its new destination (creating it if necessary)
158
- var theTable = dom.getParent(tr_elm, "table");
159
- var dest = rowtype;
160
- var newParent = null;
161
- for (var i = 0; i < theTable.childNodes.length; i++) {
162
- if (theTable.childNodes[i].nodeName.toLowerCase() == dest)
163
- newParent = theTable.childNodes[i];
164
- }
165
-
166
- if (newParent == null) {
167
- newParent = doc.createElement(dest);
168
-
169
- if (theTable.firstChild.nodeName == 'CAPTION')
170
- inst.dom.insertAfter(newParent, theTable.firstChild);
171
- else
172
- theTable.insertBefore(newParent, theTable.firstChild);
173
- }
174
-
175
- // append the row to the new parent
176
- newParent.appendChild(newRow);
177
-
178
- // remove the original
179
- tr_elm.parentNode.removeChild(tr_elm);
180
-
181
- // set tr_elm to the new node
182
- tr_elm = newRow;
183
- }
184
-
185
- dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));
186
- }
187
-
188
- function changedBackgroundImage() {
189
- var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
190
- var st = dom.parseStyle(formObj.style.value);
191
-
192
- st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
193
-
194
- formObj.style.value = dom.serializeStyle(st);
195
- }
196
-
197
- function changedStyle() {
198
- var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
199
- var st = dom.parseStyle(formObj.style.value);
200
-
201
- if (st['background-image'])
202
- formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
203
- else
204
- formObj.backgroundimage.value = '';
205
-
206
- if (st['height'])
207
- formObj.height.value = trimSize(st['height']);
208
-
209
- if (st['background-color']) {
210
- formObj.bgcolor.value = st['background-color'];
211
- updateColor('bgcolor_pick','bgcolor');
212
- }
213
- }
214
-
215
- function changedSize() {
216
- var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
217
- var st = dom.parseStyle(formObj.style.value);
218
-
219
- var height = formObj.height.value;
220
- if (height != "")
221
- st['height'] = getCSSSize(height);
222
- else
223
- st['height'] = "";
224
-
225
- formObj.style.value = dom.serializeStyle(st);
226
- }
227
-
228
- function changedColor() {
229
- var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
230
- var st = dom.parseStyle(formObj.style.value);
231
-
232
- st['background-color'] = formObj.bgcolor.value;
233
-
234
- formObj.style.value = dom.serializeStyle(st);
235
- }
236
-
237
- tinyMCEPopup.onInit.add(init);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/js/table.js DELETED
@@ -1,501 +0,0 @@
1
- tinyMCEPopup.requireLangPack();
2
-
3
- var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;
4
-
5
- function insertTable() {
6
- var formObj = document.forms[0];
7
- var inst = tinyMCEPopup.editor, dom = inst.dom;
8
- var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;
9
- var html = '', capEl, elm;
10
- var cellLimit, rowLimit, colLimit;
11
-
12
- tinyMCEPopup.restoreSelection();
13
-
14
- if (!AutoValidator.validate(formObj)) {
15
- tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
16
- return false;
17
- }
18
-
19
- elm = dom.getParent(inst.selection.getNode(), 'table');
20
-
21
- // Get form data
22
- cols = formObj.elements['cols'].value;
23
- rows = formObj.elements['rows'].value;
24
- border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;
25
- cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
26
- cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
27
- align = getSelectValue(formObj, "align");
28
- frame = getSelectValue(formObj, "tframe");
29
- rules = getSelectValue(formObj, "rules");
30
- width = formObj.elements['width'].value;
31
- height = formObj.elements['height'].value;
32
- bordercolor = formObj.elements['bordercolor'].value;
33
- bgcolor = formObj.elements['bgcolor'].value;
34
- className = getSelectValue(formObj, "class");
35
- id = formObj.elements['id'].value;
36
- summary = formObj.elements['summary'].value;
37
- style = formObj.elements['style'].value;
38
- dir = formObj.elements['dir'].value;
39
- lang = formObj.elements['lang'].value;
40
- background = formObj.elements['backgroundimage'].value;
41
- caption = formObj.elements['caption'].checked;
42
-
43
- cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);
44
- rowLimit = tinyMCEPopup.getParam('table_row_limit', false);
45
- colLimit = tinyMCEPopup.getParam('table_col_limit', false);
46
-
47
- // Validate table size
48
- if (colLimit && cols > colLimit) {
49
- tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit));
50
- return false;
51
- } else if (rowLimit && rows > rowLimit) {
52
- tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit));
53
- return false;
54
- } else if (cellLimit && cols * rows > cellLimit) {
55
- tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit));
56
- return false;
57
- }
58
-
59
- // Update table
60
- if (action == "update") {
61
- dom.setAttrib(elm, 'cellPadding', cellpadding, true);
62
- dom.setAttrib(elm, 'cellSpacing', cellspacing, true);
63
-
64
- if (!isCssSize(border)) {
65
- dom.setAttrib(elm, 'border', border);
66
- } else {
67
- dom.setAttrib(elm, 'border', '');
68
- }
69
-
70
- if (border == '') {
71
- dom.setStyle(elm, 'border-width', '');
72
- dom.setStyle(elm, 'border', '');
73
- dom.setAttrib(elm, 'border', '');
74
- }
75
-
76
- dom.setAttrib(elm, 'align', align);
77
- dom.setAttrib(elm, 'frame', frame);
78
- dom.setAttrib(elm, 'rules', rules);
79
- dom.setAttrib(elm, 'class', className);
80
- dom.setAttrib(elm, 'style', style);
81
- dom.setAttrib(elm, 'id', id);
82
- dom.setAttrib(elm, 'summary', summary);
83
- dom.setAttrib(elm, 'dir', dir);
84
- dom.setAttrib(elm, 'lang', lang);
85
-
86
- capEl = inst.dom.select('caption', elm)[0];
87
-
88
- if (capEl && !caption)
89
- capEl.parentNode.removeChild(capEl);
90
-
91
- if (!capEl && caption) {
92
- capEl = elm.ownerDocument.createElement('caption');
93
-
94
- if (!tinymce.isIE)
95
- capEl.innerHTML = '<br data-mce-bogus="1"/>';
96
-
97
- elm.insertBefore(capEl, elm.firstChild);
98
- }
99
-
100
- if (width && inst.settings.inline_styles) {
101
- dom.setStyle(elm, 'width', width);
102
- dom.setAttrib(elm, 'width', '');
103
- } else {
104
- dom.setAttrib(elm, 'width', width, true);
105
- dom.setStyle(elm, 'width', '');
106
- }
107
-
108
- // Remove these since they are not valid XHTML
109
- dom.setAttrib(elm, 'borderColor', '');
110
- dom.setAttrib(elm, 'bgColor', '');
111
- dom.setAttrib(elm, 'background', '');
112
-
113
- if (height && inst.settings.inline_styles) {
114
- dom.setStyle(elm, 'height', height);
115
- dom.setAttrib(elm, 'height', '');
116
- } else {
117
- dom.setAttrib(elm, 'height', height, true);
118
- dom.setStyle(elm, 'height', '');
119
- }
120
-
121
- if (background != '')
122
- elm.style.backgroundImage = "url('" + background + "')";
123
- else
124
- elm.style.backgroundImage = '';
125
-
126
- /* if (tinyMCEPopup.getParam("inline_styles")) {
127
- if (width != '')
128
- elm.style.width = getCSSSize(width);
129
- }*/
130
-
131
- if (bordercolor != "") {
132
- elm.style.borderColor = bordercolor;
133
- elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;
134
- elm.style.borderWidth = cssSize(border);
135
- } else
136
- elm.style.borderColor = '';
137
-
138
- elm.style.backgroundColor = bgcolor;
139
- elm.style.height = getCSSSize(height);
140
-
141
- inst.addVisual();
142
-
143
- // Fix for stange MSIE align bug
144
- //elm.outerHTML = elm.outerHTML;
145
-
146
- inst.nodeChanged();
147
- inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true});
148
-
149
- // Repaint if dimensions changed
150
- if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)
151
- inst.execCommand('mceRepaint');
152
-
153
- tinyMCEPopup.close();
154
- return true;
155
- }
156
-
157
- // Create new table
158
- html += '<table';
159
-
160
- html += makeAttrib('id', id);
161
- if (!isCssSize(border)) {
162
- html += makeAttrib('border', border);
163
- }
164
-
165
- html += makeAttrib('cellpadding', cellpadding);
166
- html += makeAttrib('cellspacing', cellspacing);
167
- html += makeAttrib('data-mce-new', '1');
168
-
169
- if (width && inst.settings.inline_styles) {
170
- if (style)
171
- style += '; ';
172
-
173
- // Force px
174
- if (/^[0-9\.]+$/.test(width))
175
- width += 'px';
176
-
177
- style += 'width: ' + width;
178
- } else
179
- html += makeAttrib('width', width);
180
-
181
- /* if (height) {
182
- if (style)
183
- style += '; ';
184
-
185
- style += 'height: ' + height;
186
- }*/
187
-
188
- //html += makeAttrib('height', height);
189
- //html += makeAttrib('bordercolor', bordercolor);
190
- //html += makeAttrib('bgcolor', bgcolor);
191
- html += makeAttrib('align', align);
192
- html += makeAttrib('frame', frame);
193
- html += makeAttrib('rules', rules);
194
- html += makeAttrib('class', className);
195
- html += makeAttrib('style', style);
196
- html += makeAttrib('summary', summary);
197
- html += makeAttrib('dir', dir);
198
- html += makeAttrib('lang', lang);
199
- html += '>';
200
-
201
- if (caption) {
202
- if (!tinymce.isIE)
203
- html += '<caption><br data-mce-bogus="1"/></caption>';
204
- else
205
- html += '<caption></caption>';
206
- }
207
-
208
- for (var y=0; y<rows; y++) {
209
- html += "<tr>";
210
-
211
- for (var x=0; x<cols; x++) {
212
- if (!tinymce.isIE)
213
- html += '<td><br data-mce-bogus="1"/></td>';
214
- else
215
- html += '<td></td>';
216
- }
217
-
218
- html += "</tr>";
219
- }
220
-
221
- html += "</table>";
222
-
223
- // Move table
224
- if (inst.settings.fix_table_elements) {
225
- var patt = '';
226
-
227
- inst.focus();
228
- inst.selection.setContent('<br class="_mce_marker" />');
229
-
230
- tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {
231
- if (patt)
232
- patt += ',';
233
-
234
- patt += n + ' ._mce_marker';
235
- });
236
-
237
- tinymce.each(inst.dom.select(patt), function(n) {
238
- inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);
239
- });
240
-
241
- dom.setOuterHTML(dom.select('br._mce_marker')[0], html);
242
- } else
243
- inst.execCommand('mceInsertContent', false, html);
244
-
245
- tinymce.each(dom.select('table[data-mce-new]'), function(node) {
246
- var tdorth = dom.select('td,th', node);
247
-
248
- // Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document
249
- if (tinymce.isIE && node.nextSibling == null) {
250
- if (inst.settings.forced_root_block)
251
- dom.insertAfter(dom.create(inst.settings.forced_root_block), node);
252
- else
253
- dom.insertAfter(dom.create('br', {'data-mce-bogus': '1'}), node);
254
- }
255
-
256
- try {
257
- // IE9 might fail to do this selection
258
- inst.selection.setCursorLocation(tdorth[0], 0);
259
- } catch (ex) {
260
- // Ignore
261
- }
262
-
263
- dom.setAttrib(node, 'data-mce-new', '');
264
- });
265
-
266
- inst.addVisual();
267
- inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true});
268
-
269
- tinyMCEPopup.close();
270
- }
271
-
272
- function makeAttrib(attrib, value) {
273
- var formObj = document.forms[0];
274
- var valueElm = formObj.elements[attrib];
275
-
276
- if (typeof(value) == "undefined" || value == null) {
277
- value = "";
278
-
279
- if (valueElm)
280
- value = valueElm.value;
281
- }
282
-
283
- if (value == "")
284
- return "";
285
-
286
- // XML encode it
287
- value = value.replace(/&/g, '&amp;');
288
- value = value.replace(/\"/g, '&quot;');
289
- value = value.replace(/</g, '&lt;');
290
- value = value.replace(/>/g, '&gt;');
291
-
292
- return ' ' + attrib + '="' + value + '"';
293
- }
294
-
295
- function init() {
296
- tinyMCEPopup.resizeToInnerSize();
297
-
298
- document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
299
- document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
300
- document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
301
- document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
302
-
303
- var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');
304
- var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
305
- var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = "";
306
- var inst = tinyMCEPopup.editor, dom = inst.dom;
307
- var formObj = document.forms[0];
308
- var elm = dom.getParent(inst.selection.getNode(), "table");
309
-
310
- // Hide advanced fields that isn't available in the schema
311
- tinymce.each("summary id rules dir style frame".split(" "), function(name) {
312
- var tr = tinyMCEPopup.dom.getParent(name, "tr") || tinyMCEPopup.dom.getParent("t" + name, "tr");
313
-
314
- if (tr && !tinyMCEPopup.editor.schema.isValid("table", name)) {
315
- tr.style.display = 'none';
316
- }
317
- });
318
-
319
- action = tinyMCEPopup.getWindowArg('action');
320
-
321
- if (!action)
322
- action = elm ? "update" : "insert";
323
-
324
- if (elm && action != "insert") {
325
- var rowsAr = elm.rows;
326
- var cols = 0;
327
- for (var i=0; i<rowsAr.length; i++)
328
- if (rowsAr[i].cells.length > cols)
329
- cols = rowsAr[i].cells.length;
330
-
331
- cols = cols;
332
- rows = rowsAr.length;
333
-
334
- st = dom.parseStyle(dom.getAttrib(elm, "style"));
335
- border = trimSize(getStyle(elm, 'border', 'borderWidth'));
336
- cellpadding = dom.getAttrib(elm, 'cellpadding', "");
337
- cellspacing = dom.getAttrib(elm, 'cellspacing', "");
338
- width = trimSize(getStyle(elm, 'width', 'width'));
339
- height = trimSize(getStyle(elm, 'height', 'height'));
340
- bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));
341
- bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));
342
- align = dom.getAttrib(elm, 'align', align);
343
- frame = dom.getAttrib(elm, 'frame');
344
- rules = dom.getAttrib(elm, 'rules');
345
- className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));
346
- id = dom.getAttrib(elm, 'id');
347
- summary = dom.getAttrib(elm, 'summary');
348
- style = dom.serializeStyle(st);
349
- dir = dom.getAttrib(elm, 'dir');
350
- lang = dom.getAttrib(elm, 'lang');
351
- background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
352
- formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;
353
-
354
- orgTableWidth = width;
355
- orgTableHeight = height;
356
-
357
- action = "update";
358
- formObj.insert.value = inst.getLang('update');
359
- }
360
-
361
- addClassesToList('class', "table_styles");
362
- TinyMCE_EditableSelects.init();
363
-
364
- // Update form
365
- selectByValue(formObj, 'align', align);
366
- selectByValue(formObj, 'tframe', frame);
367
- selectByValue(formObj, 'rules', rules);
368
- selectByValue(formObj, 'class', className, true, true);
369
- formObj.cols.value = cols;
370
- formObj.rows.value = rows;
371
- formObj.border.value = border;
372
- formObj.cellpadding.value = cellpadding;
373
- formObj.cellspacing.value = cellspacing;
374
- formObj.width.value = width;
375
- formObj.height.value = height;
376
- formObj.bordercolor.value = bordercolor;
377
- formObj.bgcolor.value = bgcolor;
378
- formObj.id.value = id;
379
- formObj.summary.value = summary;
380
- formObj.style.value = style;
381
- formObj.dir.value = dir;
382
- formObj.lang.value = lang;
383
- formObj.backgroundimage.value = background;
384
-
385
- updateColor('bordercolor_pick', 'bordercolor');
386
- updateColor('bgcolor_pick', 'bgcolor');
387
-
388
- // Resize some elements
389
- if (isVisible('backgroundimagebrowser'))
390
- document.getElementById('backgroundimage').style.width = '180px';
391
-
392
- // Disable some fields in update mode
393
- if (action == "update") {
394
- formObj.cols.disabled = true;
395
- formObj.rows.disabled = true;
396
- }
397
- }
398
-
399
- function changedSize() {
400
- var formObj = document.forms[0];
401
- var st = dom.parseStyle(formObj.style.value);
402
-
403
- /* var width = formObj.width.value;
404
- if (width != "")
405
- st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";
406
- else
407
- st['width'] = "";*/
408
-
409
- var height = formObj.height.value;
410
- if (height != "")
411
- st['height'] = getCSSSize(height);
412
- else
413
- st['height'] = "";
414
-
415
- formObj.style.value = dom.serializeStyle(st);
416
- }
417
-
418
- function isCssSize(value) {
419
- return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value);
420
- }
421
-
422
- function cssSize(value, def) {
423
- value = tinymce.trim(value || def);
424
-
425
- if (!isCssSize(value)) {
426
- return parseInt(value, 10) + 'px';
427
- }
428
-
429
- return value;
430
- }
431
-
432
- function changedBackgroundImage() {
433
- var formObj = document.forms[0];
434
- var st = dom.parseStyle(formObj.style.value);
435
-
436
- st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
437
-
438
- formObj.style.value = dom.serializeStyle(st);
439
- }
440
-
441
- function changedBorder() {
442
- var formObj = document.forms[0];
443
- var st = dom.parseStyle(formObj.style.value);
444
-
445
- // Update border width if the element has a color
446
- if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != ""))
447
- st['border-width'] = cssSize(formObj.border.value);
448
- else {
449
- if (!formObj.border.value) {
450
- st['border'] = '';
451
- st['border-width'] = '';
452
- }
453
- }
454
-
455
- formObj.style.value = dom.serializeStyle(st);
456
- }
457
-
458
- function changedColor() {
459
- var formObj = document.forms[0];
460
- var st = dom.parseStyle(formObj.style.value);
461
-
462
- st['background-color'] = formObj.bgcolor.value;
463
-
464
- if (formObj.bordercolor.value != "") {
465
- st['border-color'] = formObj.bordercolor.value;
466
-
467
- // Add border-width if it's missing
468
- if (!st['border-width'])
469
- st['border-width'] = cssSize(formObj.border.value, 1);
470
- }
471
-
472
- formObj.style.value = dom.serializeStyle(st);
473
- }
474
-
475
- function changedStyle() {
476
- var formObj = document.forms[0];
477
- var st = dom.parseStyle(formObj.style.value);
478
-
479
- if (st['background-image'])
480
- formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
481
- else
482
- formObj.backgroundimage.value = '';
483
-
484
- if (st['width'])
485
- formObj.width.value = trimSize(st['width']);
486
-
487
- if (st['height'])
488
- formObj.height.value = trimSize(st['height']);
489
-
490
- if (st['background-color']) {
491
- formObj.bgcolor.value = st['background-color'];
492
- updateColor('bgcolor_pick','bgcolor');
493
- }
494
-
495
- if (st['border-color']) {
496
- formObj.bordercolor.value = st['border-color'];
497
- updateColor('bordercolor_pick','bordercolor');
498
- }
499
- }
500
-
501
- tinyMCEPopup.onInit.add(init);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/langs/en_dlg.js DELETED
@@ -1 +0,0 @@
1
- tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"});
 
tinymce3-table/merge_cells.htm DELETED
@@ -1,32 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#table_dlg.merge_cells_title}</title>
5
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/mctabs.js"></script>
7
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/validate.js"></script>
8
- <script type="text/javascript" src="js/merge_cells.js"></script>
9
- </head>
10
- <body style="margin: 8px" role="application">
11
- <form onsubmit="MergeCellsDialog.merge();return false;" action="#">
12
- <fieldset>
13
- <legend>{#table_dlg.merge_cells_title}</legend>
14
- <table role="presentation" border="0" cellpadding="0" cellspacing="3" width="100%">
15
- <tr>
16
- <td><label for="numcols">{#table_dlg.cols}</label>:</td>
17
- <td align="right"><input type="text" id="numcols" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" aria-required="true" /></td>
18
- </tr>
19
- <tr>
20
- <td><label for="numrows">{#table_dlg.rows}</label>:</td>
21
- <td align="right"><input type="text" id="numrows" name="numrows" value="" class="number min1" style="width: 30px" aria-required="true" /></td>
22
- </tr>
23
- </table>
24
- </fieldset>
25
-
26
- <div class="mceActionPanel">
27
- <input type="submit" id="insert" name="insert" value="{#update}" />
28
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
29
- </div>
30
- </form>
31
- </body>
32
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/row.htm DELETED
@@ -1,158 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#table_dlg.row_title}</title>
5
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/mctabs.js"></script>
7
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/form_utils.js"></script>
8
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/validate.js"></script>
9
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/editable_selects.js"></script>
10
- <script type="text/javascript" src="js/row.js"></script>
11
- <link href="css/row.css" rel="stylesheet" type="text/css" />
12
- </head>
13
- <body id="tablerow" style="display: none" role="application">
14
- <form onsubmit="updateAction();return false;" action="#">
15
- <div class="tabs">
16
- <ul>
17
- <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
18
- <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
19
- </ul>
20
- </div>
21
-
22
- <div class="panel_wrapper">
23
- <div id="general_panel" class="panel current">
24
- <fieldset>
25
- <legend>{#table_dlg.general_props}</legend>
26
-
27
- <table role="presentation" border="0" cellpadding="4" cellspacing="0">
28
- <tr>
29
- <td><label for="rowtype">{#table_dlg.rowtype}</label></td>
30
- <td class="col2">
31
- <select id="rowtype" name="rowtype" class="mceFocus">
32
- <option value="thead">{#table_dlg.thead}</option>
33
- <option value="tbody">{#table_dlg.tbody}</option>
34
- <option value="tfoot">{#table_dlg.tfoot}</option>
35
- </select>
36
- </td>
37
- </tr>
38
-
39
- <tr>
40
- <td><label for="align">{#table_dlg.align}</label></td>
41
- <td class="col2">
42
- <select id="align" name="align">
43
- <option value="">{#not_set}</option>
44
- <option value="center">{#table_dlg.align_middle}</option>
45
- <option value="left">{#table_dlg.align_left}</option>
46
- <option value="right">{#table_dlg.align_right}</option>
47
- </select>
48
- </td>
49
- </tr>
50
-
51
- <tr>
52
- <td><label for="valign">{#table_dlg.valign}</label></td>
53
- <td class="col2">
54
- <select id="valign" name="valign">
55
- <option value="">{#not_set}</option>
56
- <option value="top">{#table_dlg.align_top}</option>
57
- <option value="middle">{#table_dlg.align_middle}</option>
58
- <option value="bottom">{#table_dlg.align_bottom}</option>
59
- </select>
60
- </td>
61
- </tr>
62
-
63
- <tr id="styleSelectRow">
64
- <td><label for="class">{#class_name}</label></td>
65
- <td class="col2">
66
- <select id="class" name="class" class="mceEditableSelect">
67
- <option value="" selected="selected">{#not_set}</option>
68
- </select>
69
- </td>
70
- </tr>
71
-
72
- <tr>
73
- <td><label for="height">{#table_dlg.height}</label></td>
74
- <td class="col2"><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
75
- </tr>
76
- </table>
77
- </fieldset>
78
- </div>
79
-
80
- <div id="advanced_panel" class="panel">
81
- <fieldset>
82
- <legend>{#table_dlg.advanced_props}</legend>
83
-
84
- <table role="presentation" border="0" cellpadding="0" cellspacing="4">
85
- <tr>
86
- <td class="column1"><label for="id">{#table_dlg.id}</label></td>
87
- <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
88
- </tr>
89
-
90
- <tr>
91
- <td><label for="style">{#table_dlg.style}</label></td>
92
- <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
93
- </tr>
94
-
95
- <tr>
96
- <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
97
- <td>
98
- <select id="dir" name="dir" style="width: 200px">
99
- <option value="">{#not_set}</option>
100
- <option value="ltr">{#table_dlg.ltr}</option>
101
- <option value="rtl">{#table_dlg.rtl}</option>
102
- </select>
103
- </td>
104
- </tr>
105
-
106
- <tr>
107
- <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
108
- <td>
109
- <input id="lang" name="lang" type="text" value="" style="width: 200px" />
110
- </td>
111
- </tr>
112
-
113
- <tr>
114
- <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
115
- <td>
116
- <table role="presentation" border="0" cellpadding="0" cellspacing="0">
117
- <tr>
118
- <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
119
- <td id="backgroundimagebrowsercontainer">&nbsp;</td>
120
- </tr>
121
- </table>
122
- </td>
123
- </tr>
124
-
125
- <tr>
126
- <td class="column1"><label for="bgcolor" id="bgcolor_label">{#table_dlg.bgcolor}</label></td>
127
- <td>
128
- <span role="group" aria-labelledby="bgcolor_label">
129
- <table role="presentation" border="0" cellpadding="0" cellspacing="0">
130
- <tr>
131
- <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
132
- <td id="bgcolor_pickcontainer">&nbsp;</td>
133
- </tr>
134
- </table>
135
- </span>
136
- </td>
137
- </tr>
138
- </table>
139
- </fieldset>
140
- </div>
141
- </div>
142
-
143
- <div class="mceActionPanel">
144
- <div>
145
- <select id="action" name="action">
146
- <option value="row">{#table_dlg.row_row}</option>
147
- <option value="odd">{#table_dlg.row_odd}</option>
148
- <option value="even">{#table_dlg.row_even}</option>
149
- <option value="all">{#table_dlg.row_all}</option>
150
- </select>
151
- </div>
152
-
153
- <input type="submit" id="insert" name="insert" value="{#update}" />
154
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
155
- </div>
156
- </form>
157
- </body>
158
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce3-table/table.htm DELETED
@@ -1,188 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#table_dlg.title}</title>
5
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/mctabs.js"></script>
7
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/form_utils.js"></script>
8
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/validate.js"></script>
9
- <script type="text/javascript" src="../../../../wp-includes/js/tinymce/utils/editable_selects.js"></script>
10
- <script type="text/javascript" src="js/table.js"></script>
11
- <link href="css/table.css" rel="stylesheet" type="text/css" />
12
- </head>
13
- <body id="table" style="display: none" role="application" aria-labelledby="app_title">
14
- <span style="display:none;" id="app_title">{#table_dlg.title}</span>
15
- <form onsubmit="insertTable();return false;" action="#">
16
- <div class="tabs">
17
- <ul>
18
- <li id="general_tab" aria-controls="general_panel" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
19
- <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
20
- </ul>
21
- </div>
22
-
23
- <div class="panel_wrapper">
24
- <div id="general_panel" class="panel current">
25
- <fieldset>
26
- <legend>{#table_dlg.general_props}</legend>
27
- <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
28
- <tr>
29
- <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>
30
- <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" aria-required="true" /></td>
31
- <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>
32
- <td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" aria-required="true" /></td>
33
- </tr>
34
- <tr>
35
- <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>
36
- <td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>
37
- <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>
38
- <td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>
39
- </tr>
40
- <tr>
41
- <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>
42
- <td><select id="align" name="align">
43
- <option value="">{#not_set}</option>
44
- <option value="center">{#table_dlg.align_middle}</option>
45
- <option value="left">{#table_dlg.align_left}</option>
46
- <option value="right">{#table_dlg.align_right}</option>
47
- </select></td>
48
- <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>
49
- <td><input id="border" name="border" type="text" value="" size="3" maxlength="5" onchange="changedBorder();" class="size" /></td>
50
- </tr>
51
- <tr id="width_row">
52
- <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>
53
- <td><input name="width" type="text" id="width" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
54
- <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>
55
- <td><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
56
- </tr>
57
- <tr id="styleSelectRow" >
58
- <td><label id="classlabel" for="class">{#class_name}</label></td>
59
- <td colspan="3" >
60
- <select id="class" name="class" class="mceEditableSelect">
61
- <option value="" selected="selected">{#not_set}</option>
62
- </select></td>
63
- </tr>
64
- <tr>
65
- <td class="column1" ><label for="caption">{#table_dlg.caption}</label></td>
66
- <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td>
67
- </tr>
68
- </table>
69
- </fieldset>
70
- </div>
71
-
72
- <div id="advanced_panel" class="panel">
73
- <fieldset>
74
- <legend>{#table_dlg.advanced_props}</legend>
75
-
76
- <table role="presentation" border="0" cellpadding="0" cellspacing="4">
77
- <tr>
78
- <td class="column1"><label for="id">{#table_dlg.id}</label></td>
79
- <td><input id="id" name="id" type="text" value="" class="advfield" /></td>
80
- </tr>
81
-
82
- <tr>
83
- <td class="column1"><label for="summary">{#table_dlg.summary}</label></td>
84
- <td><input id="summary" name="summary" type="text" value="" class="advfield" /></td>
85
- </tr>
86
-
87
- <tr>
88
- <td><label for="style">{#table_dlg.style}</label></td>
89
- <td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>
90
- </tr>
91
-
92
- <tr>
93
- <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td>
94
- <td>
95
- <input id="lang" name="lang" type="text" value="" class="advfield" />
96
- </td>
97
- </tr>
98
-
99
- <tr>
100
- <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
101
- <td>
102
- <table role="presentation" aria-labelledby="backgroundimage_label" border="0" cellpadding="0" cellspacing="0">
103
- <tr>
104
- <td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>
105
- <td id="backgroundimagebrowsercontainer">&nbsp;</td>
106
- </tr>
107
- </table>
108
- </td>
109
- </tr>
110
-
111
- <tr>
112
- <td class="column1"><label for="tframe">{#table_dlg.frame}</label></td>
113
- <td>
114
- <select id="tframe" name="tframe" class="advfield">
115
- <option value="">{#not_set}</option>
116
- <option value="void">{#table_dlg.rules_void}</option>
117
- <option value="above">{#table_dlg.rules_above}</option>
118
- <option value="below">{#table_dlg.rules_below}</option>
119
- <option value="hsides">{#table_dlg.rules_hsides}</option>
120
- <option value="lhs">{#table_dlg.rules_lhs}</option>
121
- <option value="rhs">{#table_dlg.rules_rhs}</option>
122
- <option value="vsides">{#table_dlg.rules_vsides}</option>
123
- <option value="box">{#table_dlg.rules_box}</option>
124
- <option value="border">{#table_dlg.rules_border}</option>
125
- </select>
126
- </td>
127
- </tr>
128
-
129
- <tr>
130
- <td class="column1"><label for="rules">{#table_dlg.rules}</label></td>
131
- <td>
132
- <select id="rules" name="rules" class="advfield">
133
- <option value="">{#not_set}</option>
134
- <option value="none">{#table_dlg.frame_none}</option>
135
- <option value="groups">{#table_dlg.frame_groups}</option>
136
- <option value="rows">{#table_dlg.frame_rows}</option>
137
- <option value="cols">{#table_dlg.frame_cols}</option>
138
- <option value="all">{#table_dlg.frame_all}</option>
139
- </select>
140
- </td>
141
- </tr>
142
-
143
- <tr>
144
- <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
145
- <td>
146
- <select id="dir" name="dir" class="advfield">
147
- <option value="">{#not_set}</option>
148
- <option value="ltr">{#table_dlg.ltr}</option>
149
- <option value="rtl">{#table_dlg.rtl}</option>
150
- </select>
151
- </td>
152
- </tr>
153
-
154
- <tr role="group" aria-labelledby="bordercolor_label">
155
- <td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td>
156
- <td>
157
- <table role="presentation" border="0" cellpadding="0" cellspacing="0">
158
- <tr>
159
- <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
160
- <td id="bordercolor_pickcontainer">&nbsp;</td>
161
- </tr>
162
- </table>
163
- </td>
164
- </tr>
165
-
166
- <tr role="group" aria-labelledby="bgcolor_label">
167
- <td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td>
168
- <td>
169
- <table role="presentation" border="0" cellpadding="0" cellspacing="0">
170
- <tr>
171
- <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
172
- <td id="bgcolor_pickcontainer">&nbsp;</td>
173
- </tr>
174
- </table>
175
- </td>
176
- </tr>
177
- </table>
178
- </fieldset>
179
- </div>
180
- </div>
181
-
182
- <div class="mceActionPanel">
183
- <input type="submit" id="insert" name="insert" value="{#insert}" />
184
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
185
- </div>
186
- </form>
187
- </body>
188
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce4-table/plugin.js DELETED
@@ -1,2293 +0,0 @@
1
- /**
2
- * Compiled inline version. (Library mode)
3
- */
4
-
5
- /*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */
6
- /*globals $code */
7
-
8
- (function(exports, undefined) {
9
- "use strict";
10
-
11
- var modules = {};
12
-
13
- function require(ids, callback) {
14
- var module, defs = [];
15
-
16
- for (var i = 0; i < ids.length; ++i) {
17
- module = modules[ids[i]] || resolve(ids[i]);
18
- if (!module) {
19
- throw 'module definition dependecy not found: ' + ids[i];
20
- }
21
-
22
- defs.push(module);
23
- }
24
-
25
- callback.apply(null, defs);
26
- }
27
-
28
- function define(id, dependencies, definition) {
29
- if (typeof id !== 'string') {
30
- throw 'invalid module definition, module id must be defined and be a string';
31
- }
32
-
33
- if (dependencies === undefined) {
34
- throw 'invalid module definition, dependencies must be specified';
35
- }
36
-
37
- if (definition === undefined) {
38
- throw 'invalid module definition, definition function must be specified';
39
- }
40
-
41
- require(dependencies, function() {
42
- modules[id] = definition.apply(null, arguments);
43
- });
44
- }
45
-
46
- function defined(id) {
47
- return !!modules[id];
48
- }
49
-
50
- function resolve(id) {
51
- var target = exports;
52
- var fragments = id.split(/[.\/]/);
53
-
54
- for (var fi = 0; fi < fragments.length; ++fi) {
55
- if (!target[fragments[fi]]) {
56
- return;
57
- }
58
-
59
- target = target[fragments[fi]];
60
- }
61
-
62
- return target;
63
- }
64
-
65
- function expose(ids) {
66
- for (var i = 0; i < ids.length; i++) {
67
- var target = exports;
68
- var id = ids[i];
69
- var fragments = id.split(/[.\/]/);
70
-
71
- for (var fi = 0; fi < fragments.length - 1; ++fi) {
72
- if (target[fragments[fi]] === undefined) {
73
- target[fragments[fi]] = {};
74
- }
75
-
76
- target = target[fragments[fi]];
77
- }
78
-
79
- target[fragments[fragments.length - 1]] = modules[id];
80
- }
81
- }
82
-
83
- // Included from: js/tinymce/plugins/table/classes/TableGrid.js
84
-
85
- /**
86
- * TableGrid.js
87
- *
88
- * Copyright, Moxiecode Systems AB
89
- * Released under LGPL License.
90
- *
91
- * License: http://www.tinymce.com/license
92
- * Contributing: http://www.tinymce.com/contributing
93
- */
94
-
95
- /**
96
- * This class creates a grid out of a table element. This
97
- * makes it a whole lot easier to handle complex tables with
98
- * col/row spans.
99
- *
100
- * @class tinymce.tableplugin.TableGrid
101
- * @private
102
- */
103
- define("tinymce/tableplugin/TableGrid", [
104
- "tinymce/util/Tools",
105
- "tinymce/Env"
106
- ], function(Tools, Env) {
107
- var each = Tools.each;
108
-
109
- function getSpanVal(td, name) {
110
- return parseInt(td.getAttribute(name) || 1, 10);
111
- }
112
-
113
- return function(editor, table) {
114
- var grid, startPos, endPos, selectedCell, selection = editor.selection, dom = selection.dom;
115
-
116
- function buildGrid() {
117
- var startY = 0;
118
-
119
- grid = [];
120
-
121
- each(['thead', 'tbody', 'tfoot'], function(part) {
122
- var rows = dom.select('> ' + part + ' tr', table);
123
-
124
- each(rows, function(tr, y) {
125
- y += startY;
126
-
127
- each(dom.select('> td, > th', tr), function(td, x) {
128
- var x2, y2, rowspan, colspan;
129
-
130
- // Skip over existing cells produced by rowspan
131
- if (grid[y]) {
132
- while (grid[y][x]) {
133
- x++;
134
- }
135
- }
136
-
137
- // Get col/rowspan from cell
138
- rowspan = getSpanVal(td, 'rowspan');
139
- colspan = getSpanVal(td, 'colspan');
140
-
141
- // Fill out rowspan/colspan right and down
142
- for (y2 = y; y2 < y + rowspan; y2++) {
143
- if (!grid[y2]) {
144
- grid[y2] = [];
145
- }
146
-
147
- for (x2 = x; x2 < x + colspan; x2++) {
148
- grid[y2][x2] = {
149
- part: part,
150
- real: y2 == y && x2 == x,
151
- elm: td,
152
- rowspan: rowspan,
153
- colspan: colspan
154
- };
155
- }
156
- }
157
- });
158
- });
159
-
160
- startY += rows.length;
161
- });
162
- }
163
-
164
- function cloneNode(node, children) {
165
- node = node.cloneNode(children);
166
- node.removeAttribute('id');
167
-
168
- return node;
169
- }
170
-
171
- function getCell(x, y) {
172
- var row;
173
-
174
- row = grid[y];
175
- if (row) {
176
- return row[x];
177
- }
178
- }
179
-
180
- function setSpanVal(td, name, val) {
181
- if (td) {
182
- val = parseInt(val, 10);
183
-
184
- if (val === 1) {
185
- td.removeAttribute(name, 1);
186
- } else {
187
- td.setAttribute(name, val, 1);
188
- }
189
- }
190
- }
191
-
192
- function isCellSelected(cell) {
193
- return cell && (dom.hasClass(cell.elm, 'mce-item-selected') || cell == selectedCell);
194
- }
195
-
196
- function getSelectedRows() {
197
- var rows = [];
198
-
199
- each(table.rows, function(row) {
200
- each(row.cells, function(cell) {
201
- if (dom.hasClass(cell, 'mce-item-selected') || (selectedCell && cell == selectedCell.elm)) {
202
- rows.push(row);
203
- return false;
204
- }
205
- });
206
- });
207
-
208
- return rows;
209
- }
210
-
211
- function deleteTable() {
212
- var rng = dom.createRng();
213
-
214
- rng.setStartAfter(table);
215
- rng.setEndAfter(table);
216
-
217
- selection.setRng(rng);
218
-
219
- dom.remove(table);
220
- }
221
-
222
- function cloneCell(cell) {
223
- var formatNode, cloneFormats = {};
224
-
225
- if (editor.settings.table_clone_elements !== false) {
226
- cloneFormats = Tools.makeMap(
227
- (editor.settings.table_clone_elements || 'strong em b i span font h1 h2 h3 h4 h5 h6 p div').toUpperCase(),
228
- /[ ,]/
229
- );
230
- }
231
-
232
- // Clone formats
233
- Tools.walk(cell, function(node) {
234
- var curNode;
235
-
236
- if (node.nodeType == 3) {
237
- each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) {
238
- if (!cloneFormats[node.nodeName]) {
239
- return;
240
- }
241
-
242
- node = cloneNode(node, false);
243
-
244
- if (!formatNode) {
245
- formatNode = curNode = node;
246
- } else if (curNode) {
247
- curNode.appendChild(node);
248
- }
249
-
250
- curNode = node;
251
- });
252
-
253
- // Add something to the inner node
254
- if (curNode) {
255
- curNode.innerHTML = Env.ie ? '&nbsp;' : '<br data-mce-bogus="1" />';
256
- }
257
-
258
- return false;
259
- }
260
- }, 'childNodes');
261
-
262
- cell = cloneNode(cell, false);
263
- setSpanVal(cell, 'rowSpan', 1);
264
- setSpanVal(cell, 'colSpan', 1);
265
-
266
- if (formatNode) {
267
- cell.appendChild(formatNode);
268
- } else {
269
- if (!Env.ie) {
270
- cell.innerHTML = '<br data-mce-bogus="1" />';
271
- }
272
- }
273
-
274
- return cell;
275
- }
276
-
277
- function cleanup() {
278
- var rng = dom.createRng(), row;
279
-
280
- // Empty rows
281
- each(dom.select('tr', table), function(tr) {
282
- if (tr.cells.length === 0) {
283
- dom.remove(tr);
284
- }
285
- });
286
-
287
- // Empty table
288
- if (dom.select('tr', table).length === 0) {
289
- rng.setStartBefore(table);
290
- rng.setEndBefore(table);
291
- selection.setRng(rng);
292
- dom.remove(table);
293
- return;
294
- }
295
-
296
- // Empty header/body/footer
297
- each(dom.select('thead,tbody,tfoot', table), function(part) {
298
- if (part.rows.length === 0) {
299
- dom.remove(part);
300
- }
301
- });
302
-
303
- // Restore selection to start position if it still exists
304
- buildGrid();
305
-
306
- // If we have a valid startPos object
307
- if (startPos) {
308
- // Restore the selection to the closest table position
309
- row = grid[Math.min(grid.length - 1, startPos.y)];
310
- if (row) {
311
- selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true);
312
- selection.collapse(true);
313
- }
314
- }
315
- }
316
-
317
- function fillLeftDown(x, y, rows, cols) {
318
- var tr, x2, r, c, cell;
319
-
320
- tr = grid[y][x].elm.parentNode;
321
- for (r = 1; r <= rows; r++) {
322
- tr = dom.getNext(tr, 'tr');
323
-
324
- if (tr) {
325
- // Loop left to find real cell
326
- for (x2 = x; x2 >= 0; x2--) {
327
- cell = grid[y + r][x2].elm;
328
-
329
- if (cell.parentNode == tr) {
330
- // Append clones after
331
- for (c = 1; c <= cols; c++) {
332
- dom.insertAfter(cloneCell(cell), cell);
333
- }
334
-
335
- break;
336
- }
337
- }
338
-
339
- if (x2 == -1) {
340
- // Insert nodes before first cell
341
- for (c = 1; c <= cols; c++) {
342
- tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]);
343
- }
344
- }
345
- }
346
- }
347
- }
348
-
349
- function split() {
350
- each(grid, function(row, y) {
351
- each(row, function(cell, x) {
352
- var colSpan, rowSpan, i;
353
-
354
- if (isCellSelected(cell)) {
355
- cell = cell.elm;
356
- colSpan = getSpanVal(cell, 'colspan');
357
- rowSpan = getSpanVal(cell, 'rowspan');
358
-
359
- if (colSpan > 1 || rowSpan > 1) {
360
- setSpanVal(cell, 'rowSpan', 1);
361
- setSpanVal(cell, 'colSpan', 1);
362
-
363
- // Insert cells right
364
- for (i = 0; i < colSpan - 1; i++) {
365
- dom.insertAfter(cloneCell(cell), cell);
366
- }
367
-
368
- fillLeftDown(x, y, rowSpan - 1, colSpan);
369
- }
370
- }
371
- });
372
- });
373
- }
374
-
375
- function merge(cell, cols, rows) {
376
- var pos, startX, startY, endX, endY, x, y, startCell, endCell, children, count;
377
-
378
- // Use specified cell and cols/rows
379
- if (cell) {
380
- pos = getPos(cell);
381
- startX = pos.x;
382
- startY = pos.y;
383
- endX = startX + (cols - 1);
384
- endY = startY + (rows - 1);
385
- } else {
386
- startPos = endPos = null;
387
-
388
- // Calculate start/end pos by checking for selected cells in grid works better with context menu
389
- each(grid, function(row, y) {
390
- each(row, function(cell, x) {
391
- if (isCellSelected(cell)) {
392
- if (!startPos) {
393
- startPos = {x: x, y: y};
394
- }
395
-
396
- endPos = {x: x, y: y};
397
- }
398
- });
399
- });
400
-
401
- // Use selection, but make sure startPos is valid before accessing
402
- if (startPos) {
403
- startX = startPos.x;
404
- startY = startPos.y;
405
- endX = endPos.x;
406
- endY = endPos.y;
407
- }
408
- }
409
-
410
- // Find start/end cells
411
- startCell = getCell(startX, startY);
412
- endCell = getCell(endX, endY);
413
-
414
- // Check if the cells exists and if they are of the same part for example tbody = tbody
415
- if (startCell && endCell && startCell.part == endCell.part) {
416
- // Split and rebuild grid
417
- split();
418
- buildGrid();
419
-
420
- // Set row/col span to start cell
421
- startCell = getCell(startX, startY).elm;
422
- setSpanVal(startCell, 'colSpan', (endX - startX) + 1);
423
- setSpanVal(startCell, 'rowSpan', (endY - startY) + 1);
424
-
425
- // Remove other cells and add it's contents to the start cell
426
- for (y = startY; y <= endY; y++) {
427
- for (x = startX; x <= endX; x++) {
428
- if (!grid[y] || !grid[y][x]) {
429
- continue;
430
- }
431
-
432
- cell = grid[y][x].elm;
433
-
434
- /*jshint loopfunc:true */
435
- /*eslint loop-func:0 */
436
- if (cell != startCell) {
437
- // Move children to startCell
438
- children = Tools.grep(cell.childNodes);
439
- each(children, function(node) {
440
- startCell.appendChild(node);
441
- });
442
-
443
- // Remove bogus nodes if there is children in the target cell
444
- if (children.length) {
445
- children = Tools.grep(startCell.childNodes);
446
- count = 0;
447
- each(children, function(node) {
448
- if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) {
449
- startCell.removeChild(node);
450
- }
451
- });
452
- }
453
-
454
- dom.remove(cell);
455
- }
456
- }
457
- }
458
-
459
- // Remove empty rows etc and restore caret location
460
- cleanup();
461
- }
462
- }
463
-
464
- function insertRow(before) {
465
- var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan;
466
-
467
- // Find first/last row
468
- each(grid, function(row, y) {
469
- each(row, function(cell) {
470
- if (isCellSelected(cell)) {
471
- cell = cell.elm;
472
- rowElm = cell.parentNode;
473
- newRow = cloneNode(rowElm, false);
474
- posY = y;
475
-
476
- if (before) {
477
- return false;
478
- }
479
- }
480
- });
481
-
482
- if (before) {
483
- return !posY;
484
- }
485
- });
486
-
487
- // If posY is undefined there is nothing for us to do here...just return to avoid crashing below
488
- if (posY === undefined) {
489
- return;
490
- }
491
-
492
- for (x = 0; x < grid[0].length; x++) {
493
- // Cell not found could be because of an invalid table structure
494
- if (!grid[posY][x]) {
495
- continue;
496
- }
497
-
498
- cell = grid[posY][x].elm;
499
-
500
- if (cell != lastCell) {
501
- if (!before) {
502
- rowSpan = getSpanVal(cell, 'rowspan');
503
- if (rowSpan > 1) {
504
- setSpanVal(cell, 'rowSpan', rowSpan + 1);
505
- continue;
506
- }
507
- } else {
508
- // Check if cell above can be expanded
509
- if (posY > 0 && grid[posY - 1][x]) {
510
- otherCell = grid[posY - 1][x].elm;
511
- rowSpan = getSpanVal(otherCell, 'rowSpan');
512
- if (rowSpan > 1) {
513
- setSpanVal(otherCell, 'rowSpan', rowSpan + 1);
514
- continue;
515
- }
516
- }
517
- }
518
-
519
- // Insert new cell into new row
520
- newCell = cloneCell(cell);
521
- setSpanVal(newCell, 'colSpan', cell.colSpan);
522
-
523
- newRow.appendChild(newCell);
524
-
525
- lastCell = cell;
526
- }
527
- }
528
-
529
- if (newRow.hasChildNodes()) {
530
- if (!before) {
531
- dom.insertAfter(newRow, rowElm);
532
- } else {
533
- rowElm.parentNode.insertBefore(newRow, rowElm);
534
- }
535
- }
536
- }
537
-
538
- function insertCol(before) {
539
- var posX, lastCell;
540
-
541
- // Find first/last column
542
- each(grid, function(row) {
543
- each(row, function(cell, x) {
544
- if (isCellSelected(cell)) {
545
- posX = x;
546
-
547
- if (before) {
548
- return false;
549
- }
550
- }
551
- });
552
-
553
- if (before) {
554
- return !posX;
555
- }
556
- });
557
-
558
- each(grid, function(row, y) {
559
- var cell, rowSpan, colSpan;
560
-
561
- if (!row[posX]) {
562
- return;
563
- }
564
-
565
- cell = row[posX].elm;
566
- if (cell != lastCell) {
567
- colSpan = getSpanVal(cell, 'colspan');
568
- rowSpan = getSpanVal(cell, 'rowspan');
569
-
570
- if (colSpan == 1) {
571
- if (!before) {
572
- dom.insertAfter(cloneCell(cell), cell);
573
- fillLeftDown(posX, y, rowSpan - 1, colSpan);
574
- } else {
575
- cell.parentNode.insertBefore(cloneCell(cell), cell);
576
- fillLeftDown(posX, y, rowSpan - 1, colSpan);
577
- }
578
- } else {
579
- setSpanVal(cell, 'colSpan', cell.colSpan + 1);
580
- }
581
-
582
- lastCell = cell;
583
- }
584
- });
585
- }
586
-
587
- function deleteCols() {
588
- var cols = [];
589
-
590
- // Get selected column indexes
591
- each(grid, function(row) {
592
- each(row, function(cell, x) {
593
- if (isCellSelected(cell) && Tools.inArray(cols, x) === -1) {
594
- each(grid, function(row) {
595
- var cell = row[x].elm, colSpan;
596
-
597
- colSpan = getSpanVal(cell, 'colSpan');
598
-
599
- if (colSpan > 1) {
600
- setSpanVal(cell, 'colSpan', colSpan - 1);
601
- } else {
602
- dom.remove(cell);
603
- }
604
- });
605
-
606
- cols.push(x);
607
- }
608
- });
609
- });
610
-
611
- cleanup();
612
- }
613
-
614
- function deleteRows() {
615
- var rows;
616
-
617
- function deleteRow(tr) {
618
- var nextTr, pos, lastCell;
619
-
620
- nextTr = dom.getNext(tr, 'tr');
621
-
622
- // Move down row spanned cells
623
- each(tr.cells, function(cell) {
624
- var rowSpan = getSpanVal(cell, 'rowSpan');
625
-
626
- if (rowSpan > 1) {
627
- setSpanVal(cell, 'rowSpan', rowSpan - 1);
628
- pos = getPos(cell);
629
- fillLeftDown(pos.x, pos.y, 1, 1);
630
- }
631
- });
632
-
633
- // Delete cells
634
- pos = getPos(tr.cells[0]);
635
- each(grid[pos.y], function(cell) {
636
- var rowSpan;
637
-
638
- cell = cell.elm;
639
-
640
- if (cell != lastCell) {
641
- rowSpan = getSpanVal(cell, 'rowSpan');
642
-
643
- if (rowSpan <= 1) {
644
- dom.remove(cell);
645
- } else {
646
- setSpanVal(cell, 'rowSpan', rowSpan - 1);
647
- }
648
-
649
- lastCell = cell;
650
- }
651
- });
652
- }
653
-
654
- // Get selected rows and move selection out of scope
655
- rows = getSelectedRows();
656
-
657
- // Delete all selected rows
658
- each(rows.reverse(), function(tr) {
659
- deleteRow(tr);
660
- });
661
-
662
- cleanup();
663
- }
664
-
665
- function cutRows() {
666
- var rows = getSelectedRows();
667
-
668
- dom.remove(rows);
669
- cleanup();
670
-
671
- return rows;
672
- }
673
-
674
- function copyRows() {
675
- var rows = getSelectedRows();
676
-
677
- each(rows, function(row, i) {
678
- rows[i] = cloneNode(row, true);
679
- });
680
-
681
- return rows;
682
- }
683
-
684
- function pasteRows(rows, before) {
685
- var selectedRows = getSelectedRows(),
686
- targetRow = selectedRows[before ? 0 : selectedRows.length - 1],
687
- targetCellCount = targetRow.cells.length;
688
-
689
- // Nothing to paste
690
- if (!rows) {
691
- return;
692
- }
693
-
694
- // Calc target cell count
695
- each(grid, function(row) {
696
- var match;
697
-
698
- targetCellCount = 0;
699
- each(row, function(cell) {
700
- if (cell.real) {
701
- targetCellCount += cell.colspan;
702
- }
703
-
704
- if (cell.elm.parentNode == targetRow) {
705
- match = 1;
706
- }
707
- });
708
-
709
- if (match) {
710
- return false;
711
- }
712
- });
713
-
714
- if (!before) {
715
- rows.reverse();
716
- }
717
-
718
- each(rows, function(row) {
719
- var i, cellCount = row.cells.length, cell;
720
-
721
- // Remove col/rowspans
722
- for (i = 0; i < cellCount; i++) {
723
- cell = row.cells[i];
724
- setSpanVal(cell, 'colSpan', 1);
725
- setSpanVal(cell, 'rowSpan', 1);
726
- }
727
-
728
- // Needs more cells
729
- for (i = cellCount; i < targetCellCount; i++) {
730
- row.appendChild(cloneCell(row.cells[cellCount - 1]));
731
- }
732
-
733
- // Needs less cells
734
- for (i = targetCellCount; i < cellCount; i++) {
735
- dom.remove(row.cells[i]);
736
- }
737
-
738
- // Add before/after
739
- if (before) {
740
- targetRow.parentNode.insertBefore(row, targetRow);
741
- } else {
742
- dom.insertAfter(row, targetRow);
743
- }
744
- });
745
-
746
- // Remove current selection
747
- dom.removeClass(dom.select('td.mce-item-selected,th.mce-item-selected'), 'mce-item-selected');
748
- }
749
-
750
- function getPos(target) {
751
- var pos;
752
-
753
- each(grid, function(row, y) {
754
- each(row, function(cell, x) {
755
- if (cell.elm == target) {
756
- pos = {x : x, y : y};
757
- return false;
758
- }
759
- });
760
-
761
- return !pos;
762
- });
763
-
764
- return pos;
765
- }
766
-
767
- function setStartCell(cell) {
768
- startPos = getPos(cell);
769
- }
770
-
771
- function findEndPos() {
772
- var maxX, maxY;
773
-
774
- maxX = maxY = 0;
775
-
776
- each(grid, function(row, y) {
777
- each(row, function(cell, x) {
778
- var colSpan, rowSpan;
779
-
780
- if (isCellSelected(cell)) {
781
- cell = grid[y][x];
782
-
783
- if (x > maxX) {
784
- maxX = x;
785
- }
786
-
787
- if (y > maxY) {
788
- maxY = y;
789
- }
790
-
791
- if (cell.real) {
792
- colSpan = cell.colspan - 1;
793
- rowSpan = cell.rowspan - 1;
794
-
795
- if (colSpan) {
796
- if (x + colSpan > maxX) {
797
- maxX = x + colSpan;
798
- }
799
- }
800
-
801
- if (rowSpan) {
802
- if (y + rowSpan > maxY) {
803
- maxY = y + rowSpan;
804
- }
805
- }
806
- }
807
- }
808
- });
809
- });
810
-
811
- return {x : maxX, y : maxY};
812
- }
813
-
814
- function setEndCell(cell) {
815
- var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan, x, y;
816
-
817
- endPos = getPos(cell);
818
-
819
- if (startPos && endPos) {
820
- // Get start/end positions
821
- startX = Math.min(startPos.x, endPos.x);
822
- startY = Math.min(startPos.y, endPos.y);
823
- endX = Math.max(startPos.x, endPos.x);
824
- endY = Math.max(startPos.y, endPos.y);
825
-
826
- // Expand end positon to include spans
827
- maxX = endX;
828
- maxY = endY;
829
-
830
- // Expand startX
831
- for (y = startY; y <= maxY; y++) {
832
- cell = grid[y][startX];
833
-
834
- if (!cell.real) {
835
- if (startX - (cell.colspan - 1) < startX) {
836
- startX -= cell.colspan - 1;
837
- }
838
- }
839
- }
840
-
841
- // Expand startY
842
- for (x = startX; x <= maxX; x++) {
843
- cell = grid[startY][x];
844
-
845
- if (!cell.real) {
846
- if (startY - (cell.rowspan - 1) < startY) {
847
- startY -= cell.rowspan - 1;
848
- }
849
- }
850
- }
851
-
852
- // Find max X, Y
853
- for (y = startY; y <= endY; y++) {
854
- for (x = startX; x <= endX; x++) {
855
- cell = grid[y][x];
856
-
857
- if (cell.real) {
858
- colSpan = cell.colspan - 1;
859
- rowSpan = cell.rowspan - 1;
860
-
861
- if (colSpan) {
862
- if (x + colSpan > maxX) {
863
- maxX = x + colSpan;
864
- }
865
- }
866
-
867
- if (rowSpan) {
868
- if (y + rowSpan > maxY) {
869
- maxY = y + rowSpan;
870
- }
871
- }
872
- }
873
- }
874
- }
875
-
876
- // Remove current selection
877
- dom.removeClass(dom.select('td.mce-item-selected,th.mce-item-selected'), 'mce-item-selected');
878
-
879
- // Add new selection
880
- for (y = startY; y <= maxY; y++) {
881
- for (x = startX; x <= maxX; x++) {
882
- if (grid[y][x]) {
883
- dom.addClass(grid[y][x].elm, 'mce-item-selected');
884
- }
885
- }
886
- }
887
- }
888
- }
889
-
890
- table = table || dom.getParent(selection.getStart(), 'table');
891
-
892
- buildGrid();
893
-
894
- selectedCell = dom.getParent(selection.getStart(), 'th,td');
895
- if (selectedCell) {
896
- startPos = getPos(selectedCell);
897
- endPos = findEndPos();
898
- selectedCell = getCell(startPos.x, startPos.y);
899
- }
900
-
901
- Tools.extend(this, {
902
- deleteTable: deleteTable,
903
- split: split,
904
- merge: merge,
905
- insertRow: insertRow,
906
- insertCol: insertCol,
907
- deleteCols: deleteCols,
908
- deleteRows: deleteRows,
909
- cutRows: cutRows,
910
- copyRows: copyRows,
911
- pasteRows: pasteRows,
912
- getPos: getPos,
913
- setStartCell: setStartCell,
914
- setEndCell: setEndCell
915
- });
916
- };
917
- });
918
-
919
- // Included from: js/tinymce/plugins/table/classes/Quirks.js
920
-
921
- /**
922
- * Quirks.js
923
- *
924
- * Copyright, Moxiecode Systems AB
925
- * Released under LGPL License.
926
- *
927
- * License: http://www.tinymce.com/license
928
- * Contributing: http://www.tinymce.com/contributing
929
- */
930
-
931
- /**
932
- * This class includes fixes for various browser quirks.
933
- *
934
- * @class tinymce.tableplugin.Quirks
935
- * @private
936
- */
937
- define("tinymce/tableplugin/Quirks", [
938
- "tinymce/util/VK",
939
- "tinymce/Env",
940
- "tinymce/util/Tools"
941
- ], function(VK, Env, Tools) {
942
- var each = Tools.each;
943
-
944
- function getSpanVal(td, name) {
945
- return parseInt(td.getAttribute(name) || 1, 10);
946
- }
947
-
948
- return function(editor) {
949
- /**
950
- * Fixed caret movement around tables on WebKit.
951
- */
952
- function moveWebKitSelection() {
953
- function eventHandler(e) {
954
- var key = e.keyCode;
955
-
956
- function handle(upBool, sourceNode) {
957
- var siblingDirection = upBool ? 'previousSibling' : 'nextSibling';
958
- var currentRow = editor.dom.getParent(sourceNode, 'tr');
959
- var siblingRow = currentRow[siblingDirection];
960
-
961
- if (siblingRow) {
962
- moveCursorToRow(editor, sourceNode, siblingRow, upBool);
963
- e.preventDefault();
964
- return true;
965
- } else {
966
- var tableNode = editor.dom.getParent(currentRow, 'table');
967
- var middleNode = currentRow.parentNode;
968
- var parentNodeName = middleNode.nodeName.toLowerCase();
969
- if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) {
970
- var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody');
971
- if (targetParent !== null) {
972
- return moveToRowInTarget(upBool, targetParent, sourceNode);
973
- }
974
- }
975
- return escapeTable(upBool, currentRow, siblingDirection, tableNode);
976
- }
977
- }
978
-
979
- function getTargetParent(upBool, topNode, secondNode, nodeName) {
980
- var tbodies = editor.dom.select('>' + nodeName, topNode);
981
- var position = tbodies.indexOf(secondNode);
982
- if (upBool && position === 0 || !upBool && position === tbodies.length - 1) {
983
- return getFirstHeadOrFoot(upBool, topNode);
984
- } else if (position === -1) {
985
- var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1;
986
- return tbodies[topOrBottom];
987
- } else {
988
- return tbodies[position + (upBool ? -1 : 1)];
989
- }
990
- }
991
-
992
- function getFirstHeadOrFoot(upBool, parent) {
993
- var tagName = upBool ? 'thead' : 'tfoot';
994
- var headOrFoot = editor.dom.select('>' + tagName, parent);
995
- return headOrFoot.length !== 0 ? headOrFoot[0] : null;
996
- }
997
-
998
- function moveToRowInTarget(upBool, targetParent, sourceNode) {
999
- var targetRow = getChildForDirection(targetParent, upBool);
1000
-
1001
- if (targetRow) {
1002
- moveCursorToRow(editor, sourceNode, targetRow, upBool);
1003
- }
1004
-
1005
- e.preventDefault();
1006
- return true;
1007
- }
1008
-
1009
- function escapeTable(upBool, currentRow, siblingDirection, table) {
1010
- var tableSibling = table[siblingDirection];
1011
-
1012
- if (tableSibling) {
1013
- moveCursorToStartOfElement(tableSibling);
1014
- return true;
1015
- } else {
1016
- var parentCell = editor.dom.getParent(table, 'td,th');
1017
- if (parentCell) {
1018
- return handle(upBool, parentCell, e);
1019
- } else {
1020
- var backUpSibling = getChildForDirection(currentRow, !upBool);
1021
- moveCursorToStartOfElement(backUpSibling);
1022
- e.preventDefault();
1023
- return false;
1024
- }
1025
- }
1026
- }
1027
-
1028
- function getChildForDirection(parent, up) {
1029
- var child = parent && parent[up ? 'lastChild' : 'firstChild'];
1030
- // BR is not a valid table child to return in this case we return the table cell
1031
- return child && child.nodeName === 'BR' ? editor.dom.getParent(child, 'td,th') : child;
1032
- }
1033
-
1034
- function moveCursorToStartOfElement(n) {
1035
- editor.selection.setCursorLocation(n, 0);
1036
- }
1037
-
1038
- function isVerticalMovement() {
1039
- return key == VK.UP || key == VK.DOWN;
1040
- }
1041
-
1042
- function isInTable(editor) {
1043
- var node = editor.selection.getNode();
1044
- var currentRow = editor.dom.getParent(node, 'tr');
1045
- return currentRow !== null;
1046
- }
1047
-
1048
- function columnIndex(column) {
1049
- var colIndex = 0;
1050
- var c = column;
1051
- while (c.previousSibling) {
1052
- c = c.previousSibling;
1053
- colIndex = colIndex + getSpanVal(c, "colspan");
1054
- }
1055
- return colIndex;
1056
- }
1057
-
1058
- function findColumn(rowElement, columnIndex) {
1059
- var c = 0, r = 0;
1060
-
1061
- each(rowElement.children, function(cell, i) {
1062
- c = c + getSpanVal(cell, "colspan");
1063
- r = i;
1064
- if (c > columnIndex) {
1065
- return false;
1066
- }
1067
- });
1068
- return r;
1069
- }
1070
-
1071
- function moveCursorToRow(ed, node, row, upBool) {
1072
- var srcColumnIndex = columnIndex(editor.dom.getParent(node, 'td,th'));
1073
- var tgtColumnIndex = findColumn(row, srcColumnIndex);
1074
- var tgtNode = row.childNodes[tgtColumnIndex];
1075
- var rowCellTarget = getChildForDirection(tgtNode, upBool);
1076
- moveCursorToStartOfElement(rowCellTarget || tgtNode);
1077
- }
1078
-
1079
- function shouldFixCaret(preBrowserNode) {
1080
- var newNode = editor.selection.getNode();
1081
- var newParent = editor.dom.getParent(newNode, 'td,th');
1082
- var oldParent = editor.dom.getParent(preBrowserNode, 'td,th');
1083
-
1084
- return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent);
1085
- }
1086
-
1087
- function checkSameParentTable(nodeOne, NodeTwo) {
1088
- return editor.dom.getParent(nodeOne, 'TABLE') === editor.dom.getParent(NodeTwo, 'TABLE');
1089
- }
1090
-
1091
- if (isVerticalMovement() && isInTable(editor)) {
1092
- var preBrowserNode = editor.selection.getNode();
1093
- setTimeout(function() {
1094
- if (shouldFixCaret(preBrowserNode)) {
1095
- handle(!e.shiftKey && key === VK.UP, preBrowserNode, e);
1096
- }
1097
- }, 0);
1098
- }
1099
- }
1100
-
1101
- editor.on('KeyDown', function(e) {
1102
- eventHandler(e);
1103
- });
1104
- }
1105
-
1106
- function fixBeforeTableCaretBug() {
1107
- // Checks if the selection/caret is at the start of the specified block element
1108
- function isAtStart(rng, par) {
1109
- var doc = par.ownerDocument, rng2 = doc.createRange(), elm;
1110
-
1111
- rng2.setStartBefore(par);
1112
- rng2.setEnd(rng.endContainer, rng.endOffset);
1113
-
1114
- elm = doc.createElement('body');
1115
- elm.appendChild(rng2.cloneContents());
1116
-
1117
- // Check for text characters of other elements that should be treated as content
1118
- return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length === 0;
1119
- }
1120
-
1121
- // Fixes an bug where it's impossible to place the caret before a table in Gecko
1122
- // this fix solves it by detecting when the caret is at the beginning of such a table
1123
- // and then manually moves the caret infront of the table
1124
- editor.on('KeyDown', function(e) {
1125
- var rng, table, dom = editor.dom;
1126
-
1127
- // On gecko it's not possible to place the caret before a table
1128
- if (e.keyCode == 37 || e.keyCode == 38) {
1129
- rng = editor.selection.getRng();
1130
- table = dom.getParent(rng.startContainer, 'table');
1131
-
1132
- if (table && editor.getBody().firstChild == table) {
1133
- if (isAtStart(rng, table)) {
1134
- rng = dom.createRng();
1135
-
1136
- rng.setStartBefore(table);
1137
- rng.setEndBefore(table);
1138
-
1139
- editor.selection.setRng(rng);
1140
-
1141
- e.preventDefault();
1142
- }
1143
- }
1144
- }
1145
- });
1146
- }
1147
-
1148
- // Fixes an issue on Gecko where it's impossible to place the caret behind a table
1149
- // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
1150
- function fixTableCaretPos() {
1151
- editor.on('KeyDown SetContent VisualAid', function() {
1152
- var last;
1153
-
1154
- // Skip empty text nodes from the end
1155
- for (last = editor.getBody().lastChild; last; last = last.previousSibling) {
1156
- if (last.nodeType == 3) {
1157
- if (last.nodeValue.length > 0) {
1158
- break;
1159
- }
1160
- } else if (last.nodeType == 1 && !last.getAttribute('data-mce-bogus')) {
1161
- break;
1162
- }
1163
- }
1164
-
1165
- if (last && last.nodeName == 'TABLE') {
1166
- if (editor.settings.forced_root_block) {
1167
- editor.dom.add(
1168
- editor.getBody(),
1169
- editor.settings.forced_root_block,
1170
- editor.settings.forced_root_block_attrs,
1171
- Env.ie && Env.ie < 11 ? '&nbsp;' : '<br data-mce-bogus="1" />'
1172
- );
1173
- } else {
1174
- editor.dom.add(editor.getBody(), 'br', {'data-mce-bogus': '1'});
1175
- }
1176
- }
1177
- });
1178
-
1179
- editor.on('PreProcess', function(o) {
1180
- var last = o.node.lastChild;
1181
-
1182
- if (last && (last.nodeName == "BR" || (last.childNodes.length == 1 &&
1183
- (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) &&
1184
- last.previousSibling && last.previousSibling.nodeName == "TABLE") {
1185
- editor.dom.remove(last);
1186
- }
1187
- });
1188
- }
1189
-
1190
- // this nasty hack is here to work around some WebKit selection bugs.
1191
- function fixTableCellSelection() {
1192
- function tableCellSelected(ed, rng, n, currentCell) {
1193
- // The decision of when a table cell is selected is somewhat involved. The fact that this code is
1194
- // required is actually a pointer to the root cause of this bug. A cell is selected when the start
1195
- // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases)
1196
- // or the parent of the table (in the case of the selection containing the last cell of a table).
1197
- var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE');
1198
- var tableParent, allOfCellSelected, tableCellSelection;
1199
-
1200
- if (table) {
1201
- tableParent = table.parentNode;
1202
- }
1203
-
1204
- allOfCellSelected = rng.startContainer.nodeType == TEXT_NODE &&
1205
- rng.startOffset === 0 &&
1206
- rng.endOffset === 0 &&
1207
- currentCell &&
1208
- (n.nodeName == "TR" || n == tableParent);
1209
-
1210
- tableCellSelection = (n.nodeName == "TD" || n.nodeName == "TH") && !currentCell;
1211
-
1212
- return allOfCellSelected || tableCellSelection;
1213
- }
1214
-
1215
- function fixSelection() {
1216
- var rng = editor.selection.getRng();
1217
- var n = editor.selection.getNode();
1218
- var currentCell = editor.dom.getParent(rng.startContainer, 'TD,TH');
1219
-
1220
- if (!tableCellSelected(editor, rng, n, currentCell)) {
1221
- return;
1222
- }
1223
-
1224
- if (!currentCell) {
1225
- currentCell = n;
1226
- }
1227
-
1228
- // Get the very last node inside the table cell
1229
- var end = currentCell.lastChild;
1230
- while (end.lastChild) {
1231
- end = end.lastChild;
1232
- }
1233
-
1234
- // Select the entire table cell. Nothing outside of the table cell should be selected.
1235
- rng.setEnd(end, end.nodeValue.length);
1236
- editor.selection.setRng(rng);
1237
- }
1238
-
1239
- editor.on('KeyDown', function() {
1240
- fixSelection();
1241
- });
1242
-
1243
- editor.on('MouseDown', function(e) {
1244
- if (e.button != 2) {
1245
- fixSelection();
1246
- }
1247
- });
1248
- }
1249
-
1250
- /**
1251
- * Delete table if all cells are selected.
1252
- */
1253
- function deleteTable() {
1254
- editor.on('keydown', function(e) {
1255
- if ((e.keyCode == VK.DELETE || e.keyCode == VK.BACKSPACE) && !e.isDefaultPrevented()) {
1256
- var table = editor.dom.getParent(editor.selection.getStart(), 'table');
1257
-
1258
- if (table) {
1259
- var cells = editor.dom.select('td,th', table), i = cells.length;
1260
- while (i--) {
1261
- if (!editor.dom.hasClass(cells[i], 'mce-item-selected')) {
1262
- return;
1263
- }
1264
- }
1265
-
1266
- e.preventDefault();
1267
- editor.execCommand('mceTableDelete');
1268
- }
1269
- }
1270
- });
1271
- }
1272
-
1273
- deleteTable();
1274
-
1275
- if (Env.webkit) {
1276
- moveWebKitSelection();
1277
- fixTableCellSelection();
1278
- }
1279
-
1280
- if (Env.gecko) {
1281
- fixBeforeTableCaretBug();
1282
- fixTableCaretPos();
1283
- }
1284
-
1285
- if (Env.ie > 10) {
1286
- fixBeforeTableCaretBug();
1287
- fixTableCaretPos();
1288
- }
1289
- };
1290
- });
1291
-
1292
- // Included from: js/tinymce/plugins/table/classes/CellSelection.js
1293
-
1294
- /**
1295
- * CellSelection.js
1296
- *
1297
- * Copyright, Moxiecode Systems AB
1298
- * Released under LGPL License.
1299
- *
1300
- * License: http://www.tinymce.com/license
1301
- * Contributing: http://www.tinymce.com/contributing
1302
- */
1303
-
1304
- /**
1305
- * This class handles table cell selection by faking it using a css class that gets applied
1306
- * to cells when dragging the mouse from one cell to another.
1307
- *
1308
- * @class tinymce.tableplugin.CellSelection
1309
- * @private
1310
- */
1311
- define("tinymce/tableplugin/CellSelection", [
1312
- "tinymce/tableplugin/TableGrid",
1313
- "tinymce/dom/TreeWalker",
1314
- "tinymce/util/Tools"
1315
- ], function(TableGrid, TreeWalker, Tools) {
1316
- return function(editor) {
1317
- var dom = editor.dom, tableGrid, startCell, startTable, hasCellSelection = true;
1318
-
1319
- function clear() {
1320
- // Restore selection possibilities
1321
- editor.getBody().style.webkitUserSelect = '';
1322
-
1323
- if (hasCellSelection) {
1324
- editor.dom.removeClass(
1325
- editor.dom.select('td.mce-item-selected,th.mce-item-selected'),
1326
- 'mce-item-selected'
1327
- );
1328
-
1329
- hasCellSelection = false;
1330
- }
1331
- }
1332
-
1333
- function cellSelectionHandler(e) {
1334
- var sel, table, target = e.target;
1335
-
1336
- if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) {
1337
- table = dom.getParent(target, 'table');
1338
- if (table == startTable) {
1339
- if (!tableGrid) {
1340
- tableGrid = new TableGrid(editor, table);
1341
- tableGrid.setStartCell(startCell);
1342
-
1343
- editor.getBody().style.webkitUserSelect = 'none';
1344
- }
1345
-
1346
- tableGrid.setEndCell(target);
1347
- hasCellSelection = true;
1348
- }
1349
-
1350
- // Remove current selection
1351
- sel = editor.selection.getSel();
1352
-
1353
- try {
1354
- if (sel.removeAllRanges) {
1355
- sel.removeAllRanges();
1356
- } else {
1357
- sel.empty();
1358
- }
1359
- } catch (ex) {
1360
- // IE9 might throw errors here
1361
- }
1362
-
1363
- e.preventDefault();
1364
- }
1365
- }
1366
-
1367
- // Add cell selection logic
1368
- editor.on('MouseDown', function(e) {
1369
- if (e.button != 2) {
1370
- clear();
1371
-
1372
- startCell = dom.getParent(e.target, 'td,th');
1373
- startTable = dom.getParent(startCell, 'table');
1374
- }
1375
- });
1376
-
1377
- editor.on('mouseover', cellSelectionHandler);
1378
-
1379
- editor.on('remove', function() {
1380
- dom.unbind(editor.getDoc(), 'mouseover', cellSelectionHandler);
1381
- });
1382
-
1383
- editor.on('MouseUp', function() {
1384
- var rng, sel = editor.selection, selectedCells, walker, node, lastNode, endNode;
1385
-
1386
- function setPoint(node, start) {
1387
- var walker = new TreeWalker(node, node);
1388
-
1389
- do {
1390
- // Text node
1391
- if (node.nodeType == 3 && Tools.trim(node.nodeValue).length !== 0) {
1392
- if (start) {
1393
- rng.setStart(node, 0);
1394
- } else {
1395
- rng.setEnd(node, node.nodeValue.length);
1396
- }
1397
-
1398
- return;
1399
- }
1400
-
1401
- // BR element
1402
- if (node.nodeName == 'BR') {
1403
- if (start) {
1404
- rng.setStartBefore(node);
1405
- } else {
1406
- rng.setEndBefore(node);
1407
- }
1408
-
1409
- return;
1410
- }
1411
- } while ((node = (start ? walker.next() : walker.prev())));
1412
- }
1413
-
1414
- // Move selection to startCell
1415
- if (startCell) {
1416
- if (tableGrid) {
1417
- editor.getBody().style.webkitUserSelect = '';
1418
- }
1419
-
1420
- // Try to expand text selection as much as we can only Gecko supports cell selection
1421
- selectedCells = dom.select('td.mce-item-selected,th.mce-item-selected');
1422
- if (selectedCells.length > 0) {
1423
- rng = dom.createRng();
1424
- node = selectedCells[0];
1425
- endNode = selectedCells[selectedCells.length - 1];
1426
- rng.setStartBefore(node);
1427
- rng.setEndAfter(node);
1428
-
1429
- setPoint(node, 1);
1430
- walker = new TreeWalker(node, dom.getParent(selectedCells[0], 'table'));
1431
-
1432
- do {
1433
- if (node.nodeName == 'TD' || node.nodeName == 'TH') {
1434
- if (!dom.hasClass(node, 'mce-item-selected')) {
1435
- break;
1436
- }
1437
-
1438
- lastNode = node;
1439
- }
1440
- } while ((node = walker.next()));
1441
-
1442
- setPoint(lastNode);
1443
-
1444
- sel.setRng(rng);
1445
- }
1446
-
1447
- editor.nodeChanged();
1448
- startCell = tableGrid = startTable = null;
1449
- }
1450
- });
1451
-
1452
- editor.on('KeyUp', function() {
1453
- clear();
1454
- });
1455
-
1456
- return {
1457
- clear: clear
1458
- };
1459
- };
1460
- });
1461
-
1462
- // Included from: js/tinymce/plugins/table/classes/Plugin.js
1463
-
1464
- /**
1465
- * Plugin.js
1466
- *
1467
- * Copyright, Moxiecode Systems AB
1468
- * Released under LGPL License.
1469
- *
1470
- * License: http://www.tinymce.com/license
1471
- * Contributing: http://www.tinymce.com/contributing
1472
- */
1473
-
1474
- /**
1475
- * This class contains all core logic for the table plugin.
1476
- *
1477
- * @class tinymce.tableplugin.Plugin
1478
- * @private
1479
- */
1480
- define("tinymce/tableplugin/Plugin", [
1481
- "tinymce/tableplugin/TableGrid",
1482
- "tinymce/tableplugin/Quirks",
1483
- "tinymce/tableplugin/CellSelection",
1484
- "tinymce/util/Tools",
1485
- "tinymce/dom/TreeWalker",
1486
- "tinymce/Env",
1487
- "tinymce/PluginManager"
1488
- ], function(TableGrid, Quirks, CellSelection, Tools, TreeWalker, Env, PluginManager) {
1489
- var each = Tools.each;
1490
-
1491
- function Plugin(editor) {
1492
- var winMan, clipboardRows, self = this; // Might be selected cells on reload
1493
-
1494
- function removePxSuffix(size) {
1495
- return size ? size.replace(/px$/, '') : "";
1496
- }
1497
-
1498
- function addSizeSuffix(size) {
1499
- if (/^[0-9]+$/.test(size)) {
1500
- size += "px";
1501
- }
1502
-
1503
- return size;
1504
- }
1505
-
1506
- function unApplyAlign(elm) {
1507
- each('left center right'.split(' '), function(name) {
1508
- editor.formatter.remove('align' + name, {}, elm);
1509
- });
1510
- }
1511
-
1512
- function tableDialog() {
1513
- var dom = editor.dom, tableElm, colsCtrl, rowsCtrl, data;
1514
-
1515
- tableElm = dom.getParent(editor.selection.getStart(), 'table');
1516
-
1517
- data = {
1518
- width: removePxSuffix(dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width')),
1519
- height: removePxSuffix(dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height')),
1520
- cellspacing: tableElm ? dom.getAttrib(tableElm, 'cellspacing') : '',
1521
- cellpadding: tableElm ? dom.getAttrib(tableElm, 'cellpadding') : '',
1522
- border: tableElm ? dom.getAttrib(tableElm, 'border') : '',
1523
- caption: !!dom.select('caption', tableElm)[0]
1524
- };
1525
-
1526
- each('left center right'.split(' '), function(name) {
1527
- if (editor.formatter.matchNode(tableElm, 'align' + name)) {
1528
- data.align = name;
1529
- }
1530
- });
1531
-
1532
- if (!tableElm) {
1533
- colsCtrl = {label: 'Cols', name: 'cols'};
1534
- rowsCtrl = {label: 'Rows', name: 'rows'};
1535
- }
1536
-
1537
- editor.windowManager.open({
1538
- title: "Table properties",
1539
- items: {
1540
- type: 'form',
1541
- layout: 'grid',
1542
- columns: 2,
1543
- data: data,
1544
- defaults: {
1545
- type: 'textbox',
1546
- maxWidth: 50
1547
- },
1548
- items: [
1549
- colsCtrl,
1550
- rowsCtrl,
1551
- {label: 'Width', name: 'width'},
1552
- {label: 'Height', name: 'height'},
1553
- {label: 'Cell spacing', name: 'cellspacing'},
1554
- {label: 'Cell padding', name: 'cellpadding'},
1555
- {label: 'Border', name: 'border'},
1556
- {label: 'Caption', name: 'caption', type: 'checkbox'},
1557
- {
1558
- label: 'Alignment',
1559
- minWidth: 90,
1560
- name: 'align',
1561
- type: 'listbox',
1562
- text: 'None',
1563
- maxWidth: null,
1564
- values: [
1565
- {text: 'None', value: ''},
1566
- {text: 'Left', value: 'left'},
1567
- {text: 'Center', value: 'center'},
1568
- {text: 'Right', value: 'right'}
1569
- ]
1570
- }
1571
- ]
1572
- },
1573
-
1574
- onsubmit: function() {
1575
- var data = this.toJSON(), captionElm;
1576
-
1577
- editor.undoManager.transact(function() {
1578
- if (!tableElm) {
1579
- tableElm = insertTable(data.cols || 1, data.rows || 1);
1580
- }
1581
-
1582
- editor.dom.setAttribs(tableElm, {
1583
- cellspacing: data.cellspacing,
1584
- cellpadding: data.cellpadding,
1585
- border: data.border
1586
- });
1587
-
1588
- editor.dom.setStyles(tableElm, {
1589
- width: addSizeSuffix(data.width),
1590
- height: addSizeSuffix(data.height)
1591
- });
1592
-
1593
- // Toggle caption on/off
1594
- captionElm = dom.select('caption', tableElm)[0];
1595
-
1596
- if (captionElm && !data.caption) {
1597
- dom.remove(captionElm);
1598
- }
1599
-
1600
- if (!captionElm && data.caption) {
1601
- captionElm = dom.create('caption');
1602
- captionElm.innerHTML = !Env.ie ? '<br data-mce-bogus="1"/>' : '\u00a0';
1603
- tableElm.insertBefore(captionElm, tableElm.firstChild);
1604
- }
1605
-
1606
- unApplyAlign(tableElm);
1607
- if (data.align) {
1608
- editor.formatter.apply('align' + data.align, {}, tableElm);
1609
- }
1610
-
1611
- editor.focus();
1612
- editor.addVisual();
1613
- });
1614
- }
1615
- });
1616
- }
1617
-
1618
- function mergeDialog(grid, cell) {
1619
- editor.windowManager.open({
1620
- title: "Merge cells",
1621
- body: [
1622
- {label: 'Cols', name: 'cols', type: 'textbox', size: 10},
1623
- {label: 'Rows', name: 'rows', type: 'textbox', size: 10}
1624
- ],
1625
- onsubmit: function() {
1626
- var data = this.toJSON();
1627
-
1628
- editor.undoManager.transact(function() {
1629
- grid.merge(cell, data.cols, data.rows);
1630
- });
1631
- }
1632
- });
1633
- }
1634
-
1635
- function cellDialog() {
1636
- var dom = editor.dom, cellElm, data, cells = [];
1637
-
1638
- // Get selected cells or the current cell
1639
- cells = editor.dom.select('td.mce-item-selected,th.mce-item-selected');
1640
- cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');
1641
- if (!cells.length && cellElm) {
1642
- cells.push(cellElm);
1643
- }
1644
-
1645
- cellElm = cellElm || cells[0];
1646
-
1647
- if (!cellElm) {
1648
- // If this element is null, return now to avoid crashing.
1649
- return;
1650
- }
1651
-
1652
- data = {
1653
- width: removePxSuffix(dom.getStyle(cellElm, 'width') || dom.getAttrib(cellElm, 'width')),
1654
- height: removePxSuffix(dom.getStyle(cellElm, 'height') || dom.getAttrib(cellElm, 'height')),
1655
- scope: dom.getAttrib(cellElm, 'scope')
1656
- };
1657
-
1658
- data.type = cellElm.nodeName.toLowerCase();
1659
-
1660
- each('left center right'.split(' '), function(name) {
1661
- if (editor.formatter.matchNode(cellElm, 'align' + name)) {
1662
- data.align = name;
1663
- }
1664
- });
1665
-
1666
- editor.windowManager.open({
1667
- title: "Cell properties",
1668
- items: {
1669
- type: 'form',
1670
- data: data,
1671
- layout: 'grid',
1672
- columns: 2,
1673
- defaults: {
1674
- type: 'textbox',
1675
- maxWidth: 50
1676
- },
1677
- items: [
1678
- {label: 'Width', name: 'width'},
1679
- {label: 'Height', name: 'height'},
1680
- {
1681
- label: 'Cell type',
1682
- name: 'type',
1683
- type: 'listbox',
1684
- text: 'None',
1685
- minWidth: 90,
1686
- maxWidth: null,
1687
- values: [
1688
- {text: 'Cell', value: 'td'},
1689
- {text: 'Header cell', value: 'th'}
1690
- ]
1691
- },
1692
- {
1693
- label: 'Scope',
1694
- name: 'scope',
1695
- type: 'listbox',
1696
- text: 'None',
1697
- minWidth: 90,
1698
- maxWidth: null,
1699
- values: [
1700
- {text: 'None', value: ''},
1701
- {text: 'Row', value: 'row'},
1702
- {text: 'Column', value: 'col'},
1703
- {text: 'Row group', value: 'rowgroup'},
1704
- {text: 'Column group', value: 'colgroup'}
1705
- ]
1706
- },
1707
- {
1708
- label: 'Alignment',
1709
- name: 'align',
1710
- type: 'listbox',
1711
- text: 'None',
1712
- minWidth: 90,
1713
- maxWidth: null,
1714
- values: [
1715
- {text: 'None', value: ''},
1716
- {text: 'Left', value: 'left'},
1717
- {text: 'Center', value: 'center'},
1718
- {text: 'Right', value: 'right'}
1719
- ]
1720
- }
1721
- ]
1722
- },
1723
-
1724
- onsubmit: function() {
1725
- var data = this.toJSON();
1726
-
1727
- editor.undoManager.transact(function() {
1728
- each(cells, function(cellElm) {
1729
- editor.dom.setAttrib(cellElm, 'scope', data.scope);
1730
-
1731
- editor.dom.setStyles(cellElm, {
1732
- width: addSizeSuffix(data.width),
1733
- height: addSizeSuffix(data.height)
1734
- });
1735
-
1736
- // Switch cell type
1737
- if (data.type && cellElm.nodeName.toLowerCase() != data.type) {
1738
- cellElm = dom.rename(cellElm, data.type);
1739
- }
1740
-
1741
- // Apply/remove alignment
1742
- unApplyAlign(cellElm);
1743
- if (data.align) {
1744
- editor.formatter.apply('align' + data.align, {}, cellElm);
1745
- }
1746
- });
1747
-
1748
- editor.focus();
1749
- });
1750
- }
1751
- });
1752
- }
1753
-
1754
- function rowDialog() {
1755
- var dom = editor.dom, tableElm, cellElm, rowElm, data, rows = [];
1756
-
1757
- tableElm = editor.dom.getParent(editor.selection.getStart(), 'table');
1758
- cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');
1759
-
1760
- each(tableElm.rows, function(row) {
1761
- each(row.cells, function(cell) {
1762
- if (dom.hasClass(cell, 'mce-item-selected') || cell == cellElm) {
1763
- rows.push(row);
1764
- return false;
1765
- }
1766
- });
1767
- });
1768
-
1769
- rowElm = rows[0];
1770
- if (!rowElm) {
1771
- // If this element is null, return now to avoid crashing.
1772
- return;
1773
- }
1774
-
1775
- data = {
1776
- height: removePxSuffix(dom.getStyle(rowElm, 'height') || dom.getAttrib(rowElm, 'height')),
1777
- scope: dom.getAttrib(rowElm, 'scope')
1778
- };
1779
-
1780
- data.type = rowElm.parentNode.nodeName.toLowerCase();
1781
-
1782
- each('left center right'.split(' '), function(name) {
1783
- if (editor.formatter.matchNode(rowElm, 'align' + name)) {
1784
- data.align = name;
1785
- }
1786
- });
1787
-
1788
- editor.windowManager.open({
1789
- title: "Row properties",
1790
- items: {
1791
- type: 'form',
1792
- data: data,
1793
- columns: 2,
1794
- defaults: {
1795
- type: 'textbox'
1796
- },
1797
- items: [
1798
- {
1799
- type: 'listbox',
1800
- name: 'type',
1801
- label: 'Row type',
1802
- text: 'None',
1803
- maxWidth: null,
1804
- values: [
1805
- {text: 'Header', value: 'thead'},
1806
- {text: 'Body', value: 'tbody'},
1807
- {text: 'Footer', value: 'tfoot'}
1808
- ]
1809
- },
1810
- {
1811
- type: 'listbox',
1812
- name: 'align',
1813
- label: 'Alignment',
1814
- text: 'None',
1815
- maxWidth: null,
1816
- values: [
1817
- {text: 'None', value: ''},
1818
- {text: 'Left', value: 'left'},
1819
- {text: 'Center', value: 'center'},
1820
- {text: 'Right', value: 'right'}
1821
- ]
1822
- },
1823
- {label: 'Height', name: 'height'}
1824
- ]
1825
- },
1826
-
1827
- onsubmit: function() {
1828
- var data = this.toJSON(), tableElm, oldParentElm, parentElm;
1829
-
1830
- editor.undoManager.transact(function() {
1831
- var toType = data.type;
1832
-
1833
- each(rows, function(rowElm) {
1834
- editor.dom.setAttrib(rowElm, 'scope', data.scope);
1835
-
1836
- editor.dom.setStyles(rowElm, {
1837
- height: addSizeSuffix(data.height)
1838
- });
1839
-
1840
- if (toType != rowElm.parentNode.nodeName.toLowerCase()) {
1841
- tableElm = dom.getParent(rowElm, 'table');
1842
-
1843
- oldParentElm = rowElm.parentNode;
1844
- parentElm = dom.select(toType, tableElm)[0];
1845
- if (!parentElm) {
1846
- parentElm = dom.create(toType);
1847
- if (tableElm.firstChild) {
1848
- tableElm.insertBefore(parentElm, tableElm.firstChild);
1849
- } else {
1850
- tableElm.appendChild(parentElm);
1851
- }
1852
- }
1853
-
1854
- parentElm.appendChild(rowElm);
1855
-
1856
- if (!oldParentElm.hasChildNodes()) {
1857
- dom.remove(oldParentElm);
1858
- }
1859
- }
1860
-
1861
- // Apply/remove alignment
1862
- unApplyAlign(rowElm);
1863
- if (data.align) {
1864
- editor.formatter.apply('align' + data.align, {}, rowElm);
1865
- }
1866
- });
1867
-
1868
- editor.focus();
1869
- });
1870
- }
1871
- });
1872
- }
1873
-
1874
- function cmd(command) {
1875
- return function() {
1876
- editor.execCommand(command);
1877
- };
1878
- }
1879
-
1880
- function insertTable(cols, rows) {
1881
- var y, x, html;
1882
-
1883
- html = '<table id="__mce"><tbody>';
1884
-
1885
- for (y = 0; y < rows; y++) {
1886
- html += '<tr>';
1887
-
1888
- for (x = 0; x < cols; x++) {
1889
- html += '<td>' + (Env.ie ? " " : '<br>') + '</td>';
1890
- }
1891
-
1892
- html += '</tr>';
1893
- }
1894
-
1895
- html += '</tbody></table>';
1896
-
1897
- editor.insertContent(html);
1898
-
1899
- var tableElm = editor.dom.get('__mce');
1900
- editor.dom.setAttrib(tableElm, 'id', null);
1901
-
1902
- return tableElm;
1903
- }
1904
-
1905
- function handleDisabledState(ctrl, selector) {
1906
- function bindStateListener() {
1907
- ctrl.disabled(!editor.dom.getParent(editor.selection.getStart(), selector));
1908
-
1909
- editor.selection.selectorChanged(selector, function(state) {
1910
- ctrl.disabled(!state);
1911
- });
1912
- }
1913
-
1914
- if (editor.initialized) {
1915
- bindStateListener();
1916
- } else {
1917
- editor.on('init', bindStateListener);
1918
- }
1919
- }
1920
-
1921
- function postRender() {
1922
- /*jshint validthis:true*/
1923
- handleDisabledState(this, 'table');
1924
- }
1925
-
1926
- function postRenderCell() {
1927
- /*jshint validthis:true*/
1928
- handleDisabledState(this, 'td,th');
1929
- }
1930
-
1931
- function generateTableGrid() {
1932
- var html = '';
1933
-
1934
- html = '<table role="grid" class="mce-grid mce-grid-border" aria-readonly="true">';
1935
-
1936
- for (var y = 0; y < 10; y++) {
1937
- html += '<tr>';
1938
-
1939
- for (var x = 0; x < 10; x++) {
1940
- html += '<td role="gridcell" tabindex="-1"><a id="mcegrid' + (y * 10 + x) + '" href="#" ' +
1941
- 'data-mce-x="' + x + '" data-mce-y="' + y + '" ' +
1942
- '' + (x + y === 0 ? ' class="mce-active"' : '') + '></a></td>';
1943
- }
1944
-
1945
- html += '</tr>';
1946
- }
1947
-
1948
- html += '</table>';
1949
-
1950
- html += '<div class="mce-text-center" role="presentation">1 x 1</div>';
1951
-
1952
- return html;
1953
- }
1954
-
1955
- function selectGrid(tx, ty, control) {
1956
- var table = control.getEl().getElementsByTagName('table')[0];
1957
- var rel = control.parent().rel, x, y, focusCell, cell;
1958
-
1959
- if (control.isRtl() || rel == 'tl-tr') {
1960
- for (y = 9; y >= 0; y--) {
1961
- for (x = 0; x < 10; x++) {
1962
- cell = table.rows[y].childNodes[x].firstChild;
1963
-
1964
- editor.dom.toggleClass(
1965
- cell,
1966
- 'mce-active',
1967
- x >= tx && y <= ty
1968
- );
1969
-
1970
- if (x >= tx && y <= ty) {
1971
- focusCell = cell;
1972
- }
1973
- }
1974
- }
1975
-
1976
- tx = 9 - tx;
1977
- table.nextSibling.innerHTML = tx + ' x ' + (ty + 1);
1978
- } else {
1979
- for (y = 0; y < 10; y++) {
1980
- for (x = 0; x < 10; x++) {
1981
- cell = table.rows[y].childNodes[x].firstChild;
1982
-
1983
- editor.dom.toggleClass(
1984
- cell,
1985
- 'mce-active',
1986
- x <= tx && y <= ty
1987
- );
1988
-
1989
- if (x <= tx && y <= ty) {
1990
- focusCell = cell;
1991
- }
1992
- }
1993
- }
1994
-
1995
- table.nextSibling.innerHTML = (tx + 1) + ' x ' + (ty + 1);
1996
- }
1997
-
1998
- return focusCell.parentNode;
1999
- }
2000
-
2001
- if (editor.settings.table_grid === false) {
2002
- editor.addMenuItem('inserttable', {
2003
- text: 'Insert table',
2004
- icon: 'table',
2005
- context: 'table',
2006
- onclick: tableDialog
2007
- });
2008
- } else {
2009
- editor.addMenuItem('inserttable', {
2010
- text: 'Insert table',
2011
- icon: 'table',
2012
- context: 'table',
2013
- ariaHideMenu: true,
2014
- onclick: function(e) {
2015
- if (e.aria) {
2016
- this.parent().hideAll();
2017
- e.stopImmediatePropagation();
2018
- tableDialog();
2019
- }
2020
- },
2021
- onhide: function() {
2022
- var elements = this.menu.items()[0].getEl().getElementsByTagName('a');
2023
- editor.dom.removeClass(elements, 'mce-active');
2024
- editor.dom.addClass(elements[0], 'mce-active');
2025
- },
2026
- menu: [
2027
- {
2028
- type: 'container',
2029
- html: generateTableGrid(),
2030
-
2031
- onPostRender: function() {
2032
- this.lastX = this.lastY = 0;
2033
- },
2034
-
2035
- onmousemove: function(e) {
2036
- var target = e.target, x, y;
2037
-
2038
- if (target.tagName.toUpperCase() == 'A') {
2039
- x = parseInt(target.getAttribute('data-mce-x'), 10);
2040
- y = parseInt(target.getAttribute('data-mce-y'), 10);
2041
-
2042
- if (x !== this.lastX || y !== this.lastY) {
2043
- selectGrid(x, y, e.control);
2044
-
2045
- this.lastX = x;
2046
- this.lastY = y;
2047
- }
2048
- }
2049
- },
2050
-
2051
- onkeydown: function(e) {
2052
- var x = this.lastX, y = this.lastY, isHandled;
2053
-
2054
- switch (e.keyCode) {
2055
- case 37: // DOM_VK_LEFT
2056
- if (x > 0) {
2057
- x--;
2058
- isHandled = true;
2059
- }
2060
- break;
2061
-
2062
- case 39: // DOM_VK_RIGHT
2063
- isHandled = true;
2064
-
2065
- if (x < 9) {
2066
- x++;
2067
- }
2068
- break;
2069
-
2070
- case 38: // DOM_VK_UP
2071
- isHandled = true;
2072
-
2073
- if (y > 0) {
2074
- y--;
2075
- }
2076
- break;
2077
-
2078
- case 40: // DOM_VK_DOWN
2079
- isHandled = true;
2080
-
2081
- if (y < 9) {
2082
- y++;
2083
- }
2084
- break;
2085
- }
2086
-
2087
- if (isHandled) {
2088
- e.preventDefault();
2089
- e.stopPropagation();
2090
-
2091
- selectGrid(x, y, e.control).focus();
2092
-
2093
- this.lastX = x;
2094
- this.lastY = y;
2095
- }
2096
- },
2097
-
2098
- onclick: function(e) {
2099
- if (e.target.tagName.toUpperCase() == 'A') {
2100
- e.preventDefault();
2101
- e.stopPropagation();
2102
- this.parent().cancel();
2103
-
2104
- insertTable(this.lastX + 1, this.lastY + 1);
2105
- }
2106
- }
2107
- }
2108
- ]
2109
- });
2110
- }
2111
-
2112
- editor.addMenuItem('tableprops', {
2113
- text: 'Table properties',
2114
- context: 'table',
2115
- onPostRender: postRender,
2116
- onclick: tableDialog
2117
- });
2118
-
2119
- editor.addMenuItem('deletetable', {
2120
- text: 'Delete table',
2121
- context: 'table',
2122
- onPostRender: postRender,
2123
- cmd: 'mceTableDelete'
2124
- });
2125
-
2126
- editor.addMenuItem('cell', {
2127
- separator: 'before',
2128
- text: 'Cell',
2129
- context: 'table',
2130
- menu: [
2131
- {text: 'Cell properties', onclick: cmd('mceTableCellProps'), onPostRender: postRenderCell},
2132
- {text: 'Merge cells', onclick: cmd('mceTableMergeCells'), onPostRender: postRenderCell},
2133
- {text: 'Split cell', onclick: cmd('mceTableSplitCells'), onPostRender: postRenderCell}
2134
- ]
2135
- });
2136
-
2137
- editor.addMenuItem('row', {
2138
- text: 'Row',
2139
- context: 'table',
2140
- menu: [
2141
- {text: 'Insert row before', onclick: cmd('mceTableInsertRowBefore'), onPostRender: postRenderCell},
2142
- {text: 'Insert row after', onclick: cmd('mceTableInsertRowAfter'), onPostRender: postRenderCell},
2143
- {text: 'Delete row', onclick: cmd('mceTableDeleteRow'), onPostRender: postRenderCell},
2144
- {text: 'Row properties', onclick: cmd('mceTableRowProps'), onPostRender: postRenderCell},
2145
- {text: '-'},
2146
- {text: 'Cut row', onclick: cmd('mceTableCutRow'), onPostRender: postRenderCell},
2147
- {text: 'Copy row', onclick: cmd('mceTableCopyRow'), onPostRender: postRenderCell},
2148
- {text: 'Paste row before', onclick: cmd('mceTablePasteRowBefore'), onPostRender: postRenderCell},
2149
- {text: 'Paste row after', onclick: cmd('mceTablePasteRowAfter'), onPostRender: postRenderCell}
2150
- ]
2151
- });
2152
-
2153
- editor.addMenuItem('column', {
2154
- text: 'Column',
2155
- context: 'table',
2156
- menu: [
2157
- {text: 'Insert column before', onclick: cmd('mceTableInsertColBefore'), onPostRender: postRenderCell},
2158
- {text: 'Insert column after', onclick: cmd('mceTableInsertColAfter'), onPostRender: postRenderCell},
2159
- {text: 'Delete column', onclick: cmd('mceTableDeleteCol'), onPostRender: postRenderCell}
2160
- ]
2161
- });
2162
-
2163
- var menuItems = [];
2164
- each("inserttable tableprops deletetable | cell row column".split(' '), function(name) {
2165
- if (name == '|') {
2166
- menuItems.push({text: '-'});
2167
- } else {
2168
- menuItems.push(editor.menuItems[name]);
2169
- }
2170
- });
2171
-
2172
- editor.addButton("table", {
2173
- type: "menubutton",
2174
- title: "Table",
2175
- menu: menuItems
2176
- });
2177
-
2178
- // Select whole table is a table border is clicked
2179
- if (!Env.isIE) {
2180
- editor.on('click', function(e) {
2181
- e = e.target;
2182
-
2183
- if (e.nodeName === 'TABLE') {
2184
- editor.selection.select(e);
2185
- editor.nodeChanged();
2186
- }
2187
- });
2188
- }
2189
-
2190
- self.quirks = new Quirks(editor);
2191
-
2192
- editor.on('Init', function() {
2193
- winMan = editor.windowManager;
2194
- self.cellSelection = new CellSelection(editor);
2195
- });
2196
-
2197
- // Register action commands
2198
- each({
2199
- mceTableSplitCells: function(grid) {
2200
- grid.split();
2201
- },
2202
-
2203
- mceTableMergeCells: function(grid) {
2204
- var rowSpan, colSpan, cell;
2205
-
2206
- cell = editor.dom.getParent(editor.selection.getStart(), 'th,td');
2207
- if (cell) {
2208
- rowSpan = cell.rowSpan;
2209
- colSpan = cell.colSpan;
2210
- }
2211
-
2212
- if (!editor.dom.select('td.mce-item-selected,th.mce-item-selected').length) {
2213
- mergeDialog(grid, cell);
2214
- } else {
2215
- grid.merge();
2216
- }
2217
- },
2218
-
2219
- mceTableInsertRowBefore: function(grid) {
2220
- grid.insertRow(true);
2221
- },
2222
-
2223
- mceTableInsertRowAfter: function(grid) {
2224
- grid.insertRow();
2225
- },
2226
-
2227
- mceTableInsertColBefore: function(grid) {
2228
- grid.insertCol(true);
2229
- },
2230
-
2231
- mceTableInsertColAfter: function(grid) {
2232
- grid.insertCol();
2233
- },
2234
-
2235
- mceTableDeleteCol: function(grid) {
2236
- grid.deleteCols();
2237
- },
2238
-
2239
- mceTableDeleteRow: function(grid) {
2240
- grid.deleteRows();
2241
- },
2242
-
2243
- mceTableCutRow: function(grid) {
2244
- clipboardRows = grid.cutRows();
2245
- },
2246
-
2247
- mceTableCopyRow: function(grid) {
2248
- clipboardRows = grid.copyRows();
2249
- },
2250
-
2251
- mceTablePasteRowBefore: function(grid) {
2252
- grid.pasteRows(clipboardRows, true);
2253
- },
2254
-
2255
- mceTablePasteRowAfter: function(grid) {
2256
- grid.pasteRows(clipboardRows);
2257
- },
2258
-
2259
- mceTableDelete: function(grid) {
2260
- grid.deleteTable();
2261
- }
2262
- }, function(func, name) {
2263
- editor.addCommand(name, function() {
2264
- var grid = new TableGrid(editor);
2265
-
2266
- if (grid) {
2267
- func(grid);
2268
- editor.execCommand('mceRepaint');
2269
- self.cellSelection.clear();
2270
- }
2271
- });
2272
- });
2273
-
2274
- // Register dialog commands
2275
- each({
2276
- mceInsertTable: function() {
2277
- tableDialog();
2278
- },
2279
-
2280
- mceTableRowProps: rowDialog,
2281
- mceTableCellProps: cellDialog
2282
- }, function(func, name) {
2283
- editor.addCommand(name, function(ui, val) {
2284
- func(val);
2285
- });
2286
- });
2287
- }
2288
-
2289
- PluginManager.add('table', Plugin);
2290
- });
2291
-
2292
- expose(["tinymce/tableplugin/TableGrid","tinymce/tableplugin/Quirks","tinymce/tableplugin/CellSelection","tinymce/tableplugin/Plugin"]);
2293
- })(this);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tinymce4-table/plugin.min.js DELETED
@@ -1 +0,0 @@
1
- !function(e,t){"use strict";function n(e,t){for(var n,o=[],i=0;i<e.length;++i){if(n=l[e[i]]||r(e[i]),!n)throw"module definition dependecy not found: "+e[i];o.push(n)}t.apply(null,o)}function o(e,o,i){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(o===t)throw"invalid module definition, dependencies must be specified";if(i===t)throw"invalid module definition, definition function must be specified";n(o,function(){l[e]=i.apply(null,arguments)})}function i(e){return!!l[e]}function r(t){for(var n=e,o=t.split(/[.\/]/),i=0;i<o.length;++i){if(!n[o[i]])return;n=n[o[i]]}return n}function a(n){for(var o=0;o<n.length;o++){for(var i=e,r=n[o],a=r.split(/[.\/]/),s=0;s<a.length-1;++s)i[a[s]]===t&&(i[a[s]]={}),i=i[a[s]];i[a[a.length-1]]=l[r]}}var l={},s="tinymce/tableplugin/TableGrid",c="tinymce/util/Tools",d="tinymce/Env",u="tinymce/tableplugin/Quirks",f="tinymce/util/VK",m="tinymce/tableplugin/CellSelection",p="tinymce/dom/TreeWalker",g="tinymce/tableplugin/Plugin",h="tinymce/PluginManager";o(s,[c,d],function(e,n){function o(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=e.each;return function(r,a){function l(){var e=0;A=[],i(["thead","tbody","tfoot"],function(t){var n=I.select("> "+t+" tr",a);i(n,function(n,r){r+=e,i(I.select("> td, > th",n),function(e,n){var i,a,l,s;if(A[r])for(;A[r][n];)n++;for(l=o(e,"rowspan"),s=o(e,"colspan"),a=r;r+l>a;a++)for(A[a]||(A[a]=[]),i=n;n+s>i;i++)A[a][i]={part:t,real:a==r&&i==n,elm:e,rowspan:l,colspan:s}})}),e+=n.length})}function s(e,t){return e=e.cloneNode(t),e.removeAttribute("id"),e}function c(e,t){var n;return n=A[t],n?n[e]:void 0}function d(e,t,n){e&&(n=parseInt(n,10),1===n?e.removeAttribute(t,1):e.setAttribute(t,n,1))}function u(e){return e&&(I.hasClass(e.elm,"mce-item-selected")||e==M)}function f(){var e=[];return i(a.rows,function(t){i(t.cells,function(n){return I.hasClass(n,"mce-item-selected")||M&&n==M.elm?(e.push(t),!1):void 0})}),e}function m(){var e=I.createRng();e.setStartAfter(a),e.setEndAfter(a),E.setRng(e),I.remove(a)}function p(t){var o,a={};return r.settings.table_clone_elements!==!1&&(a=e.makeMap((r.settings.table_clone_elements||"strong em b i span font h1 h2 h3 h4 h5 h6 p div").toUpperCase(),/[ ,]/)),e.walk(t,function(e){var r;return 3==e.nodeType?(i(I.getParents(e.parentNode,null,t).reverse(),function(e){a[e.nodeName]&&(e=s(e,!1),o?r&&r.appendChild(e):o=r=e,r=e)}),r&&(r.innerHTML=n.ie?"&nbsp;":'<br data-mce-bogus="1" />'),!1):void 0},"childNodes"),t=s(t,!1),d(t,"rowSpan",1),d(t,"colSpan",1),o?t.appendChild(o):n.ie||(t.innerHTML='<br data-mce-bogus="1" />'),t}function g(){var e=I.createRng(),t;return i(I.select("tr",a),function(e){0===e.cells.length&&I.remove(e)}),0===I.select("tr",a).length?(e.setStartBefore(a),e.setEndBefore(a),E.setRng(e),void I.remove(a)):(i(I.select("thead,tbody,tfoot",a),function(e){0===e.rows.length&&I.remove(e)}),l(),void(B&&(t=A[Math.min(A.length-1,B.y)],t&&(E.select(t[Math.min(t.length-1,B.x)].elm,!0),E.collapse(!0)))))}function h(e,t,n,o){var i,r,a,l,s;for(i=A[t][e].elm.parentNode,a=1;n>=a;a++)if(i=I.getNext(i,"tr")){for(r=e;r>=0;r--)if(s=A[t+a][r].elm,s.parentNode==i){for(l=1;o>=l;l++)I.insertAfter(p(s),s);break}if(-1==r)for(l=1;o>=l;l++)i.insertBefore(p(i.cells[0]),i.cells[0])}}function b(){i(A,function(e,t){i(e,function(e,n){var i,r,a;if(u(e)&&(e=e.elm,i=o(e,"colspan"),r=o(e,"rowspan"),i>1||r>1)){for(d(e,"rowSpan",1),d(e,"colSpan",1),a=0;i-1>a;a++)I.insertAfter(p(e),e);h(n,t,r-1,i)}})})}function v(t,n,o){var r,a,s,f,m,p,h,v,y,w,x;if(t?(r=T(t),a=r.x,s=r.y,f=a+(n-1),m=s+(o-1)):(B=D=null,i(A,function(e,t){i(e,function(e,n){u(e)&&(B||(B={x:n,y:t}),D={x:n,y:t})})}),B&&(a=B.x,s=B.y,f=D.x,m=D.y)),v=c(a,s),y=c(f,m),v&&y&&v.part==y.part){for(b(),l(),v=c(a,s).elm,d(v,"colSpan",f-a+1),d(v,"rowSpan",m-s+1),h=s;m>=h;h++)for(p=a;f>=p;p++)A[h]&&A[h][p]&&(t=A[h][p].elm,t!=v&&(w=e.grep(t.childNodes),i(w,function(e){v.appendChild(e)}),w.length&&(w=e.grep(v.childNodes),x=0,i(w,function(e){"BR"==e.nodeName&&I.getAttrib(e,"data-mce-bogus")&&x++<w.length-1&&v.removeChild(e)})),I.remove(t)));g()}}function y(e){var n,r,a,l,c,f,m,g,h;if(i(A,function(t,o){return i(t,function(t){return u(t)&&(t=t.elm,c=t.parentNode,f=s(c,!1),n=o,e)?!1:void 0}),e?!n:void 0}),n!==t){for(l=0;l<A[0].length;l++)if(A[n][l]&&(r=A[n][l].elm,r!=a)){if(e){if(n>0&&A[n-1][l]&&(g=A[n-1][l].elm,h=o(g,"rowSpan"),h>1)){d(g,"rowSpan",h+1);continue}}else if(h=o(r,"rowspan"),h>1){d(r,"rowSpan",h+1);continue}m=p(r),d(m,"colSpan",r.colSpan),f.appendChild(m),a=r}f.hasChildNodes()&&(e?c.parentNode.insertBefore(f,c):I.insertAfter(f,c))}}function w(e){var t,n;i(A,function(n){return i(n,function(n,o){return u(n)&&(t=o,e)?!1:void 0}),e?!t:void 0}),i(A,function(i,r){var a,l,s;i[t]&&(a=i[t].elm,a!=n&&(s=o(a,"colspan"),l=o(a,"rowspan"),1==s?e?(a.parentNode.insertBefore(p(a),a),h(t,r,l-1,s)):(I.insertAfter(p(a),a),h(t,r,l-1,s)):d(a,"colSpan",a.colSpan+1),n=a))})}function x(){var t=[];i(A,function(n){i(n,function(n,r){u(n)&&-1===e.inArray(t,r)&&(i(A,function(e){var t=e[r].elm,n;n=o(t,"colSpan"),n>1?d(t,"colSpan",n-1):I.remove(t)}),t.push(r))})}),g()}function C(){function e(e){var t,n,r;t=I.getNext(e,"tr"),i(e.cells,function(e){var t=o(e,"rowSpan");t>1&&(d(e,"rowSpan",t-1),n=T(e),h(n.x,n.y,1,1))}),n=T(e.cells[0]),i(A[n.y],function(e){var t;e=e.elm,e!=r&&(t=o(e,"rowSpan"),1>=t?I.remove(e):d(e,"rowSpan",t-1),r=e)})}var t;t=f(),i(t.reverse(),function(t){e(t)}),g()}function P(){var e=f();return I.remove(e),g(),e}function R(){var e=f();return i(e,function(t,n){e[n]=s(t,!0)}),e}function S(e,t){var n=f(),o=n[t?0:n.length-1],r=o.cells.length;e&&(i(A,function(e){var t;return r=0,i(e,function(e){e.real&&(r+=e.colspan),e.elm.parentNode==o&&(t=1)}),t?!1:void 0}),t||e.reverse(),i(e,function(e){var n,i=e.cells.length,a;for(n=0;i>n;n++)a=e.cells[n],d(a,"colSpan",1),d(a,"rowSpan",1);for(n=i;r>n;n++)e.appendChild(p(e.cells[i-1]));for(n=r;i>n;n++)I.remove(e.cells[n]);t?o.parentNode.insertBefore(e,o):I.insertAfter(e,o)}),I.removeClass(I.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"))}function T(e){var t;return i(A,function(n,o){return i(n,function(n,i){return n.elm==e?(t={x:i,y:o},!1):void 0}),!t}),t}function k(e){B=T(e)}function N(){var e,t;return e=t=0,i(A,function(n,o){i(n,function(n,i){var r,a;u(n)&&(n=A[o][i],i>e&&(e=i),o>t&&(t=o),n.real&&(r=n.colspan-1,a=n.rowspan-1,r&&i+r>e&&(e=i+r),a&&o+a>t&&(t=o+a)))})}),{x:e,y:t}}function _(e){var t,n,o,i,r,a,l,s,c,d;if(D=T(e),B&&D){for(t=Math.min(B.x,D.x),n=Math.min(B.y,D.y),o=Math.max(B.x,D.x),i=Math.max(B.y,D.y),r=o,a=i,d=n;a>=d;d++)e=A[d][t],e.real||t-(e.colspan-1)<t&&(t-=e.colspan-1);for(c=t;r>=c;c++)e=A[n][c],e.real||n-(e.rowspan-1)<n&&(n-=e.rowspan-1);for(d=n;i>=d;d++)for(c=t;o>=c;c++)e=A[d][c],e.real&&(l=e.colspan-1,s=e.rowspan-1,l&&c+l>r&&(r=c+l),s&&d+s>a&&(a=d+s));for(I.removeClass(I.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=n;a>=d;d++)for(c=t;r>=c;c++)A[d][c]&&I.addClass(A[d][c].elm,"mce-item-selected")}}var A,B,D,M,E=r.selection,I=E.dom;a=a||I.getParent(E.getStart(),"table"),l(),M=I.getParent(E.getStart(),"th,td"),M&&(B=T(M),D=N(),M=c(B.x,B.y)),e.extend(this,{deleteTable:m,split:b,merge:v,insertRow:y,insertCol:w,deleteCols:x,deleteRows:C,cutRows:P,copyRows:R,pasteRows:S,getPos:T,setStartCell:k,setEndCell:_})}}),o(u,[f,d,c],function(e,t,n){function o(e,t){return parseInt(e.getAttribute(t)||1,10)}var i=n.each;return function(n){function r(){function t(t){function r(e,o){var i=e?"previousSibling":"nextSibling",r=n.dom.getParent(o,"tr"),l=r[i];if(l)return h(n,o,l,e),t.preventDefault(),!0;var d=n.dom.getParent(r,"table"),u=r.parentNode,f=u.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var m=a(e,d,u,"tbody");if(null!==m)return s(e,m,o)}return c(e,r,i,d)}function a(e,t,o,i){var r=n.dom.select(">"+i,t),a=r.indexOf(o);if(e&&0===a||!e&&a===r.length-1)return l(e,t);if(-1===a){var s="thead"===o.tagName.toLowerCase()?0:r.length-1;return r[s]}return r[a+(e?-1:1)]}function l(e,t){var o=e?"thead":"tfoot",i=n.dom.select(">"+o,t);return 0!==i.length?i[0]:null}function s(e,o,i){var r=d(o,e);return r&&h(n,i,r,e),t.preventDefault(),!0}function c(e,o,i,a){var l=a[i];if(l)return u(l),!0;var s=n.dom.getParent(a,"td,th");if(s)return r(e,s,t);var c=d(o,!e);return u(c),t.preventDefault(),!1}function d(e,t){var o=e&&e[t?"lastChild":"firstChild"];return o&&"BR"===o.nodeName?n.dom.getParent(o,"td,th"):o}function u(e){n.selection.setCursorLocation(e,0)}function f(){return y==e.UP||y==e.DOWN}function m(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function p(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=o(n,"colspan");return t}function g(e,t){var n=0,r=0;return i(e.children,function(e,i){return n+=o(e,"colspan"),r=i,n>t?!1:void 0}),r}function h(e,t,o,i){var r=p(n.dom.getParent(t,"td,th")),a=g(o,r),l=o.childNodes[a],s=d(l,i);u(s||l)}function b(e){var t=n.selection.getNode(),o=n.dom.getParent(t,"td,th"),i=n.dom.getParent(e,"td,th");return o&&o!==i&&v(o,i)}function v(e,t){return n.dom.getParent(e,"TABLE")===n.dom.getParent(t,"TABLE")}var y=t.keyCode;if(f()&&m(n)){var w=n.selection.getNode();setTimeout(function(){b(w)&&r(!t.shiftKey&&y===e.UP,w,t)},0)}}n.on("KeyDown",function(e){t(e)})}function a(){function e(e,t){var n=t.ownerDocument,o=n.createRange(),i;return o.setStartBefore(t),o.setEnd(e.endContainer,e.endOffset),i=n.createElement("body"),i.appendChild(o.cloneContents()),0===i.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}n.on("KeyDown",function(t){var o,i,r=n.dom;(37==t.keyCode||38==t.keyCode)&&(o=n.selection.getRng(),i=r.getParent(o.startContainer,"table"),i&&n.getBody().firstChild==i&&e(o,i)&&(o=r.createRng(),o.setStartBefore(i),o.setEndBefore(i),n.selection.setRng(o),t.preventDefault()))})}function l(){n.on("KeyDown SetContent VisualAid",function(){var e;for(e=n.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&!e.getAttribute("data-mce-bogus"))break;e&&"TABLE"==e.nodeName&&(n.settings.forced_root_block?n.dom.add(n.getBody(),n.settings.forced_root_block,n.settings.forced_root_block_attrs,t.ie&&t.ie<11?"&nbsp;":'<br data-mce-bogus="1" />'):n.dom.add(n.getBody(),"br",{"data-mce-bogus":"1"}))}),n.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&n.dom.remove(t)})}function s(){function e(e,t,n,o){var i=3,r=e.dom.getParent(t.startContainer,"TABLE"),a,l,s;return r&&(a=r.parentNode),l=t.startContainer.nodeType==i&&0===t.startOffset&&0===t.endOffset&&o&&("TR"==n.nodeName||n==a),s=("TD"==n.nodeName||"TH"==n.nodeName)&&!o,l||s}function t(){var t=n.selection.getRng(),o=n.selection.getNode(),i=n.dom.getParent(t.startContainer,"TD,TH");if(e(n,t,o,i)){i||(i=o);for(var r=i.lastChild;r.lastChild;)r=r.lastChild;t.setEnd(r,r.nodeValue.length),n.selection.setRng(t)}}n.on("KeyDown",function(){t()}),n.on("MouseDown",function(e){2!=e.button&&t()})}function c(){n.on("keydown",function(t){if((t.keyCode==e.DELETE||t.keyCode==e.BACKSPACE)&&!t.isDefaultPrevented()){var o=n.dom.getParent(n.selection.getStart(),"table");if(o){for(var i=n.dom.select("td,th",o),r=i.length;r--;)if(!n.dom.hasClass(i[r],"mce-item-selected"))return;t.preventDefault(),n.execCommand("mceTableDelete")}}})}c(),t.webkit&&(r(),s()),t.gecko&&(a(),l()),t.ie>10&&(a(),l())}}),o(m,[s,p,c],function(e,t,n){return function(o){function i(){o.getBody().style.webkitUserSelect="",d&&(o.dom.removeClass(o.dom.select("td.mce-item-selected,th.mce-item-selected"),"mce-item-selected"),d=!1)}function r(t){var n,i,r=t.target;if(s&&(l||r!=s)&&("TD"==r.nodeName||"TH"==r.nodeName)){i=a.getParent(r,"table"),i==c&&(l||(l=new e(o,i),l.setStartCell(s),o.getBody().style.webkitUserSelect="none"),l.setEndCell(r),d=!0),n=o.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(u){}t.preventDefault()}}var a=o.dom,l,s,c,d=!0;return o.on("MouseDown",function(e){2!=e.button&&(i(),s=a.getParent(e.target,"td,th"),c=a.getParent(s,"table"))}),o.on("mouseover",r),o.on("remove",function(){a.unbind(o.getDoc(),"mouseover",r)}),o.on("MouseUp",function(){function e(e,o){var r=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return void(o?i.setStart(e,0):i.setEnd(e,e.nodeValue.length));if("BR"==e.nodeName)return void(o?i.setStartBefore(e):i.setEndBefore(e))}while(e=o?r.next():r.prev())}var i,r=o.selection,d,u,f,m,p;if(s){if(l&&(o.getBody().style.webkitUserSelect=""),d=a.select("td.mce-item-selected,th.mce-item-selected"),d.length>0){i=a.createRng(),f=d[0],p=d[d.length-1],i.setStartBefore(f),i.setEndAfter(f),e(f,1),u=new t(f,a.getParent(d[0],"table"));do if("TD"==f.nodeName||"TH"==f.nodeName){if(!a.hasClass(f,"mce-item-selected"))break;m=f}while(f=u.next());e(m),r.setRng(i)}o.nodeChanged(),s=l=c=null}}),o.on("KeyUp",function(){i()}),{clear:i}}}),o(g,[s,u,m,c,p,d,h],function(e,t,n,o,i,r,a){function l(o){function i(e){return e?e.replace(/px$/,""):""}function a(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function l(e){s("left center right".split(" "),function(t){o.formatter.remove("align"+t,{},e)})}function c(){var e=o.dom,t,n,c,d;t=e.getParent(o.selection.getStart(),"table"),d={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),cellspacing:t?e.getAttrib(t,"cellspacing"):"",cellpadding:t?e.getAttrib(t,"cellpadding"):"",border:t?e.getAttrib(t,"border"):"",caption:!!e.select("caption",t)[0]},s("left center right".split(" "),function(e){o.formatter.matchNode(t,"align"+e)&&(d.align=e)}),t||(n={label:"Cols",name:"cols"},c={label:"Rows",name:"rows"}),o.windowManager.open({title:"Table properties",items:{type:"form",layout:"grid",columns:2,data:d,defaults:{type:"textbox",maxWidth:50},items:[n,c,{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"},{label:"Alignment",minWidth:90,name:"align",type:"listbox",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var n=this.toJSON(),i;o.undoManager.transact(function(){t||(t=p(n.cols||1,n.rows||1)),o.dom.setAttribs(t,{cellspacing:n.cellspacing,cellpadding:n.cellpadding,border:n.border}),o.dom.setStyles(t,{width:a(n.width),height:a(n.height)}),i=e.select("caption",t)[0],i&&!n.caption&&e.remove(i),!i&&n.caption&&(i=e.create("caption"),i.innerHTML=r.ie?"\xa0":'<br data-mce-bogus="1"/>',t.insertBefore(i,t.firstChild)),l(t),n.align&&o.formatter.apply("align"+n.align,{},t),o.focus(),o.addVisual()})}})}function d(e,t){o.windowManager.open({title:"Merge cells",body:[{label:"Cols",name:"cols",type:"textbox",size:10},{label:"Rows",name:"rows",type:"textbox",size:10}],onsubmit:function(){var n=this.toJSON();o.undoManager.transact(function(){e.merge(t,n.cols,n.rows)})}})}function u(){var e=o.dom,t,n,r=[];r=o.dom.select("td.mce-item-selected,th.mce-item-selected"),t=o.dom.getParent(o.selection.getStart(),"td,th"),!r.length&&t&&r.push(t),t=t||r[0],t&&(n={width:i(e.getStyle(t,"width")||e.getAttrib(t,"width")),height:i(e.getStyle(t,"height")||e.getAttrib(t,"height")),scope:e.getAttrib(t,"scope")},n.type=t.nodeName.toLowerCase(),s("left center right".split(" "),function(e){o.formatter.matchNode(t,"align"+e)&&(n.align=e)}),o.windowManager.open({title:"Cell properties",items:{type:"form",data:n,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"Alignment",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]}]},onsubmit:function(){var t=this.toJSON();o.undoManager.transact(function(){s(r,function(n){o.dom.setAttrib(n,"scope",t.scope),o.dom.setStyles(n,{width:a(t.width),height:a(t.height)}),t.type&&n.nodeName.toLowerCase()!=t.type&&(n=e.rename(n,t.type)),l(n),t.align&&o.formatter.apply("align"+t.align,{},n)}),o.focus()})}}))}function f(){var e=o.dom,t,n,r,c,d=[];t=o.dom.getParent(o.selection.getStart(),"table"),n=o.dom.getParent(o.selection.getStart(),"td,th"),s(t.rows,function(t){s(t.cells,function(o){return e.hasClass(o,"mce-item-selected")||o==n?(d.push(t),!1):void 0})}),r=d[0],r&&(c={height:i(e.getStyle(r,"height")||e.getAttrib(r,"height")),scope:e.getAttrib(r,"scope")},c.type=r.parentNode.nodeName.toLowerCase(),s("left center right".split(" "),function(e){o.formatter.matchNode(r,"align"+e)&&(c.align=e)}),o.windowManager.open({title:"Row properties",items:{type:"form",data:c,columns:2,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"None",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"}]},onsubmit:function(){var t=this.toJSON(),n,i,r;o.undoManager.transact(function(){var c=t.type;s(d,function(s){o.dom.setAttrib(s,"scope",t.scope),o.dom.setStyles(s,{height:a(t.height)}),c!=s.parentNode.nodeName.toLowerCase()&&(n=e.getParent(s,"table"),i=s.parentNode,r=e.select(c,n)[0],r||(r=e.create(c),n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r)),r.appendChild(s),i.hasChildNodes()||e.remove(i)),l(s),t.align&&o.formatter.apply("align"+t.align,{},s)}),o.focus()})}}))}function m(e){return function(){o.execCommand(e)}}function p(e,t){var n,i,a;for(a='<table id="__mce"><tbody>',n=0;t>n;n++){for(a+="<tr>",i=0;e>i;i++)a+="<td>"+(r.ie?" ":"<br>")+"</td>";a+="</tr>"}a+="</tbody></table>",o.insertContent(a);var l=o.dom.get("__mce");return o.dom.setAttrib(l,"id",null),l}function g(e,t){function n(){e.disabled(!o.dom.getParent(o.selection.getStart(),t)),o.selection.selectorChanged(t,function(t){e.disabled(!t)})}o.initialized?n():o.on("init",n)}function h(){g(this,"table")}function b(){g(this,"td,th")}function v(){var e="";e='<table role="grid" class="mce-grid mce-grid-border" aria-readonly="true">';for(var t=0;10>t;t++){e+="<tr>";for(var n=0;10>n;n++)e+='<td role="gridcell" tabindex="-1"><a id="mcegrid'+(10*t+n)+'" href="#" data-mce-x="'+n+'" data-mce-y="'+t+'" '+(n+t===0?' class="mce-active"':"")+"></a></td>";e+="</tr>"}return e+="</table>",e+='<div class="mce-text-center" role="presentation">1 x 1</div>'}function y(e,t,n){var i=n.getEl().getElementsByTagName("table")[0],r=n.parent().rel,a,l,s,c;if(n.isRtl()||"tl-tr"==r){for(l=9;l>=0;l--)for(a=0;10>a;a++)c=i.rows[l].childNodes[a].firstChild,o.dom.toggleClass(c,"mce-active",a>=e&&t>=l),a>=e&&t>=l&&(s=c);e=9-e,i.nextSibling.innerHTML=e+" x "+(t+1)}else{for(l=0;10>l;l++)for(a=0;10>a;a++)c=i.rows[l].childNodes[a].firstChild,o.dom.toggleClass(c,"mce-active",e>=a&&t>=l),e>=a&&t>=l&&(s=c);i.nextSibling.innerHTML=e+1+" x "+(t+1)}return s.parentNode}var w,x,C=this;o.settings.table_grid===!1?o.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",onclick:c}):o.addMenuItem("inserttable",{text:"Insert table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(e){e.aria&&(this.parent().hideAll(),e.stopImmediatePropagation(),c())},onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");o.dom.removeClass(e,"mce-active"),o.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:v(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t=e.target,n,o;"A"==t.tagName.toUpperCase()&&(n=parseInt(t.getAttribute("data-mce-x"),10),o=parseInt(t.getAttribute("data-mce-y"),10),(n!==this.lastX||o!==this.lastY)&&(y(n,o,e.control),this.lastX=n,this.lastY=o))},onkeydown:function(e){var t=this.lastX,n=this.lastY,o;switch(e.keyCode){case 37:t>0&&(t--,o=!0);break;case 39:o=!0,9>t&&t++;break;case 38:o=!0,n>0&&n--;break;case 40:o=!0,9>n&&n++}o&&(e.preventDefault(),e.stopPropagation(),y(t,n,e.control).focus(),this.lastX=t,this.lastY=n)},onclick:function(e){"A"==e.target.tagName.toUpperCase()&&(e.preventDefault(),e.stopPropagation(),this.parent().cancel(),p(this.lastX+1,this.lastY+1))}}]}),o.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:h,onclick:c}),o.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:h,cmd:"mceTableDelete"}),o.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:m("mceTableCellProps"),onPostRender:b},{text:"Merge cells",onclick:m("mceTableMergeCells"),onPostRender:b},{text:"Split cell",onclick:m("mceTableSplitCells"),onPostRender:b}]}),o.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:m("mceTableInsertRowBefore"),onPostRender:b},{text:"Insert row after",onclick:m("mceTableInsertRowAfter"),onPostRender:b},{text:"Delete row",onclick:m("mceTableDeleteRow"),onPostRender:b},{text:"Row properties",onclick:m("mceTableRowProps"),onPostRender:b},{text:"-"},{text:"Cut row",onclick:m("mceTableCutRow"),onPostRender:b},{text:"Copy row",onclick:m("mceTableCopyRow"),onPostRender:b},{text:"Paste row before",onclick:m("mceTablePasteRowBefore"),onPostRender:b},{text:"Paste row after",onclick:m("mceTablePasteRowAfter"),onPostRender:b}]}),o.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:m("mceTableInsertColBefore"),onPostRender:b},{text:"Insert column after",onclick:m("mceTableInsertColAfter"),onPostRender:b},{text:"Delete column",onclick:m("mceTableDeleteCol"),onPostRender:b}]});var P=[];s("inserttable tableprops deletetable | cell row column".split(" "),function(e){P.push("|"==e?{text:"-"}:o.menuItems[e])}),o.addButton("table",{type:"menubutton",title:"Table",menu:P}),r.isIE||o.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(o.selection.select(e),o.nodeChanged())}),C.quirks=new t(o),o.on("Init",function(){w=o.windowManager,C.cellSelection=new n(o)}),s({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t,n,i;i=o.dom.getParent(o.selection.getStart(),"th,td"),i&&(t=i.rowSpan,n=i.colSpan),o.dom.select("td.mce-item-selected,th.mce-item-selected").length?e.merge():d(e,i)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){x=e.cutRows()},mceTableCopyRow:function(e){x=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(x,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(x)},mceTableDelete:function(e){e.deleteTable()}},function(t,n){o.addCommand(n,function(){var n=new e(o);n&&(t(n),o.execCommand("mceRepaint"),C.cellSelection.clear())})}),s({mceInsertTable:function(){c()},mceTableRowProps:f,mceTableCellProps:u},function(e,t){o.addCommand(t,function(t,n){e(n)})})}var s=o.each;a.add("table",l)}),a([s,u,m,g])}(this);
 
tinymce47-table/plugin.js ADDED
@@ -0,0 +1,10450 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function () {
2
+ var table = (function () {
3
+ 'use strict';
4
+
5
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
6
+
7
+ var noop = function () {
8
+ var x = [];
9
+ for (var _i = 0; _i < arguments.length; _i++) {
10
+ x[_i] = arguments[_i];
11
+ }
12
+ };
13
+ var noarg = function (f) {
14
+ return function () {
15
+ var x = [];
16
+ for (var _i = 0; _i < arguments.length; _i++) {
17
+ x[_i] = arguments[_i];
18
+ }
19
+ return f();
20
+ };
21
+ };
22
+ var compose = function (fa, fb) {
23
+ return function () {
24
+ var x = [];
25
+ for (var _i = 0; _i < arguments.length; _i++) {
26
+ x[_i] = arguments[_i];
27
+ }
28
+ return fa(fb.apply(null, arguments));
29
+ };
30
+ };
31
+ var constant = function (value) {
32
+ return function () {
33
+ return value;
34
+ };
35
+ };
36
+ var identity = function (x) {
37
+ return x;
38
+ };
39
+ var tripleEquals = function (a, b) {
40
+ return a === b;
41
+ };
42
+ var curry = function (f) {
43
+ var x = [];
44
+ for (var _i = 1; _i < arguments.length; _i++) {
45
+ x[_i - 1] = arguments[_i];
46
+ }
47
+ var args = new Array(arguments.length - 1);
48
+ for (var i = 1; i < arguments.length; i++)
49
+ args[i - 1] = arguments[i];
50
+ return function () {
51
+ var x = [];
52
+ for (var _i = 0; _i < arguments.length; _i++) {
53
+ x[_i] = arguments[_i];
54
+ }
55
+ var newArgs = new Array(arguments.length);
56
+ for (var j = 0; j < newArgs.length; j++)
57
+ newArgs[j] = arguments[j];
58
+ var all = args.concat(newArgs);
59
+ return f.apply(null, all);
60
+ };
61
+ };
62
+ var not = function (f) {
63
+ return function () {
64
+ var x = [];
65
+ for (var _i = 0; _i < arguments.length; _i++) {
66
+ x[_i] = arguments[_i];
67
+ }
68
+ return !f.apply(null, arguments);
69
+ };
70
+ };
71
+ var die = function (msg) {
72
+ return function () {
73
+ throw new Error(msg);
74
+ };
75
+ };
76
+ var apply = function (f) {
77
+ return f();
78
+ };
79
+ var call = function (f) {
80
+ f();
81
+ };
82
+ var never = constant(false);
83
+ var always = constant(true);
84
+ var $_20nfr6k7jfuw8q4g = {
85
+ noop: noop,
86
+ noarg: noarg,
87
+ compose: compose,
88
+ constant: constant,
89
+ identity: identity,
90
+ tripleEquals: tripleEquals,
91
+ curry: curry,
92
+ not: not,
93
+ die: die,
94
+ apply: apply,
95
+ call: call,
96
+ never: never,
97
+ always: always
98
+ };
99
+
100
+ var never$1 = $_20nfr6k7jfuw8q4g.never;
101
+ var always$1 = $_20nfr6k7jfuw8q4g.always;
102
+ var none = function () {
103
+ return NONE;
104
+ };
105
+ var NONE = function () {
106
+ var eq = function (o) {
107
+ return o.isNone();
108
+ };
109
+ var call = function (thunk) {
110
+ return thunk();
111
+ };
112
+ var id = function (n) {
113
+ return n;
114
+ };
115
+ var noop = function () {
116
+ };
117
+ var me = {
118
+ fold: function (n, s) {
119
+ return n();
120
+ },
121
+ is: never$1,
122
+ isSome: never$1,
123
+ isNone: always$1,
124
+ getOr: id,
125
+ getOrThunk: call,
126
+ getOrDie: function (msg) {
127
+ throw new Error(msg || 'error: getOrDie called on none.');
128
+ },
129
+ or: id,
130
+ orThunk: call,
131
+ map: none,
132
+ ap: none,
133
+ each: noop,
134
+ bind: none,
135
+ flatten: none,
136
+ exists: never$1,
137
+ forall: always$1,
138
+ filter: none,
139
+ equals: eq,
140
+ equals_: eq,
141
+ toArray: function () {
142
+ return [];
143
+ },
144
+ toString: $_20nfr6k7jfuw8q4g.constant('none()')
145
+ };
146
+ if (Object.freeze)
147
+ Object.freeze(me);
148
+ return me;
149
+ }();
150
+ var some = function (a) {
151
+ var constant_a = function () {
152
+ return a;
153
+ };
154
+ var self = function () {
155
+ return me;
156
+ };
157
+ var map = function (f) {
158
+ return some(f(a));
159
+ };
160
+ var bind = function (f) {
161
+ return f(a);
162
+ };
163
+ var me = {
164
+ fold: function (n, s) {
165
+ return s(a);
166
+ },
167
+ is: function (v) {
168
+ return a === v;
169
+ },
170
+ isSome: always$1,
171
+ isNone: never$1,
172
+ getOr: constant_a,
173
+ getOrThunk: constant_a,
174
+ getOrDie: constant_a,
175
+ or: self,
176
+ orThunk: self,
177
+ map: map,
178
+ ap: function (optfab) {
179
+ return optfab.fold(none, function (fab) {
180
+ return some(fab(a));
181
+ });
182
+ },
183
+ each: function (f) {
184
+ f(a);
185
+ },
186
+ bind: bind,
187
+ flatten: constant_a,
188
+ exists: bind,
189
+ forall: bind,
190
+ filter: function (f) {
191
+ return f(a) ? me : NONE;
192
+ },
193
+ equals: function (o) {
194
+ return o.is(a);
195
+ },
196
+ equals_: function (o, elementEq) {
197
+ return o.fold(never$1, function (b) {
198
+ return elementEq(a, b);
199
+ });
200
+ },
201
+ toArray: function () {
202
+ return [a];
203
+ },
204
+ toString: function () {
205
+ return 'some(' + a + ')';
206
+ }
207
+ };
208
+ return me;
209
+ };
210
+ var from = function (value) {
211
+ return value === null || value === undefined ? NONE : some(value);
212
+ };
213
+ var Option = {
214
+ some: some,
215
+ none: none,
216
+ from: from
217
+ };
218
+
219
+ var typeOf = function (x) {
220
+ if (x === null)
221
+ return 'null';
222
+ var t = typeof x;
223
+ if (t === 'object' && Array.prototype.isPrototypeOf(x))
224
+ return 'array';
225
+ if (t === 'object' && String.prototype.isPrototypeOf(x))
226
+ return 'string';
227
+ return t;
228
+ };
229
+ var isType = function (type) {
230
+ return function (value) {
231
+ return typeOf(value) === type;
232
+ };
233
+ };
234
+ var $_g6mvnrk8jfuw8q4k = {
235
+ isString: isType('string'),
236
+ isObject: isType('object'),
237
+ isArray: isType('array'),
238
+ isNull: isType('null'),
239
+ isBoolean: isType('boolean'),
240
+ isUndefined: isType('undefined'),
241
+ isFunction: isType('function'),
242
+ isNumber: isType('number')
243
+ };
244
+
245
+ var rawIndexOf = function () {
246
+ var pIndexOf = Array.prototype.indexOf;
247
+ var fastIndex = function (xs, x) {
248
+ return pIndexOf.call(xs, x);
249
+ };
250
+ var slowIndex = function (xs, x) {
251
+ return slowIndexOf(xs, x);
252
+ };
253
+ return pIndexOf === undefined ? slowIndex : fastIndex;
254
+ }();
255
+ var indexOf = function (xs, x) {
256
+ var r = rawIndexOf(xs, x);
257
+ return r === -1 ? Option.none() : Option.some(r);
258
+ };
259
+ var contains = function (xs, x) {
260
+ return rawIndexOf(xs, x) > -1;
261
+ };
262
+ var exists = function (xs, pred) {
263
+ return findIndex(xs, pred).isSome();
264
+ };
265
+ var range = function (num, f) {
266
+ var r = [];
267
+ for (var i = 0; i < num; i++) {
268
+ r.push(f(i));
269
+ }
270
+ return r;
271
+ };
272
+ var chunk = function (array, size) {
273
+ var r = [];
274
+ for (var i = 0; i < array.length; i += size) {
275
+ var s = array.slice(i, i + size);
276
+ r.push(s);
277
+ }
278
+ return r;
279
+ };
280
+ var map = function (xs, f) {
281
+ var len = xs.length;
282
+ var r = new Array(len);
283
+ for (var i = 0; i < len; i++) {
284
+ var x = xs[i];
285
+ r[i] = f(x, i, xs);
286
+ }
287
+ return r;
288
+ };
289
+ var each = function (xs, f) {
290
+ for (var i = 0, len = xs.length; i < len; i++) {
291
+ var x = xs[i];
292
+ f(x, i, xs);
293
+ }
294
+ };
295
+ var eachr = function (xs, f) {
296
+ for (var i = xs.length - 1; i >= 0; i--) {
297
+ var x = xs[i];
298
+ f(x, i, xs);
299
+ }
300
+ };
301
+ var partition = function (xs, pred) {
302
+ var pass = [];
303
+ var fail = [];
304
+ for (var i = 0, len = xs.length; i < len; i++) {
305
+ var x = xs[i];
306
+ var arr = pred(x, i, xs) ? pass : fail;
307
+ arr.push(x);
308
+ }
309
+ return {
310
+ pass: pass,
311
+ fail: fail
312
+ };
313
+ };
314
+ var filter = function (xs, pred) {
315
+ var r = [];
316
+ for (var i = 0, len = xs.length; i < len; i++) {
317
+ var x = xs[i];
318
+ if (pred(x, i, xs)) {
319
+ r.push(x);
320
+ }
321
+ }
322
+ return r;
323
+ };
324
+ var groupBy = function (xs, f) {
325
+ if (xs.length === 0) {
326
+ return [];
327
+ } else {
328
+ var wasType = f(xs[0]);
329
+ var r = [];
330
+ var group = [];
331
+ for (var i = 0, len = xs.length; i < len; i++) {
332
+ var x = xs[i];
333
+ var type = f(x);
334
+ if (type !== wasType) {
335
+ r.push(group);
336
+ group = [];
337
+ }
338
+ wasType = type;
339
+ group.push(x);
340
+ }
341
+ if (group.length !== 0) {
342
+ r.push(group);
343
+ }
344
+ return r;
345
+ }
346
+ };
347
+ var foldr = function (xs, f, acc) {
348
+ eachr(xs, function (x) {
349
+ acc = f(acc, x);
350
+ });
351
+ return acc;
352
+ };
353
+ var foldl = function (xs, f, acc) {
354
+ each(xs, function (x) {
355
+ acc = f(acc, x);
356
+ });
357
+ return acc;
358
+ };
359
+ var find = function (xs, pred) {
360
+ for (var i = 0, len = xs.length; i < len; i++) {
361
+ var x = xs[i];
362
+ if (pred(x, i, xs)) {
363
+ return Option.some(x);
364
+ }
365
+ }
366
+ return Option.none();
367
+ };
368
+ var findIndex = function (xs, pred) {
369
+ for (var i = 0, len = xs.length; i < len; i++) {
370
+ var x = xs[i];
371
+ if (pred(x, i, xs)) {
372
+ return Option.some(i);
373
+ }
374
+ }
375
+ return Option.none();
376
+ };
377
+ var slowIndexOf = function (xs, x) {
378
+ for (var i = 0, len = xs.length; i < len; ++i) {
379
+ if (xs[i] === x) {
380
+ return i;
381
+ }
382
+ }
383
+ return -1;
384
+ };
385
+ var push = Array.prototype.push;
386
+ var flatten = function (xs) {
387
+ var r = [];
388
+ for (var i = 0, len = xs.length; i < len; ++i) {
389
+ if (!Array.prototype.isPrototypeOf(xs[i]))
390
+ throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
391
+ push.apply(r, xs[i]);
392
+ }
393
+ return r;
394
+ };
395
+ var bind = function (xs, f) {
396
+ var output = map(xs, f);
397
+ return flatten(output);
398
+ };
399
+ var forall = function (xs, pred) {
400
+ for (var i = 0, len = xs.length; i < len; ++i) {
401
+ var x = xs[i];
402
+ if (pred(x, i, xs) !== true) {
403
+ return false;
404
+ }
405
+ }
406
+ return true;
407
+ };
408
+ var equal = function (a1, a2) {
409
+ return a1.length === a2.length && forall(a1, function (x, i) {
410
+ return x === a2[i];
411
+ });
412
+ };
413
+ var slice = Array.prototype.slice;
414
+ var reverse = function (xs) {
415
+ var r = slice.call(xs, 0);
416
+ r.reverse();
417
+ return r;
418
+ };
419
+ var difference = function (a1, a2) {
420
+ return filter(a1, function (x) {
421
+ return !contains(a2, x);
422
+ });
423
+ };
424
+ var mapToObject = function (xs, f) {
425
+ var r = {};
426
+ for (var i = 0, len = xs.length; i < len; i++) {
427
+ var x = xs[i];
428
+ r[String(x)] = f(x, i);
429
+ }
430
+ return r;
431
+ };
432
+ var pure = function (x) {
433
+ return [x];
434
+ };
435
+ var sort = function (xs, comparator) {
436
+ var copy = slice.call(xs, 0);
437
+ copy.sort(comparator);
438
+ return copy;
439
+ };
440
+ var head = function (xs) {
441
+ return xs.length === 0 ? Option.none() : Option.some(xs[0]);
442
+ };
443
+ var last = function (xs) {
444
+ return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);
445
+ };
446
+ var from$1 = $_g6mvnrk8jfuw8q4k.isFunction(Array.from) ? Array.from : function (x) {
447
+ return slice.call(x);
448
+ };
449
+ var $_tyr3yk5jfuw8q47 = {
450
+ map: map,
451
+ each: each,
452
+ eachr: eachr,
453
+ partition: partition,
454
+ filter: filter,
455
+ groupBy: groupBy,
456
+ indexOf: indexOf,
457
+ foldr: foldr,
458
+ foldl: foldl,
459
+ find: find,
460
+ findIndex: findIndex,
461
+ flatten: flatten,
462
+ bind: bind,
463
+ forall: forall,
464
+ exists: exists,
465
+ contains: contains,
466
+ equal: equal,
467
+ reverse: reverse,
468
+ chunk: chunk,
469
+ difference: difference,
470
+ mapToObject: mapToObject,
471
+ pure: pure,
472
+ sort: sort,
473
+ range: range,
474
+ head: head,
475
+ last: last,
476
+ from: from$1
477
+ };
478
+
479
+ var keys = function () {
480
+ var fastKeys = Object.keys;
481
+ var slowKeys = function (o) {
482
+ var r = [];
483
+ for (var i in o) {
484
+ if (o.hasOwnProperty(i)) {
485
+ r.push(i);
486
+ }
487
+ }
488
+ return r;
489
+ };
490
+ return fastKeys === undefined ? slowKeys : fastKeys;
491
+ }();
492
+ var each$1 = function (obj, f) {
493
+ var props = keys(obj);
494
+ for (var k = 0, len = props.length; k < len; k++) {
495
+ var i = props[k];
496
+ var x = obj[i];
497
+ f(x, i, obj);
498
+ }
499
+ };
500
+ var objectMap = function (obj, f) {
501
+ return tupleMap(obj, function (x, i, obj) {
502
+ return {
503
+ k: i,
504
+ v: f(x, i, obj)
505
+ };
506
+ });
507
+ };
508
+ var tupleMap = function (obj, f) {
509
+ var r = {};
510
+ each$1(obj, function (x, i) {
511
+ var tuple = f(x, i, obj);
512
+ r[tuple.k] = tuple.v;
513
+ });
514
+ return r;
515
+ };
516
+ var bifilter = function (obj, pred) {
517
+ var t = {};
518
+ var f = {};
519
+ each$1(obj, function (x, i) {
520
+ var branch = pred(x, i) ? t : f;
521
+ branch[i] = x;
522
+ });
523
+ return {
524
+ t: t,
525
+ f: f
526
+ };
527
+ };
528
+ var mapToArray = function (obj, f) {
529
+ var r = [];
530
+ each$1(obj, function (value, name) {
531
+ r.push(f(value, name));
532
+ });
533
+ return r;
534
+ };
535
+ var find$1 = function (obj, pred) {
536
+ var props = keys(obj);
537
+ for (var k = 0, len = props.length; k < len; k++) {
538
+ var i = props[k];
539
+ var x = obj[i];
540
+ if (pred(x, i, obj)) {
541
+ return Option.some(x);
542
+ }
543
+ }
544
+ return Option.none();
545
+ };
546
+ var values = function (obj) {
547
+ return mapToArray(obj, function (v) {
548
+ return v;
549
+ });
550
+ };
551
+ var size = function (obj) {
552
+ return values(obj).length;
553
+ };
554
+ var $_11yiupkajfuw8q5c = {
555
+ bifilter: bifilter,
556
+ each: each$1,
557
+ map: objectMap,
558
+ mapToArray: mapToArray,
559
+ tupleMap: tupleMap,
560
+ find: find$1,
561
+ keys: keys,
562
+ values: values,
563
+ size: size
564
+ };
565
+
566
+ function Immutable () {
567
+ var fields = [];
568
+ for (var _i = 0; _i < arguments.length; _i++) {
569
+ fields[_i] = arguments[_i];
570
+ }
571
+ return function () {
572
+ var values = [];
573
+ for (var _i = 0; _i < arguments.length; _i++) {
574
+ values[_i] = arguments[_i];
575
+ }
576
+ if (fields.length !== values.length) {
577
+ throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
578
+ }
579
+ var struct = {};
580
+ $_tyr3yk5jfuw8q47.each(fields, function (name, i) {
581
+ struct[name] = $_20nfr6k7jfuw8q4g.constant(values[i]);
582
+ });
583
+ return struct;
584
+ };
585
+ }
586
+
587
+ var sort$1 = function (arr) {
588
+ return arr.slice(0).sort();
589
+ };
590
+ var reqMessage = function (required, keys) {
591
+ throw new Error('All required keys (' + sort$1(required).join(', ') + ') were not specified. Specified keys were: ' + sort$1(keys).join(', ') + '.');
592
+ };
593
+ var unsuppMessage = function (unsupported) {
594
+ throw new Error('Unsupported keys for object: ' + sort$1(unsupported).join(', '));
595
+ };
596
+ var validateStrArr = function (label, array) {
597
+ if (!$_g6mvnrk8jfuw8q4k.isArray(array))
598
+ throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');
599
+ $_tyr3yk5jfuw8q47.each(array, function (a) {
600
+ if (!$_g6mvnrk8jfuw8q4k.isString(a))
601
+ throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');
602
+ });
603
+ };
604
+ var invalidTypeMessage = function (incorrect, type) {
605
+ throw new Error('All values need to be of type: ' + type + '. Keys (' + sort$1(incorrect).join(', ') + ') were not.');
606
+ };
607
+ var checkDupes = function (everything) {
608
+ var sorted = sort$1(everything);
609
+ var dupe = $_tyr3yk5jfuw8q47.find(sorted, function (s, i) {
610
+ return i < sorted.length - 1 && s === sorted[i + 1];
611
+ });
612
+ dupe.each(function (d) {
613
+ throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');
614
+ });
615
+ };
616
+ var $_2j2nzkkejfuw8q5j = {
617
+ sort: sort$1,
618
+ reqMessage: reqMessage,
619
+ unsuppMessage: unsuppMessage,
620
+ validateStrArr: validateStrArr,
621
+ invalidTypeMessage: invalidTypeMessage,
622
+ checkDupes: checkDupes
623
+ };
624
+
625
+ function MixedBag (required, optional) {
626
+ var everything = required.concat(optional);
627
+ if (everything.length === 0)
628
+ throw new Error('You must specify at least one required or optional field.');
629
+ $_2j2nzkkejfuw8q5j.validateStrArr('required', required);
630
+ $_2j2nzkkejfuw8q5j.validateStrArr('optional', optional);
631
+ $_2j2nzkkejfuw8q5j.checkDupes(everything);
632
+ return function (obj) {
633
+ var keys = $_11yiupkajfuw8q5c.keys(obj);
634
+ var allReqd = $_tyr3yk5jfuw8q47.forall(required, function (req) {
635
+ return $_tyr3yk5jfuw8q47.contains(keys, req);
636
+ });
637
+ if (!allReqd)
638
+ $_2j2nzkkejfuw8q5j.reqMessage(required, keys);
639
+ var unsupported = $_tyr3yk5jfuw8q47.filter(keys, function (key) {
640
+ return !$_tyr3yk5jfuw8q47.contains(everything, key);
641
+ });
642
+ if (unsupported.length > 0)
643
+ $_2j2nzkkejfuw8q5j.unsuppMessage(unsupported);
644
+ var r = {};
645
+ $_tyr3yk5jfuw8q47.each(required, function (req) {
646
+ r[req] = $_20nfr6k7jfuw8q4g.constant(obj[req]);
647
+ });
648
+ $_tyr3yk5jfuw8q47.each(optional, function (opt) {
649
+ r[opt] = $_20nfr6k7jfuw8q4g.constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());
650
+ });
651
+ return r;
652
+ };
653
+ }
654
+
655
+ var $_5now9kbjfuw8q5e = {
656
+ immutable: Immutable,
657
+ immutableBag: MixedBag
658
+ };
659
+
660
+ var dimensions = $_5now9kbjfuw8q5e.immutable('width', 'height');
661
+ var grid = $_5now9kbjfuw8q5e.immutable('rows', 'columns');
662
+ var address = $_5now9kbjfuw8q5e.immutable('row', 'column');
663
+ var coords = $_5now9kbjfuw8q5e.immutable('x', 'y');
664
+ var detail = $_5now9kbjfuw8q5e.immutable('element', 'rowspan', 'colspan');
665
+ var detailnew = $_5now9kbjfuw8q5e.immutable('element', 'rowspan', 'colspan', 'isNew');
666
+ var extended = $_5now9kbjfuw8q5e.immutable('element', 'rowspan', 'colspan', 'row', 'column');
667
+ var rowdata = $_5now9kbjfuw8q5e.immutable('element', 'cells', 'section');
668
+ var elementnew = $_5now9kbjfuw8q5e.immutable('element', 'isNew');
669
+ var rowdatanew = $_5now9kbjfuw8q5e.immutable('element', 'cells', 'section', 'isNew');
670
+ var rowcells = $_5now9kbjfuw8q5e.immutable('cells', 'section');
671
+ var rowdetails = $_5now9kbjfuw8q5e.immutable('details', 'section');
672
+ var bounds = $_5now9kbjfuw8q5e.immutable('startRow', 'startCol', 'finishRow', 'finishCol');
673
+ var $_ce5pyrkgjfuw8q5v = {
674
+ dimensions: dimensions,
675
+ grid: grid,
676
+ address: address,
677
+ coords: coords,
678
+ extended: extended,
679
+ detail: detail,
680
+ detailnew: detailnew,
681
+ rowdata: rowdata,
682
+ elementnew: elementnew,
683
+ rowdatanew: rowdatanew,
684
+ rowcells: rowcells,
685
+ rowdetails: rowdetails,
686
+ bounds: bounds
687
+ };
688
+
689
+ var fromHtml = function (html, scope) {
690
+ var doc = scope || document;
691
+ var div = doc.createElement('div');
692
+ div.innerHTML = html;
693
+ if (!div.hasChildNodes() || div.childNodes.length > 1) {
694
+ console.error('HTML does not have a single root node', html);
695
+ throw 'HTML must have a single root node';
696
+ }
697
+ return fromDom(div.childNodes[0]);
698
+ };
699
+ var fromTag = function (tag, scope) {
700
+ var doc = scope || document;
701
+ var node = doc.createElement(tag);
702
+ return fromDom(node);
703
+ };
704
+ var fromText = function (text, scope) {
705
+ var doc = scope || document;
706
+ var node = doc.createTextNode(text);
707
+ return fromDom(node);
708
+ };
709
+ var fromDom = function (node) {
710
+ if (node === null || node === undefined)
711
+ throw new Error('Node cannot be null or undefined');
712
+ return { dom: $_20nfr6k7jfuw8q4g.constant(node) };
713
+ };
714
+ var fromPoint = function (doc, x, y) {
715
+ return Option.from(doc.dom().elementFromPoint(x, y)).map(fromDom);
716
+ };
717
+ var $_xbeoqkkjfuw8q73 = {
718
+ fromHtml: fromHtml,
719
+ fromTag: fromTag,
720
+ fromText: fromText,
721
+ fromDom: fromDom,
722
+ fromPoint: fromPoint
723
+ };
724
+
725
+ var $_x3hpikljfuw8q78 = {
726
+ ATTRIBUTE: 2,
727
+ CDATA_SECTION: 4,
728
+ COMMENT: 8,
729
+ DOCUMENT: 9,
730
+ DOCUMENT_TYPE: 10,
731
+ DOCUMENT_FRAGMENT: 11,
732
+ ELEMENT: 1,
733
+ TEXT: 3,
734
+ PROCESSING_INSTRUCTION: 7,
735
+ ENTITY_REFERENCE: 5,
736
+ ENTITY: 6,
737
+ NOTATION: 12
738
+ };
739
+
740
+ var ELEMENT = $_x3hpikljfuw8q78.ELEMENT;
741
+ var DOCUMENT = $_x3hpikljfuw8q78.DOCUMENT;
742
+ var is = function (element, selector) {
743
+ var elem = element.dom();
744
+ if (elem.nodeType !== ELEMENT)
745
+ return false;
746
+ else if (elem.matches !== undefined)
747
+ return elem.matches(selector);
748
+ else if (elem.msMatchesSelector !== undefined)
749
+ return elem.msMatchesSelector(selector);
750
+ else if (elem.webkitMatchesSelector !== undefined)
751
+ return elem.webkitMatchesSelector(selector);
752
+ else if (elem.mozMatchesSelector !== undefined)
753
+ return elem.mozMatchesSelector(selector);
754
+ else
755
+ throw new Error('Browser lacks native selectors');
756
+ };
757
+ var bypassSelector = function (dom) {
758
+ return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0;
759
+ };
760
+ var all = function (selector, scope) {
761
+ var base = scope === undefined ? document : scope.dom();
762
+ return bypassSelector(base) ? [] : $_tyr3yk5jfuw8q47.map(base.querySelectorAll(selector), $_xbeoqkkjfuw8q73.fromDom);
763
+ };
764
+ var one = function (selector, scope) {
765
+ var base = scope === undefined ? document : scope.dom();
766
+ return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map($_xbeoqkkjfuw8q73.fromDom);
767
+ };
768
+ var $_enn9uikjjfuw8q6w = {
769
+ all: all,
770
+ is: is,
771
+ one: one
772
+ };
773
+
774
+ var toArray = function (target, f) {
775
+ var r = [];
776
+ var recurse = function (e) {
777
+ r.push(e);
778
+ return f(e);
779
+ };
780
+ var cur = f(target);
781
+ do {
782
+ cur = cur.bind(recurse);
783
+ } while (cur.isSome());
784
+ return r;
785
+ };
786
+ var $_myhefknjfuw8q7m = { toArray: toArray };
787
+
788
+ var global$1 = typeof window !== 'undefined' ? window : Function('return this;')();
789
+
790
+ var path = function (parts, scope) {
791
+ var o = scope !== undefined && scope !== null ? scope : global$1;
792
+ for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
793
+ o = o[parts[i]];
794
+ return o;
795
+ };
796
+ var resolve = function (p, scope) {
797
+ var parts = p.split('.');
798
+ return path(parts, scope);
799
+ };
800
+ var step = function (o, part) {
801
+ if (o[part] === undefined || o[part] === null)
802
+ o[part] = {};
803
+ return o[part];
804
+ };
805
+ var forge = function (parts, target) {
806
+ var o = target !== undefined ? target : global$1;
807
+ for (var i = 0; i < parts.length; ++i)
808
+ o = step(o, parts[i]);
809
+ return o;
810
+ };
811
+ var namespace = function (name, target) {
812
+ var parts = name.split('.');
813
+ return forge(parts, target);
814
+ };
815
+ var $_1but6zkrjfuw8q81 = {
816
+ path: path,
817
+ resolve: resolve,
818
+ forge: forge,
819
+ namespace: namespace
820
+ };
821
+
822
+ var unsafe = function (name, scope) {
823
+ return $_1but6zkrjfuw8q81.resolve(name, scope);
824
+ };
825
+ var getOrDie = function (name, scope) {
826
+ var actual = unsafe(name, scope);
827
+ if (actual === undefined || actual === null)
828
+ throw name + ' not available on this browser';
829
+ return actual;
830
+ };
831
+ var $_3og7cjkqjfuw8q7y = { getOrDie: getOrDie };
832
+
833
+ var node = function () {
834
+ var f = $_3og7cjkqjfuw8q7y.getOrDie('Node');
835
+ return f;
836
+ };
837
+ var compareDocumentPosition = function (a, b, match) {
838
+ return (a.compareDocumentPosition(b) & match) !== 0;
839
+ };
840
+ var documentPositionPreceding = function (a, b) {
841
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
842
+ };
843
+ var documentPositionContainedBy = function (a, b) {
844
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
845
+ };
846
+ var $_3crkomkpjfuw8q7x = {
847
+ documentPositionPreceding: documentPositionPreceding,
848
+ documentPositionContainedBy: documentPositionContainedBy
849
+ };
850
+
851
+ var cached = function (f) {
852
+ var called = false;
853
+ var r;
854
+ return function () {
855
+ if (!called) {
856
+ called = true;
857
+ r = f.apply(null, arguments);
858
+ }
859
+ return r;
860
+ };
861
+ };
862
+ var $_cfqymdkujfuw8q85 = { cached: cached };
863
+
864
+ var firstMatch = function (regexes, s) {
865
+ for (var i = 0; i < regexes.length; i++) {
866
+ var x = regexes[i];
867
+ if (x.test(s))
868
+ return x;
869
+ }
870
+ return undefined;
871
+ };
872
+ var find$2 = function (regexes, agent) {
873
+ var r = firstMatch(regexes, agent);
874
+ if (!r)
875
+ return {
876
+ major: 0,
877
+ minor: 0
878
+ };
879
+ var group = function (i) {
880
+ return Number(agent.replace(r, '$' + i));
881
+ };
882
+ return nu(group(1), group(2));
883
+ };
884
+ var detect = function (versionRegexes, agent) {
885
+ var cleanedAgent = String(agent).toLowerCase();
886
+ if (versionRegexes.length === 0)
887
+ return unknown();
888
+ return find$2(versionRegexes, cleanedAgent);
889
+ };
890
+ var unknown = function () {
891
+ return nu(0, 0);
892
+ };
893
+ var nu = function (major, minor) {
894
+ return {
895
+ major: major,
896
+ minor: minor
897
+ };
898
+ };
899
+ var $_yulx6kxjfuw8q8c = {
900
+ nu: nu,
901
+ detect: detect,
902
+ unknown: unknown
903
+ };
904
+
905
+ var edge = 'Edge';
906
+ var chrome = 'Chrome';
907
+ var ie = 'IE';
908
+ var opera = 'Opera';
909
+ var firefox = 'Firefox';
910
+ var safari = 'Safari';
911
+ var isBrowser = function (name, current) {
912
+ return function () {
913
+ return current === name;
914
+ };
915
+ };
916
+ var unknown$1 = function () {
917
+ return nu$1({
918
+ current: undefined,
919
+ version: $_yulx6kxjfuw8q8c.unknown()
920
+ });
921
+ };
922
+ var nu$1 = function (info) {
923
+ var current = info.current;
924
+ var version = info.version;
925
+ return {
926
+ current: current,
927
+ version: version,
928
+ isEdge: isBrowser(edge, current),
929
+ isChrome: isBrowser(chrome, current),
930
+ isIE: isBrowser(ie, current),
931
+ isOpera: isBrowser(opera, current),
932
+ isFirefox: isBrowser(firefox, current),
933
+ isSafari: isBrowser(safari, current)
934
+ };
935
+ };
936
+ var $_1x5z0nkwjfuw8q88 = {
937
+ unknown: unknown$1,
938
+ nu: nu$1,
939
+ edge: $_20nfr6k7jfuw8q4g.constant(edge),
940
+ chrome: $_20nfr6k7jfuw8q4g.constant(chrome),
941
+ ie: $_20nfr6k7jfuw8q4g.constant(ie),
942
+ opera: $_20nfr6k7jfuw8q4g.constant(opera),
943
+ firefox: $_20nfr6k7jfuw8q4g.constant(firefox),
944
+ safari: $_20nfr6k7jfuw8q4g.constant(safari)
945
+ };
946
+
947
+ var windows = 'Windows';
948
+ var ios = 'iOS';
949
+ var android = 'Android';
950
+ var linux = 'Linux';
951
+ var osx = 'OSX';
952
+ var solaris = 'Solaris';
953
+ var freebsd = 'FreeBSD';
954
+ var isOS = function (name, current) {
955
+ return function () {
956
+ return current === name;
957
+ };
958
+ };
959
+ var unknown$2 = function () {
960
+ return nu$2({
961
+ current: undefined,
962
+ version: $_yulx6kxjfuw8q8c.unknown()
963
+ });
964
+ };
965
+ var nu$2 = function (info) {
966
+ var current = info.current;
967
+ var version = info.version;
968
+ return {
969
+ current: current,
970
+ version: version,
971
+ isWindows: isOS(windows, current),
972
+ isiOS: isOS(ios, current),
973
+ isAndroid: isOS(android, current),
974
+ isOSX: isOS(osx, current),
975
+ isLinux: isOS(linux, current),
976
+ isSolaris: isOS(solaris, current),
977
+ isFreeBSD: isOS(freebsd, current)
978
+ };
979
+ };
980
+ var $_87zg95kyjfuw8q8d = {
981
+ unknown: unknown$2,
982
+ nu: nu$2,
983
+ windows: $_20nfr6k7jfuw8q4g.constant(windows),
984
+ ios: $_20nfr6k7jfuw8q4g.constant(ios),
985
+ android: $_20nfr6k7jfuw8q4g.constant(android),
986
+ linux: $_20nfr6k7jfuw8q4g.constant(linux),
987
+ osx: $_20nfr6k7jfuw8q4g.constant(osx),
988
+ solaris: $_20nfr6k7jfuw8q4g.constant(solaris),
989
+ freebsd: $_20nfr6k7jfuw8q4g.constant(freebsd)
990
+ };
991
+
992
+ function DeviceType (os, browser, userAgent) {
993
+ var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
994
+ var isiPhone = os.isiOS() && !isiPad;
995
+ var isAndroid3 = os.isAndroid() && os.version.major === 3;
996
+ var isAndroid4 = os.isAndroid() && os.version.major === 4;
997
+ var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
998
+ var isTouch = os.isiOS() || os.isAndroid();
999
+ var isPhone = isTouch && !isTablet;
1000
+ var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
1001
+ return {
1002
+ isiPad: $_20nfr6k7jfuw8q4g.constant(isiPad),
1003
+ isiPhone: $_20nfr6k7jfuw8q4g.constant(isiPhone),
1004
+ isTablet: $_20nfr6k7jfuw8q4g.constant(isTablet),
1005
+ isPhone: $_20nfr6k7jfuw8q4g.constant(isPhone),
1006
+ isTouch: $_20nfr6k7jfuw8q4g.constant(isTouch),
1007
+ isAndroid: os.isAndroid,
1008
+ isiOS: os.isiOS,
1009
+ isWebView: $_20nfr6k7jfuw8q4g.constant(iOSwebview)
1010
+ };
1011
+ }
1012
+
1013
+ var detect$1 = function (candidates, userAgent) {
1014
+ var agent = String(userAgent).toLowerCase();
1015
+ return $_tyr3yk5jfuw8q47.find(candidates, function (candidate) {
1016
+ return candidate.search(agent);
1017
+ });
1018
+ };
1019
+ var detectBrowser = function (browsers, userAgent) {
1020
+ return detect$1(browsers, userAgent).map(function (browser) {
1021
+ var version = $_yulx6kxjfuw8q8c.detect(browser.versionRegexes, userAgent);
1022
+ return {
1023
+ current: browser.name,
1024
+ version: version
1025
+ };
1026
+ });
1027
+ };
1028
+ var detectOs = function (oses, userAgent) {
1029
+ return detect$1(oses, userAgent).map(function (os) {
1030
+ var version = $_yulx6kxjfuw8q8c.detect(os.versionRegexes, userAgent);
1031
+ return {
1032
+ current: os.name,
1033
+ version: version
1034
+ };
1035
+ });
1036
+ };
1037
+ var $_62ehlbl0jfuw8q8o = {
1038
+ detectBrowser: detectBrowser,
1039
+ detectOs: detectOs
1040
+ };
1041
+
1042
+ var addToStart = function (str, prefix) {
1043
+ return prefix + str;
1044
+ };
1045
+ var addToEnd = function (str, suffix) {
1046
+ return str + suffix;
1047
+ };
1048
+ var removeFromStart = function (str, numChars) {
1049
+ return str.substring(numChars);
1050
+ };
1051
+ var removeFromEnd = function (str, numChars) {
1052
+ return str.substring(0, str.length - numChars);
1053
+ };
1054
+ var $_1u5wzbl3jfuw8q90 = {
1055
+ addToStart: addToStart,
1056
+ addToEnd: addToEnd,
1057
+ removeFromStart: removeFromStart,
1058
+ removeFromEnd: removeFromEnd
1059
+ };
1060
+
1061
+ var first = function (str, count) {
1062
+ return str.substr(0, count);
1063
+ };
1064
+ var last$1 = function (str, count) {
1065
+ return str.substr(str.length - count, str.length);
1066
+ };
1067
+ var head$1 = function (str) {
1068
+ return str === '' ? Option.none() : Option.some(str.substr(0, 1));
1069
+ };
1070
+ var tail = function (str) {
1071
+ return str === '' ? Option.none() : Option.some(str.substring(1));
1072
+ };
1073
+ var $_6v04e7l4jfuw8q91 = {
1074
+ first: first,
1075
+ last: last$1,
1076
+ head: head$1,
1077
+ tail: tail
1078
+ };
1079
+
1080
+ var checkRange = function (str, substr, start) {
1081
+ if (substr === '')
1082
+ return true;
1083
+ if (str.length < substr.length)
1084
+ return false;
1085
+ var x = str.substr(start, start + substr.length);
1086
+ return x === substr;
1087
+ };
1088
+ var supplant = function (str, obj) {
1089
+ var isStringOrNumber = function (a) {
1090
+ var t = typeof a;
1091
+ return t === 'string' || t === 'number';
1092
+ };
1093
+ return str.replace(/\${([^{}]*)}/g, function (a, b) {
1094
+ var value = obj[b];
1095
+ return isStringOrNumber(value) ? value : a;
1096
+ });
1097
+ };
1098
+ var removeLeading = function (str, prefix) {
1099
+ return startsWith(str, prefix) ? $_1u5wzbl3jfuw8q90.removeFromStart(str, prefix.length) : str;
1100
+ };
1101
+ var removeTrailing = function (str, prefix) {
1102
+ return endsWith(str, prefix) ? $_1u5wzbl3jfuw8q90.removeFromEnd(str, prefix.length) : str;
1103
+ };
1104
+ var ensureLeading = function (str, prefix) {
1105
+ return startsWith(str, prefix) ? str : $_1u5wzbl3jfuw8q90.addToStart(str, prefix);
1106
+ };
1107
+ var ensureTrailing = function (str, prefix) {
1108
+ return endsWith(str, prefix) ? str : $_1u5wzbl3jfuw8q90.addToEnd(str, prefix);
1109
+ };
1110
+ var contains$1 = function (str, substr) {
1111
+ return str.indexOf(substr) !== -1;
1112
+ };
1113
+ var capitalize = function (str) {
1114
+ return $_6v04e7l4jfuw8q91.head(str).bind(function (head) {
1115
+ return $_6v04e7l4jfuw8q91.tail(str).map(function (tail) {
1116
+ return head.toUpperCase() + tail;
1117
+ });
1118
+ }).getOr(str);
1119
+ };
1120
+ var startsWith = function (str, prefix) {
1121
+ return checkRange(str, prefix, 0);
1122
+ };
1123
+ var endsWith = function (str, suffix) {
1124
+ return checkRange(str, suffix, str.length - suffix.length);
1125
+ };
1126
+ var trim = function (str) {
1127
+ return str.replace(/^\s+|\s+$/g, '');
1128
+ };
1129
+ var lTrim = function (str) {
1130
+ return str.replace(/^\s+/g, '');
1131
+ };
1132
+ var rTrim = function (str) {
1133
+ return str.replace(/\s+$/g, '');
1134
+ };
1135
+ var $_ey09l9l2jfuw8q8y = {
1136
+ supplant: supplant,
1137
+ startsWith: startsWith,
1138
+ removeLeading: removeLeading,
1139
+ removeTrailing: removeTrailing,
1140
+ ensureLeading: ensureLeading,
1141
+ ensureTrailing: ensureTrailing,
1142
+ endsWith: endsWith,
1143
+ contains: contains$1,
1144
+ trim: trim,
1145
+ lTrim: lTrim,
1146
+ rTrim: rTrim,
1147
+ capitalize: capitalize
1148
+ };
1149
+
1150
+ var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
1151
+ var checkContains = function (target) {
1152
+ return function (uastring) {
1153
+ return $_ey09l9l2jfuw8q8y.contains(uastring, target);
1154
+ };
1155
+ };
1156
+ var browsers = [
1157
+ {
1158
+ name: 'Edge',
1159
+ versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
1160
+ search: function (uastring) {
1161
+ var monstrosity = $_ey09l9l2jfuw8q8y.contains(uastring, 'edge/') && $_ey09l9l2jfuw8q8y.contains(uastring, 'chrome') && $_ey09l9l2jfuw8q8y.contains(uastring, 'safari') && $_ey09l9l2jfuw8q8y.contains(uastring, 'applewebkit');
1162
+ return monstrosity;
1163
+ }
1164
+ },
1165
+ {
1166
+ name: 'Chrome',
1167
+ versionRegexes: [
1168
+ /.*?chrome\/([0-9]+)\.([0-9]+).*/,
1169
+ normalVersionRegex
1170
+ ],
1171
+ search: function (uastring) {
1172
+ return $_ey09l9l2jfuw8q8y.contains(uastring, 'chrome') && !$_ey09l9l2jfuw8q8y.contains(uastring, 'chromeframe');
1173
+ }
1174
+ },
1175
+ {
1176
+ name: 'IE',
1177
+ versionRegexes: [
1178
+ /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
1179
+ /.*?rv:([0-9]+)\.([0-9]+).*/
1180
+ ],
1181
+ search: function (uastring) {
1182
+ return $_ey09l9l2jfuw8q8y.contains(uastring, 'msie') || $_ey09l9l2jfuw8q8y.contains(uastring, 'trident');
1183
+ }
1184
+ },
1185
+ {
1186
+ name: 'Opera',
1187
+ versionRegexes: [
1188
+ normalVersionRegex,
1189
+ /.*?opera\/([0-9]+)\.([0-9]+).*/
1190
+ ],
1191
+ search: checkContains('opera')
1192
+ },
1193
+ {
1194
+ name: 'Firefox',
1195
+ versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
1196
+ search: checkContains('firefox')
1197
+ },
1198
+ {
1199
+ name: 'Safari',
1200
+ versionRegexes: [
1201
+ normalVersionRegex,
1202
+ /.*?cpu os ([0-9]+)_([0-9]+).*/
1203
+ ],
1204
+ search: function (uastring) {
1205
+ return ($_ey09l9l2jfuw8q8y.contains(uastring, 'safari') || $_ey09l9l2jfuw8q8y.contains(uastring, 'mobile/')) && $_ey09l9l2jfuw8q8y.contains(uastring, 'applewebkit');
1206
+ }
1207
+ }
1208
+ ];
1209
+ var oses = [
1210
+ {
1211
+ name: 'Windows',
1212
+ search: checkContains('win'),
1213
+ versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
1214
+ },
1215
+ {
1216
+ name: 'iOS',
1217
+ search: function (uastring) {
1218
+ return $_ey09l9l2jfuw8q8y.contains(uastring, 'iphone') || $_ey09l9l2jfuw8q8y.contains(uastring, 'ipad');
1219
+ },
1220
+ versionRegexes: [
1221
+ /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
1222
+ /.*cpu os ([0-9]+)_([0-9]+).*/,
1223
+ /.*cpu iphone os ([0-9]+)_([0-9]+).*/
1224
+ ]
1225
+ },
1226
+ {
1227
+ name: 'Android',
1228
+ search: checkContains('android'),
1229
+ versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
1230
+ },
1231
+ {
1232
+ name: 'OSX',
1233
+ search: checkContains('os x'),
1234
+ versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
1235
+ },
1236
+ {
1237
+ name: 'Linux',
1238
+ search: checkContains('linux'),
1239
+ versionRegexes: []
1240
+ },
1241
+ {
1242
+ name: 'Solaris',
1243
+ search: checkContains('sunos'),
1244
+ versionRegexes: []
1245
+ },
1246
+ {
1247
+ name: 'FreeBSD',
1248
+ search: checkContains('freebsd'),
1249
+ versionRegexes: []
1250
+ }
1251
+ ];
1252
+ var $_6xdjg7l1jfuw8q8s = {
1253
+ browsers: $_20nfr6k7jfuw8q4g.constant(browsers),
1254
+ oses: $_20nfr6k7jfuw8q4g.constant(oses)
1255
+ };
1256
+
1257
+ var detect$2 = function (userAgent) {
1258
+ var browsers = $_6xdjg7l1jfuw8q8s.browsers();
1259
+ var oses = $_6xdjg7l1jfuw8q8s.oses();
1260
+ var browser = $_62ehlbl0jfuw8q8o.detectBrowser(browsers, userAgent).fold($_1x5z0nkwjfuw8q88.unknown, $_1x5z0nkwjfuw8q88.nu);
1261
+ var os = $_62ehlbl0jfuw8q8o.detectOs(oses, userAgent).fold($_87zg95kyjfuw8q8d.unknown, $_87zg95kyjfuw8q8d.nu);
1262
+ var deviceType = DeviceType(os, browser, userAgent);
1263
+ return {
1264
+ browser: browser,
1265
+ os: os,
1266
+ deviceType: deviceType
1267
+ };
1268
+ };
1269
+ var $_5kufzskvjfuw8q87 = { detect: detect$2 };
1270
+
1271
+ var detect$3 = $_cfqymdkujfuw8q85.cached(function () {
1272
+ var userAgent = navigator.userAgent;
1273
+ return $_5kufzskvjfuw8q87.detect(userAgent);
1274
+ });
1275
+ var $_fqgee0ktjfuw8q83 = { detect: detect$3 };
1276
+
1277
+ var eq = function (e1, e2) {
1278
+ return e1.dom() === e2.dom();
1279
+ };
1280
+ var isEqualNode = function (e1, e2) {
1281
+ return e1.dom().isEqualNode(e2.dom());
1282
+ };
1283
+ var member = function (element, elements) {
1284
+ return $_tyr3yk5jfuw8q47.exists(elements, $_20nfr6k7jfuw8q4g.curry(eq, element));
1285
+ };
1286
+ var regularContains = function (e1, e2) {
1287
+ var d1 = e1.dom(), d2 = e2.dom();
1288
+ return d1 === d2 ? false : d1.contains(d2);
1289
+ };
1290
+ var ieContains = function (e1, e2) {
1291
+ return $_3crkomkpjfuw8q7x.documentPositionContainedBy(e1.dom(), e2.dom());
1292
+ };
1293
+ var browser = $_fqgee0ktjfuw8q83.detect().browser;
1294
+ var contains$2 = browser.isIE() ? ieContains : regularContains;
1295
+ var $_e8rn66kojfuw8q7n = {
1296
+ eq: eq,
1297
+ isEqualNode: isEqualNode,
1298
+ member: member,
1299
+ contains: contains$2,
1300
+ is: $_enn9uikjjfuw8q6w.is
1301
+ };
1302
+
1303
+ var owner = function (element) {
1304
+ return $_xbeoqkkjfuw8q73.fromDom(element.dom().ownerDocument);
1305
+ };
1306
+ var documentElement = function (element) {
1307
+ var doc = owner(element);
1308
+ return $_xbeoqkkjfuw8q73.fromDom(doc.dom().documentElement);
1309
+ };
1310
+ var defaultView = function (element) {
1311
+ var el = element.dom();
1312
+ var defaultView = el.ownerDocument.defaultView;
1313
+ return $_xbeoqkkjfuw8q73.fromDom(defaultView);
1314
+ };
1315
+ var parent = function (element) {
1316
+ var dom = element.dom();
1317
+ return Option.from(dom.parentNode).map($_xbeoqkkjfuw8q73.fromDom);
1318
+ };
1319
+ var findIndex$1 = function (element) {
1320
+ return parent(element).bind(function (p) {
1321
+ var kin = children(p);
1322
+ return $_tyr3yk5jfuw8q47.findIndex(kin, function (elem) {
1323
+ return $_e8rn66kojfuw8q7n.eq(element, elem);
1324
+ });
1325
+ });
1326
+ };
1327
+ var parents = function (element, isRoot) {
1328
+ var stop = $_g6mvnrk8jfuw8q4k.isFunction(isRoot) ? isRoot : $_20nfr6k7jfuw8q4g.constant(false);
1329
+ var dom = element.dom();
1330
+ var ret = [];
1331
+ while (dom.parentNode !== null && dom.parentNode !== undefined) {
1332
+ var rawParent = dom.parentNode;
1333
+ var parent = $_xbeoqkkjfuw8q73.fromDom(rawParent);
1334
+ ret.push(parent);
1335
+ if (stop(parent) === true)
1336
+ break;
1337
+ else
1338
+ dom = rawParent;
1339
+ }
1340
+ return ret;
1341
+ };
1342
+ var siblings = function (element) {
1343
+ var filterSelf = function (elements) {
1344
+ return $_tyr3yk5jfuw8q47.filter(elements, function (x) {
1345
+ return !$_e8rn66kojfuw8q7n.eq(element, x);
1346
+ });
1347
+ };
1348
+ return parent(element).map(children).map(filterSelf).getOr([]);
1349
+ };
1350
+ var offsetParent = function (element) {
1351
+ var dom = element.dom();
1352
+ return Option.from(dom.offsetParent).map($_xbeoqkkjfuw8q73.fromDom);
1353
+ };
1354
+ var prevSibling = function (element) {
1355
+ var dom = element.dom();
1356
+ return Option.from(dom.previousSibling).map($_xbeoqkkjfuw8q73.fromDom);
1357
+ };
1358
+ var nextSibling = function (element) {
1359
+ var dom = element.dom();
1360
+ return Option.from(dom.nextSibling).map($_xbeoqkkjfuw8q73.fromDom);
1361
+ };
1362
+ var prevSiblings = function (element) {
1363
+ return $_tyr3yk5jfuw8q47.reverse($_myhefknjfuw8q7m.toArray(element, prevSibling));
1364
+ };
1365
+ var nextSiblings = function (element) {
1366
+ return $_myhefknjfuw8q7m.toArray(element, nextSibling);
1367
+ };
1368
+ var children = function (element) {
1369
+ var dom = element.dom();
1370
+ return $_tyr3yk5jfuw8q47.map(dom.childNodes, $_xbeoqkkjfuw8q73.fromDom);
1371
+ };
1372
+ var child = function (element, index) {
1373
+ var children = element.dom().childNodes;
1374
+ return Option.from(children[index]).map($_xbeoqkkjfuw8q73.fromDom);
1375
+ };
1376
+ var firstChild = function (element) {
1377
+ return child(element, 0);
1378
+ };
1379
+ var lastChild = function (element) {
1380
+ return child(element, element.dom().childNodes.length - 1);
1381
+ };
1382
+ var childNodesCount = function (element) {
1383
+ return element.dom().childNodes.length;
1384
+ };
1385
+ var hasChildNodes = function (element) {
1386
+ return element.dom().hasChildNodes();
1387
+ };
1388
+ var spot = $_5now9kbjfuw8q5e.immutable('element', 'offset');
1389
+ var leaf = function (element, offset) {
1390
+ var cs = children(element);
1391
+ return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
1392
+ };
1393
+ var $_s8scrkmjfuw8q7a = {
1394
+ owner: owner,
1395
+ defaultView: defaultView,
1396
+ documentElement: documentElement,
1397
+ parent: parent,
1398
+ findIndex: findIndex$1,
1399
+ parents: parents,
1400
+ siblings: siblings,
1401
+ prevSibling: prevSibling,
1402
+ offsetParent: offsetParent,
1403
+ prevSiblings: prevSiblings,
1404
+ nextSibling: nextSibling,
1405
+ nextSiblings: nextSiblings,
1406
+ children: children,
1407
+ child: child,
1408
+ firstChild: firstChild,
1409
+ lastChild: lastChild,
1410
+ childNodesCount: childNodesCount,
1411
+ hasChildNodes: hasChildNodes,
1412
+ leaf: leaf
1413
+ };
1414
+
1415
+ var firstLayer = function (scope, selector) {
1416
+ return filterFirstLayer(scope, selector, $_20nfr6k7jfuw8q4g.constant(true));
1417
+ };
1418
+ var filterFirstLayer = function (scope, selector, predicate) {
1419
+ return $_tyr3yk5jfuw8q47.bind($_s8scrkmjfuw8q7a.children(scope), function (x) {
1420
+ return $_enn9uikjjfuw8q6w.is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);
1421
+ });
1422
+ };
1423
+ var $_2g609akijfuw8q6n = {
1424
+ firstLayer: firstLayer,
1425
+ filterFirstLayer: filterFirstLayer
1426
+ };
1427
+
1428
+ var name = function (element) {
1429
+ var r = element.dom().nodeName;
1430
+ return r.toLowerCase();
1431
+ };
1432
+ var type = function (element) {
1433
+ return element.dom().nodeType;
1434
+ };
1435
+ var value = function (element) {
1436
+ return element.dom().nodeValue;
1437
+ };
1438
+ var isType$1 = function (t) {
1439
+ return function (element) {
1440
+ return type(element) === t;
1441
+ };
1442
+ };
1443
+ var isComment = function (element) {
1444
+ return type(element) === $_x3hpikljfuw8q78.COMMENT || name(element) === '#comment';
1445
+ };
1446
+ var isElement = isType$1($_x3hpikljfuw8q78.ELEMENT);
1447
+ var isText = isType$1($_x3hpikljfuw8q78.TEXT);
1448
+ var isDocument = isType$1($_x3hpikljfuw8q78.DOCUMENT);
1449
+ var $_a8gk30l6jfuw8q9c = {
1450
+ name: name,
1451
+ type: type,
1452
+ value: value,
1453
+ isElement: isElement,
1454
+ isText: isText,
1455
+ isDocument: isDocument,
1456
+ isComment: isComment
1457
+ };
1458
+
1459
+ var rawSet = function (dom, key, value) {
1460
+ if ($_g6mvnrk8jfuw8q4k.isString(value) || $_g6mvnrk8jfuw8q4k.isBoolean(value) || $_g6mvnrk8jfuw8q4k.isNumber(value)) {
1461
+ dom.setAttribute(key, value + '');
1462
+ } else {
1463
+ console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);
1464
+ throw new Error('Attribute value was not simple');
1465
+ }
1466
+ };
1467
+ var set = function (element, key, value) {
1468
+ rawSet(element.dom(), key, value);
1469
+ };
1470
+ var setAll = function (element, attrs) {
1471
+ var dom = element.dom();
1472
+ $_11yiupkajfuw8q5c.each(attrs, function (v, k) {
1473
+ rawSet(dom, k, v);
1474
+ });
1475
+ };
1476
+ var get = function (element, key) {
1477
+ var v = element.dom().getAttribute(key);
1478
+ return v === null ? undefined : v;
1479
+ };
1480
+ var has = function (element, key) {
1481
+ var dom = element.dom();
1482
+ return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
1483
+ };
1484
+ var remove = function (element, key) {
1485
+ element.dom().removeAttribute(key);
1486
+ };
1487
+ var hasNone = function (element) {
1488
+ var attrs = element.dom().attributes;
1489
+ return attrs === undefined || attrs === null || attrs.length === 0;
1490
+ };
1491
+ var clone = function (element) {
1492
+ return $_tyr3yk5jfuw8q47.foldl(element.dom().attributes, function (acc, attr) {
1493
+ acc[attr.name] = attr.value;
1494
+ return acc;
1495
+ }, {});
1496
+ };
1497
+ var transferOne = function (source, destination, attr) {
1498
+ if (has(source, attr) && !has(destination, attr))
1499
+ set(destination, attr, get(source, attr));
1500
+ };
1501
+ var transfer = function (source, destination, attrs) {
1502
+ if (!$_a8gk30l6jfuw8q9c.isElement(source) || !$_a8gk30l6jfuw8q9c.isElement(destination))
1503
+ return;
1504
+ $_tyr3yk5jfuw8q47.each(attrs, function (attr) {
1505
+ transferOne(source, destination, attr);
1506
+ });
1507
+ };
1508
+ var $_3q82t2l5jfuw8q93 = {
1509
+ clone: clone,
1510
+ set: set,
1511
+ setAll: setAll,
1512
+ get: get,
1513
+ has: has,
1514
+ remove: remove,
1515
+ hasNone: hasNone,
1516
+ transfer: transfer
1517
+ };
1518
+
1519
+ var inBody = function (element) {
1520
+ var dom = $_a8gk30l6jfuw8q9c.isText(element) ? element.dom().parentNode : element.dom();
1521
+ return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
1522
+ };
1523
+ var body = $_cfqymdkujfuw8q85.cached(function () {
1524
+ return getBody($_xbeoqkkjfuw8q73.fromDom(document));
1525
+ });
1526
+ var getBody = function (doc) {
1527
+ var body = doc.dom().body;
1528
+ if (body === null || body === undefined)
1529
+ throw 'Body is not available yet';
1530
+ return $_xbeoqkkjfuw8q73.fromDom(body);
1531
+ };
1532
+ var $_atd1tul9jfuw8q9i = {
1533
+ body: body,
1534
+ getBody: getBody,
1535
+ inBody: inBody
1536
+ };
1537
+
1538
+ var all$1 = function (predicate) {
1539
+ return descendants($_atd1tul9jfuw8q9i.body(), predicate);
1540
+ };
1541
+ var ancestors = function (scope, predicate, isRoot) {
1542
+ return $_tyr3yk5jfuw8q47.filter($_s8scrkmjfuw8q7a.parents(scope, isRoot), predicate);
1543
+ };
1544
+ var siblings$1 = function (scope, predicate) {
1545
+ return $_tyr3yk5jfuw8q47.filter($_s8scrkmjfuw8q7a.siblings(scope), predicate);
1546
+ };
1547
+ var children$1 = function (scope, predicate) {
1548
+ return $_tyr3yk5jfuw8q47.filter($_s8scrkmjfuw8q7a.children(scope), predicate);
1549
+ };
1550
+ var descendants = function (scope, predicate) {
1551
+ var result = [];
1552
+ $_tyr3yk5jfuw8q47.each($_s8scrkmjfuw8q7a.children(scope), function (x) {
1553
+ if (predicate(x)) {
1554
+ result = result.concat([x]);
1555
+ }
1556
+ result = result.concat(descendants(x, predicate));
1557
+ });
1558
+ return result;
1559
+ };
1560
+ var $_4d3nfbl8jfuw8q9f = {
1561
+ all: all$1,
1562
+ ancestors: ancestors,
1563
+ siblings: siblings$1,
1564
+ children: children$1,
1565
+ descendants: descendants
1566
+ };
1567
+
1568
+ var all$2 = function (selector) {
1569
+ return $_enn9uikjjfuw8q6w.all(selector);
1570
+ };
1571
+ var ancestors$1 = function (scope, selector, isRoot) {
1572
+ return $_4d3nfbl8jfuw8q9f.ancestors(scope, function (e) {
1573
+ return $_enn9uikjjfuw8q6w.is(e, selector);
1574
+ }, isRoot);
1575
+ };
1576
+ var siblings$2 = function (scope, selector) {
1577
+ return $_4d3nfbl8jfuw8q9f.siblings(scope, function (e) {
1578
+ return $_enn9uikjjfuw8q6w.is(e, selector);
1579
+ });
1580
+ };
1581
+ var children$2 = function (scope, selector) {
1582
+ return $_4d3nfbl8jfuw8q9f.children(scope, function (e) {
1583
+ return $_enn9uikjjfuw8q6w.is(e, selector);
1584
+ });
1585
+ };
1586
+ var descendants$1 = function (scope, selector) {
1587
+ return $_enn9uikjjfuw8q6w.all(selector, scope);
1588
+ };
1589
+ var $_6c9d0hl7jfuw8q9d = {
1590
+ all: all$2,
1591
+ ancestors: ancestors$1,
1592
+ siblings: siblings$2,
1593
+ children: children$2,
1594
+ descendants: descendants$1
1595
+ };
1596
+
1597
+ function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
1598
+ return is(scope, a) ? Option.some(scope) : $_g6mvnrk8jfuw8q4k.isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
1599
+ }
1600
+
1601
+ var first$1 = function (predicate) {
1602
+ return descendant($_atd1tul9jfuw8q9i.body(), predicate);
1603
+ };
1604
+ var ancestor = function (scope, predicate, isRoot) {
1605
+ var element = scope.dom();
1606
+ var stop = $_g6mvnrk8jfuw8q4k.isFunction(isRoot) ? isRoot : $_20nfr6k7jfuw8q4g.constant(false);
1607
+ while (element.parentNode) {
1608
+ element = element.parentNode;
1609
+ var el = $_xbeoqkkjfuw8q73.fromDom(element);
1610
+ if (predicate(el))
1611
+ return Option.some(el);
1612
+ else if (stop(el))
1613
+ break;
1614
+ }
1615
+ return Option.none();
1616
+ };
1617
+ var closest = function (scope, predicate, isRoot) {
1618
+ var is = function (scope) {
1619
+ return predicate(scope);
1620
+ };
1621
+ return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
1622
+ };
1623
+ var sibling = function (scope, predicate) {
1624
+ var element = scope.dom();
1625
+ if (!element.parentNode)
1626
+ return Option.none();
1627
+ return child$1($_xbeoqkkjfuw8q73.fromDom(element.parentNode), function (x) {
1628
+ return !$_e8rn66kojfuw8q7n.eq(scope, x) && predicate(x);
1629
+ });
1630
+ };
1631
+ var child$1 = function (scope, predicate) {
1632
+ var result = $_tyr3yk5jfuw8q47.find(scope.dom().childNodes, $_20nfr6k7jfuw8q4g.compose(predicate, $_xbeoqkkjfuw8q73.fromDom));
1633
+ return result.map($_xbeoqkkjfuw8q73.fromDom);
1634
+ };
1635
+ var descendant = function (scope, predicate) {
1636
+ var descend = function (element) {
1637
+ for (var i = 0; i < element.childNodes.length; i++) {
1638
+ if (predicate($_xbeoqkkjfuw8q73.fromDom(element.childNodes[i])))
1639
+ return Option.some($_xbeoqkkjfuw8q73.fromDom(element.childNodes[i]));
1640
+ var res = descend(element.childNodes[i]);
1641
+ if (res.isSome())
1642
+ return res;
1643
+ }
1644
+ return Option.none();
1645
+ };
1646
+ return descend(scope.dom());
1647
+ };
1648
+ var $_11ympzlbjfuw8q9n = {
1649
+ first: first$1,
1650
+ ancestor: ancestor,
1651
+ closest: closest,
1652
+ sibling: sibling,
1653
+ child: child$1,
1654
+ descendant: descendant
1655
+ };
1656
+
1657
+ var first$2 = function (selector) {
1658
+ return $_enn9uikjjfuw8q6w.one(selector);
1659
+ };
1660
+ var ancestor$1 = function (scope, selector, isRoot) {
1661
+ return $_11ympzlbjfuw8q9n.ancestor(scope, function (e) {
1662
+ return $_enn9uikjjfuw8q6w.is(e, selector);
1663
+ }, isRoot);
1664
+ };
1665
+ var sibling$1 = function (scope, selector) {
1666
+ return $_11ympzlbjfuw8q9n.sibling(scope, function (e) {
1667
+ return $_enn9uikjjfuw8q6w.is(e, selector);
1668
+ });
1669
+ };
1670
+ var child$2 = function (scope, selector) {
1671
+ return $_11ympzlbjfuw8q9n.child(scope, function (e) {
1672
+ return $_enn9uikjjfuw8q6w.is(e, selector);
1673
+ });
1674
+ };
1675
+ var descendant$1 = function (scope, selector) {
1676
+ return $_enn9uikjjfuw8q6w.one(selector, scope);
1677
+ };
1678
+ var closest$1 = function (scope, selector, isRoot) {
1679
+ return ClosestOrAncestor($_enn9uikjjfuw8q6w.is, ancestor$1, scope, selector, isRoot);
1680
+ };
1681
+ var $_8wdrbmlajfuw8q9m = {
1682
+ first: first$2,
1683
+ ancestor: ancestor$1,
1684
+ sibling: sibling$1,
1685
+ child: child$2,
1686
+ descendant: descendant$1,
1687
+ closest: closest$1
1688
+ };
1689
+
1690
+ var lookup = function (tags, element, _isRoot) {
1691
+ var isRoot = _isRoot !== undefined ? _isRoot : $_20nfr6k7jfuw8q4g.constant(false);
1692
+ if (isRoot(element))
1693
+ return Option.none();
1694
+ if ($_tyr3yk5jfuw8q47.contains(tags, $_a8gk30l6jfuw8q9c.name(element)))
1695
+ return Option.some(element);
1696
+ var isRootOrUpperTable = function (element) {
1697
+ return $_enn9uikjjfuw8q6w.is(element, 'table') || isRoot(element);
1698
+ };
1699
+ return $_8wdrbmlajfuw8q9m.ancestor(element, tags.join(','), isRootOrUpperTable);
1700
+ };
1701
+ var cell = function (element, isRoot) {
1702
+ return lookup([
1703
+ 'td',
1704
+ 'th'
1705
+ ], element, isRoot);
1706
+ };
1707
+ var cells = function (ancestor) {
1708
+ return $_2g609akijfuw8q6n.firstLayer(ancestor, 'th,td');
1709
+ };
1710
+ var notCell = function (element, isRoot) {
1711
+ return lookup([
1712
+ 'caption',
1713
+ 'tr',
1714
+ 'tbody',
1715
+ 'tfoot',
1716
+ 'thead'
1717
+ ], element, isRoot);
1718
+ };
1719
+ var neighbours = function (selector, element) {
1720
+ return $_s8scrkmjfuw8q7a.parent(element).map(function (parent) {
1721
+ return $_6c9d0hl7jfuw8q9d.children(parent, selector);
1722
+ });
1723
+ };
1724
+ var neighbourCells = $_20nfr6k7jfuw8q4g.curry(neighbours, 'th,td');
1725
+ var neighbourRows = $_20nfr6k7jfuw8q4g.curry(neighbours, 'tr');
1726
+ var firstCell = function (ancestor) {
1727
+ return $_8wdrbmlajfuw8q9m.descendant(ancestor, 'th,td');
1728
+ };
1729
+ var table = function (element, isRoot) {
1730
+ return $_8wdrbmlajfuw8q9m.closest(element, 'table', isRoot);
1731
+ };
1732
+ var row = function (element, isRoot) {
1733
+ return lookup(['tr'], element, isRoot);
1734
+ };
1735
+ var rows = function (ancestor) {
1736
+ return $_2g609akijfuw8q6n.firstLayer(ancestor, 'tr');
1737
+ };
1738
+ var attr = function (element, property) {
1739
+ return parseInt($_3q82t2l5jfuw8q93.get(element, property), 10);
1740
+ };
1741
+ var grid$1 = function (element, rowProp, colProp) {
1742
+ var rows = attr(element, rowProp);
1743
+ var cols = attr(element, colProp);
1744
+ return $_ce5pyrkgjfuw8q5v.grid(rows, cols);
1745
+ };
1746
+ var $_aqhz9okhjfuw8q5y = {
1747
+ cell: cell,
1748
+ firstCell: firstCell,
1749
+ cells: cells,
1750
+ neighbourCells: neighbourCells,
1751
+ table: table,
1752
+ row: row,
1753
+ rows: rows,
1754
+ notCell: notCell,
1755
+ neighbourRows: neighbourRows,
1756
+ attr: attr,
1757
+ grid: grid$1
1758
+ };
1759
+
1760
+ var fromTable = function (table) {
1761
+ var rows = $_aqhz9okhjfuw8q5y.rows(table);
1762
+ return $_tyr3yk5jfuw8q47.map(rows, function (row) {
1763
+ var element = row;
1764
+ var parent = $_s8scrkmjfuw8q7a.parent(element);
1765
+ var parentSection = parent.bind(function (parent) {
1766
+ var parentName = $_a8gk30l6jfuw8q9c.name(parent);
1767
+ return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';
1768
+ });
1769
+ var cells = $_tyr3yk5jfuw8q47.map($_aqhz9okhjfuw8q5y.cells(row), function (cell) {
1770
+ var rowspan = $_3q82t2l5jfuw8q93.has(cell, 'rowspan') ? parseInt($_3q82t2l5jfuw8q93.get(cell, 'rowspan'), 10) : 1;
1771
+ var colspan = $_3q82t2l5jfuw8q93.has(cell, 'colspan') ? parseInt($_3q82t2l5jfuw8q93.get(cell, 'colspan'), 10) : 1;
1772
+ return $_ce5pyrkgjfuw8q5v.detail(cell, rowspan, colspan);
1773
+ });
1774
+ return $_ce5pyrkgjfuw8q5v.rowdata(element, cells, parentSection);
1775
+ });
1776
+ };
1777
+ var fromPastedRows = function (rows, example) {
1778
+ return $_tyr3yk5jfuw8q47.map(rows, function (row) {
1779
+ var cells = $_tyr3yk5jfuw8q47.map($_aqhz9okhjfuw8q5y.cells(row), function (cell) {
1780
+ var rowspan = $_3q82t2l5jfuw8q93.has(cell, 'rowspan') ? parseInt($_3q82t2l5jfuw8q93.get(cell, 'rowspan'), 10) : 1;
1781
+ var colspan = $_3q82t2l5jfuw8q93.has(cell, 'colspan') ? parseInt($_3q82t2l5jfuw8q93.get(cell, 'colspan'), 10) : 1;
1782
+ return $_ce5pyrkgjfuw8q5v.detail(cell, rowspan, colspan);
1783
+ });
1784
+ return $_ce5pyrkgjfuw8q5v.rowdata(row, cells, example.section());
1785
+ });
1786
+ };
1787
+ var $_dy3x0nkfjfuw8q5l = {
1788
+ fromTable: fromTable,
1789
+ fromPastedRows: fromPastedRows
1790
+ };
1791
+
1792
+ var key = function (row, column) {
1793
+ return row + ',' + column;
1794
+ };
1795
+ var getAt = function (warehouse, row, column) {
1796
+ var raw = warehouse.access()[key(row, column)];
1797
+ return raw !== undefined ? Option.some(raw) : Option.none();
1798
+ };
1799
+ var findItem = function (warehouse, item, comparator) {
1800
+ var filtered = filterItems(warehouse, function (detail) {
1801
+ return comparator(item, detail.element());
1802
+ });
1803
+ return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();
1804
+ };
1805
+ var filterItems = function (warehouse, predicate) {
1806
+ var all = $_tyr3yk5jfuw8q47.bind(warehouse.all(), function (r) {
1807
+ return r.cells();
1808
+ });
1809
+ return $_tyr3yk5jfuw8q47.filter(all, predicate);
1810
+ };
1811
+ var generate = function (list) {
1812
+ var access = {};
1813
+ var cells = [];
1814
+ var maxRows = list.length;
1815
+ var maxColumns = 0;
1816
+ $_tyr3yk5jfuw8q47.each(list, function (details, r) {
1817
+ var currentRow = [];
1818
+ $_tyr3yk5jfuw8q47.each(details.cells(), function (detail, c) {
1819
+ var start = 0;
1820
+ while (access[key(r, start)] !== undefined) {
1821
+ start++;
1822
+ }
1823
+ var current = $_ce5pyrkgjfuw8q5v.extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);
1824
+ for (var i = 0; i < detail.colspan(); i++) {
1825
+ for (var j = 0; j < detail.rowspan(); j++) {
1826
+ var cr = r + j;
1827
+ var cc = start + i;
1828
+ var newpos = key(cr, cc);
1829
+ access[newpos] = current;
1830
+ maxColumns = Math.max(maxColumns, cc + 1);
1831
+ }
1832
+ }
1833
+ currentRow.push(current);
1834
+ });
1835
+ cells.push($_ce5pyrkgjfuw8q5v.rowdata(details.element(), currentRow, details.section()));
1836
+ });
1837
+ var grid = $_ce5pyrkgjfuw8q5v.grid(maxRows, maxColumns);
1838
+ return {
1839
+ grid: $_20nfr6k7jfuw8q4g.constant(grid),
1840
+ access: $_20nfr6k7jfuw8q4g.constant(access),
1841
+ all: $_20nfr6k7jfuw8q4g.constant(cells)
1842
+ };
1843
+ };
1844
+ var justCells = function (warehouse) {
1845
+ var rows = $_tyr3yk5jfuw8q47.map(warehouse.all(), function (w) {
1846
+ return w.cells();
1847
+ });
1848
+ return $_tyr3yk5jfuw8q47.flatten(rows);
1849
+ };
1850
+ var $_2ge24cldjfuw8qa3 = {
1851
+ generate: generate,
1852
+ getAt: getAt,
1853
+ findItem: findItem,
1854
+ filterItems: filterItems,
1855
+ justCells: justCells
1856
+ };
1857
+
1858
+ var isSupported = function (dom) {
1859
+ return dom.style !== undefined;
1860
+ };
1861
+ var $_b75qp5lfjfuw8qau = { isSupported: isSupported };
1862
+
1863
+ var internalSet = function (dom, property, value) {
1864
+ if (!$_g6mvnrk8jfuw8q4k.isString(value)) {
1865
+ console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
1866
+ throw new Error('CSS value must be a string: ' + value);
1867
+ }
1868
+ if ($_b75qp5lfjfuw8qau.isSupported(dom))
1869
+ dom.style.setProperty(property, value);
1870
+ };
1871
+ var internalRemove = function (dom, property) {
1872
+ if ($_b75qp5lfjfuw8qau.isSupported(dom))
1873
+ dom.style.removeProperty(property);
1874
+ };
1875
+ var set$1 = function (element, property, value) {
1876
+ var dom = element.dom();
1877
+ internalSet(dom, property, value);
1878
+ };
1879
+ var setAll$1 = function (element, css) {
1880
+ var dom = element.dom();
1881
+ $_11yiupkajfuw8q5c.each(css, function (v, k) {
1882
+ internalSet(dom, k, v);
1883
+ });
1884
+ };
1885
+ var setOptions = function (element, css) {
1886
+ var dom = element.dom();
1887
+ $_11yiupkajfuw8q5c.each(css, function (v, k) {
1888
+ v.fold(function () {
1889
+ internalRemove(dom, k);
1890
+ }, function (value) {
1891
+ internalSet(dom, k, value);
1892
+ });
1893
+ });
1894
+ };
1895
+ var get$1 = function (element, property) {
1896
+ var dom = element.dom();
1897
+ var styles = window.getComputedStyle(dom);
1898
+ var r = styles.getPropertyValue(property);
1899
+ var v = r === '' && !$_atd1tul9jfuw8q9i.inBody(element) ? getUnsafeProperty(dom, property) : r;
1900
+ return v === null ? undefined : v;
1901
+ };
1902
+ var getUnsafeProperty = function (dom, property) {
1903
+ return $_b75qp5lfjfuw8qau.isSupported(dom) ? dom.style.getPropertyValue(property) : '';
1904
+ };
1905
+ var getRaw = function (element, property) {
1906
+ var dom = element.dom();
1907
+ var raw = getUnsafeProperty(dom, property);
1908
+ return Option.from(raw).filter(function (r) {
1909
+ return r.length > 0;
1910
+ });
1911
+ };
1912
+ var getAllRaw = function (element) {
1913
+ var css = {};
1914
+ var dom = element.dom();
1915
+ if ($_b75qp5lfjfuw8qau.isSupported(dom)) {
1916
+ for (var i = 0; i < dom.style.length; i++) {
1917
+ var ruleName = dom.style.item(i);
1918
+ css[ruleName] = dom.style[ruleName];
1919
+ }
1920
+ }
1921
+ return css;
1922
+ };
1923
+ var isValidValue = function (tag, property, value) {
1924
+ var element = $_xbeoqkkjfuw8q73.fromTag(tag);
1925
+ set$1(element, property, value);
1926
+ var style = getRaw(element, property);
1927
+ return style.isSome();
1928
+ };
1929
+ var remove$1 = function (element, property) {
1930
+ var dom = element.dom();
1931
+ internalRemove(dom, property);
1932
+ if ($_3q82t2l5jfuw8q93.has(element, 'style') && $_ey09l9l2jfuw8q8y.trim($_3q82t2l5jfuw8q93.get(element, 'style')) === '') {
1933
+ $_3q82t2l5jfuw8q93.remove(element, 'style');
1934
+ }
1935
+ };
1936
+ var preserve = function (element, f) {
1937
+ var oldStyles = $_3q82t2l5jfuw8q93.get(element, 'style');
1938
+ var result = f(element);
1939
+ var restore = oldStyles === undefined ? $_3q82t2l5jfuw8q93.remove : $_3q82t2l5jfuw8q93.set;
1940
+ restore(element, 'style', oldStyles);
1941
+ return result;
1942
+ };
1943
+ var copy = function (source, target) {
1944
+ var sourceDom = source.dom();
1945
+ var targetDom = target.dom();
1946
+ if ($_b75qp5lfjfuw8qau.isSupported(sourceDom) && $_b75qp5lfjfuw8qau.isSupported(targetDom)) {
1947
+ targetDom.style.cssText = sourceDom.style.cssText;
1948
+ }
1949
+ };
1950
+ var reflow = function (e) {
1951
+ return e.dom().offsetWidth;
1952
+ };
1953
+ var transferOne$1 = function (source, destination, style) {
1954
+ getRaw(source, style).each(function (value) {
1955
+ if (getRaw(destination, style).isNone())
1956
+ set$1(destination, style, value);
1957
+ });
1958
+ };
1959
+ var transfer$1 = function (source, destination, styles) {
1960
+ if (!$_a8gk30l6jfuw8q9c.isElement(source) || !$_a8gk30l6jfuw8q9c.isElement(destination))
1961
+ return;
1962
+ $_tyr3yk5jfuw8q47.each(styles, function (style) {
1963
+ transferOne$1(source, destination, style);
1964
+ });
1965
+ };
1966
+ var $_bfod2hlejfuw8qac = {
1967
+ copy: copy,
1968
+ set: set$1,
1969
+ preserve: preserve,
1970
+ setAll: setAll$1,
1971
+ setOptions: setOptions,
1972
+ remove: remove$1,
1973
+ get: get$1,
1974
+ getRaw: getRaw,
1975
+ getAllRaw: getAllRaw,
1976
+ isValidValue: isValidValue,
1977
+ reflow: reflow,
1978
+ transfer: transfer$1
1979
+ };
1980
+
1981
+ var before = function (marker, element) {
1982
+ var parent = $_s8scrkmjfuw8q7a.parent(marker);
1983
+ parent.each(function (v) {
1984
+ v.dom().insertBefore(element.dom(), marker.dom());
1985
+ });
1986
+ };
1987
+ var after = function (marker, element) {
1988
+ var sibling = $_s8scrkmjfuw8q7a.nextSibling(marker);
1989
+ sibling.fold(function () {
1990
+ var parent = $_s8scrkmjfuw8q7a.parent(marker);
1991
+ parent.each(function (v) {
1992
+ append(v, element);
1993
+ });
1994
+ }, function (v) {
1995
+ before(v, element);
1996
+ });
1997
+ };
1998
+ var prepend = function (parent, element) {
1999
+ var firstChild = $_s8scrkmjfuw8q7a.firstChild(parent);
2000
+ firstChild.fold(function () {
2001
+ append(parent, element);
2002
+ }, function (v) {
2003
+ parent.dom().insertBefore(element.dom(), v.dom());
2004
+ });
2005
+ };
2006
+ var append = function (parent, element) {
2007
+ parent.dom().appendChild(element.dom());
2008
+ };
2009
+ var appendAt = function (parent, element, index) {
2010
+ $_s8scrkmjfuw8q7a.child(parent, index).fold(function () {
2011
+ append(parent, element);
2012
+ }, function (v) {
2013
+ before(v, element);
2014
+ });
2015
+ };
2016
+ var wrap = function (element, wrapper) {
2017
+ before(element, wrapper);
2018
+ append(wrapper, element);
2019
+ };
2020
+ var $_fatuxylgjfuw8qav = {
2021
+ before: before,
2022
+ after: after,
2023
+ prepend: prepend,
2024
+ append: append,
2025
+ appendAt: appendAt,
2026
+ wrap: wrap
2027
+ };
2028
+
2029
+ var before$1 = function (marker, elements) {
2030
+ $_tyr3yk5jfuw8q47.each(elements, function (x) {
2031
+ $_fatuxylgjfuw8qav.before(marker, x);
2032
+ });
2033
+ };
2034
+ var after$1 = function (marker, elements) {
2035
+ $_tyr3yk5jfuw8q47.each(elements, function (x, i) {
2036
+ var e = i === 0 ? marker : elements[i - 1];
2037
+ $_fatuxylgjfuw8qav.after(e, x);
2038
+ });
2039
+ };
2040
+ var prepend$1 = function (parent, elements) {
2041
+ $_tyr3yk5jfuw8q47.each(elements.slice().reverse(), function (x) {
2042
+ $_fatuxylgjfuw8qav.prepend(parent, x);
2043
+ });
2044
+ };
2045
+ var append$1 = function (parent, elements) {
2046
+ $_tyr3yk5jfuw8q47.each(elements, function (x) {
2047
+ $_fatuxylgjfuw8qav.append(parent, x);
2048
+ });
2049
+ };
2050
+ var $_9zaoqflijfuw8qb0 = {
2051
+ before: before$1,
2052
+ after: after$1,
2053
+ prepend: prepend$1,
2054
+ append: append$1
2055
+ };
2056
+
2057
+ var empty = function (element) {
2058
+ element.dom().textContent = '';
2059
+ $_tyr3yk5jfuw8q47.each($_s8scrkmjfuw8q7a.children(element), function (rogue) {
2060
+ remove$2(rogue);
2061
+ });
2062
+ };
2063
+ var remove$2 = function (element) {
2064
+ var dom = element.dom();
2065
+ if (dom.parentNode !== null)
2066
+ dom.parentNode.removeChild(dom);
2067
+ };
2068
+ var unwrap = function (wrapper) {
2069
+ var children = $_s8scrkmjfuw8q7a.children(wrapper);
2070
+ if (children.length > 0)
2071
+ $_9zaoqflijfuw8qb0.before(wrapper, children);
2072
+ remove$2(wrapper);
2073
+ };
2074
+ var $_fl1deelhjfuw8qax = {
2075
+ empty: empty,
2076
+ remove: remove$2,
2077
+ unwrap: unwrap
2078
+ };
2079
+
2080
+ var stats = $_5now9kbjfuw8q5e.immutable('minRow', 'minCol', 'maxRow', 'maxCol');
2081
+ var findSelectedStats = function (house, isSelected) {
2082
+ var totalColumns = house.grid().columns();
2083
+ var totalRows = house.grid().rows();
2084
+ var minRow = totalRows;
2085
+ var minCol = totalColumns;
2086
+ var maxRow = 0;
2087
+ var maxCol = 0;
2088
+ $_11yiupkajfuw8q5c.each(house.access(), function (detail) {
2089
+ if (isSelected(detail)) {
2090
+ var startRow = detail.row();
2091
+ var endRow = startRow + detail.rowspan() - 1;
2092
+ var startCol = detail.column();
2093
+ var endCol = startCol + detail.colspan() - 1;
2094
+ if (startRow < minRow)
2095
+ minRow = startRow;
2096
+ else if (endRow > maxRow)
2097
+ maxRow = endRow;
2098
+ if (startCol < minCol)
2099
+ minCol = startCol;
2100
+ else if (endCol > maxCol)
2101
+ maxCol = endCol;
2102
+ }
2103
+ });
2104
+ return stats(minRow, minCol, maxRow, maxCol);
2105
+ };
2106
+ var makeCell = function (list, seenSelected, rowIndex) {
2107
+ var row = list[rowIndex].element();
2108
+ var td = $_xbeoqkkjfuw8q73.fromTag('td');
2109
+ $_fatuxylgjfuw8qav.append(td, $_xbeoqkkjfuw8q73.fromTag('br'));
2110
+ var f = seenSelected ? $_fatuxylgjfuw8qav.append : $_fatuxylgjfuw8qav.prepend;
2111
+ f(row, td);
2112
+ };
2113
+ var fillInGaps = function (list, house, stats, isSelected) {
2114
+ var totalColumns = house.grid().columns();
2115
+ var totalRows = house.grid().rows();
2116
+ for (var i = 0; i < totalRows; i++) {
2117
+ var seenSelected = false;
2118
+ for (var j = 0; j < totalColumns; j++) {
2119
+ if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {
2120
+ var needCell = $_2ge24cldjfuw8qa3.getAt(house, i, j).filter(isSelected).isNone();
2121
+ if (needCell)
2122
+ makeCell(list, seenSelected, i);
2123
+ else
2124
+ seenSelected = true;
2125
+ }
2126
+ }
2127
+ }
2128
+ };
2129
+ var clean = function (table, stats) {
2130
+ var emptyRows = $_tyr3yk5jfuw8q47.filter($_2g609akijfuw8q6n.firstLayer(table, 'tr'), function (row) {
2131
+ return row.dom().childElementCount === 0;
2132
+ });
2133
+ $_tyr3yk5jfuw8q47.each(emptyRows, $_fl1deelhjfuw8qax.remove);
2134
+ if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {
2135
+ $_tyr3yk5jfuw8q47.each($_2g609akijfuw8q6n.firstLayer(table, 'th,td'), function (cell) {
2136
+ $_3q82t2l5jfuw8q93.remove(cell, 'rowspan');
2137
+ $_3q82t2l5jfuw8q93.remove(cell, 'colspan');
2138
+ });
2139
+ }
2140
+ $_3q82t2l5jfuw8q93.remove(table, 'width');
2141
+ $_3q82t2l5jfuw8q93.remove(table, 'height');
2142
+ $_bfod2hlejfuw8qac.remove(table, 'width');
2143
+ $_bfod2hlejfuw8qac.remove(table, 'height');
2144
+ };
2145
+ var extract = function (table, selectedSelector) {
2146
+ var isSelected = function (detail) {
2147
+ return $_enn9uikjjfuw8q6w.is(detail.element(), selectedSelector);
2148
+ };
2149
+ var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
2150
+ var house = $_2ge24cldjfuw8qa3.generate(list);
2151
+ var stats = findSelectedStats(house, isSelected);
2152
+ var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';
2153
+ var unselectedCells = $_2g609akijfuw8q6n.filterFirstLayer(table, 'th,td', function (cell) {
2154
+ return $_enn9uikjjfuw8q6w.is(cell, selector);
2155
+ });
2156
+ $_tyr3yk5jfuw8q47.each(unselectedCells, $_fl1deelhjfuw8qax.remove);
2157
+ fillInGaps(list, house, stats, isSelected);
2158
+ clean(table, stats);
2159
+ return table;
2160
+ };
2161
+ var $_bbpooak9jfuw8q4m = { extract: extract };
2162
+
2163
+ var clone$1 = function (original, deep) {
2164
+ return $_xbeoqkkjfuw8q73.fromDom(original.dom().cloneNode(deep));
2165
+ };
2166
+ var shallow = function (original) {
2167
+ return clone$1(original, false);
2168
+ };
2169
+ var deep = function (original) {
2170
+ return clone$1(original, true);
2171
+ };
2172
+ var shallowAs = function (original, tag) {
2173
+ var nu = $_xbeoqkkjfuw8q73.fromTag(tag);
2174
+ var attributes = $_3q82t2l5jfuw8q93.clone(original);
2175
+ $_3q82t2l5jfuw8q93.setAll(nu, attributes);
2176
+ return nu;
2177
+ };
2178
+ var copy$1 = function (original, tag) {
2179
+ var nu = shallowAs(original, tag);
2180
+ var cloneChildren = $_s8scrkmjfuw8q7a.children(deep(original));
2181
+ $_9zaoqflijfuw8qb0.append(nu, cloneChildren);
2182
+ return nu;
2183
+ };
2184
+ var mutate = function (original, tag) {
2185
+ var nu = shallowAs(original, tag);
2186
+ $_fatuxylgjfuw8qav.before(original, nu);
2187
+ var children = $_s8scrkmjfuw8q7a.children(original);
2188
+ $_9zaoqflijfuw8qb0.append(nu, children);
2189
+ $_fl1deelhjfuw8qax.remove(original);
2190
+ return nu;
2191
+ };
2192
+ var $_ddvp06lkjfuw8qbt = {
2193
+ shallow: shallow,
2194
+ shallowAs: shallowAs,
2195
+ deep: deep,
2196
+ copy: copy$1,
2197
+ mutate: mutate
2198
+ };
2199
+
2200
+ function NodeValue (is, name) {
2201
+ var get = function (element) {
2202
+ if (!is(element))
2203
+ throw new Error('Can only get ' + name + ' value of a ' + name + ' node');
2204
+ return getOption(element).getOr('');
2205
+ };
2206
+ var getOptionIE10 = function (element) {
2207
+ try {
2208
+ return getOptionSafe(element);
2209
+ } catch (e) {
2210
+ return Option.none();
2211
+ }
2212
+ };
2213
+ var getOptionSafe = function (element) {
2214
+ return is(element) ? Option.from(element.dom().nodeValue) : Option.none();
2215
+ };
2216
+ var browser = $_fqgee0ktjfuw8q83.detect().browser;
2217
+ var getOption = browser.isIE() && browser.version.major === 10 ? getOptionIE10 : getOptionSafe;
2218
+ var set = function (element, value) {
2219
+ if (!is(element))
2220
+ throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');
2221
+ element.dom().nodeValue = value;
2222
+ };
2223
+ return {
2224
+ get: get,
2225
+ getOption: getOption,
2226
+ set: set
2227
+ };
2228
+ }
2229
+
2230
+ var api = NodeValue($_a8gk30l6jfuw8q9c.isText, 'text');
2231
+ var get$2 = function (element) {
2232
+ return api.get(element);
2233
+ };
2234
+ var getOption = function (element) {
2235
+ return api.getOption(element);
2236
+ };
2237
+ var set$2 = function (element, value) {
2238
+ api.set(element, value);
2239
+ };
2240
+ var $_6j8y7blnjfuw8qc3 = {
2241
+ get: get$2,
2242
+ getOption: getOption,
2243
+ set: set$2
2244
+ };
2245
+
2246
+ var getEnd = function (element) {
2247
+ return $_a8gk30l6jfuw8q9c.name(element) === 'img' ? 1 : $_6j8y7blnjfuw8qc3.getOption(element).fold(function () {
2248
+ return $_s8scrkmjfuw8q7a.children(element).length;
2249
+ }, function (v) {
2250
+ return v.length;
2251
+ });
2252
+ };
2253
+ var isEnd = function (element, offset) {
2254
+ return getEnd(element) === offset;
2255
+ };
2256
+ var isStart = function (element, offset) {
2257
+ return offset === 0;
2258
+ };
2259
+ var NBSP = '\xA0';
2260
+ var isTextNodeWithCursorPosition = function (el) {
2261
+ return $_6j8y7blnjfuw8qc3.getOption(el).filter(function (text) {
2262
+ return text.trim().length !== 0 || text.indexOf(NBSP) > -1;
2263
+ }).isSome();
2264
+ };
2265
+ var elementsWithCursorPosition = [
2266
+ 'img',
2267
+ 'br'
2268
+ ];
2269
+ var isCursorPosition = function (elem) {
2270
+ var hasCursorPosition = isTextNodeWithCursorPosition(elem);
2271
+ return hasCursorPosition || $_tyr3yk5jfuw8q47.contains(elementsWithCursorPosition, $_a8gk30l6jfuw8q9c.name(elem));
2272
+ };
2273
+ var $_6vfowrlmjfuw8qbz = {
2274
+ getEnd: getEnd,
2275
+ isEnd: isEnd,
2276
+ isStart: isStart,
2277
+ isCursorPosition: isCursorPosition
2278
+ };
2279
+
2280
+ var first$3 = function (element) {
2281
+ return $_11ympzlbjfuw8q9n.descendant(element, $_6vfowrlmjfuw8qbz.isCursorPosition);
2282
+ };
2283
+ var last$2 = function (element) {
2284
+ return descendantRtl(element, $_6vfowrlmjfuw8qbz.isCursorPosition);
2285
+ };
2286
+ var descendantRtl = function (scope, predicate) {
2287
+ var descend = function (element) {
2288
+ var children = $_s8scrkmjfuw8q7a.children(element);
2289
+ for (var i = children.length - 1; i >= 0; i--) {
2290
+ var child = children[i];
2291
+ if (predicate(child))
2292
+ return Option.some(child);
2293
+ var res = descend(child);
2294
+ if (res.isSome())
2295
+ return res;
2296
+ }
2297
+ return Option.none();
2298
+ };
2299
+ return descend(scope);
2300
+ };
2301
+ var $_ejrzj4lljfuw8qbw = {
2302
+ first: first$3,
2303
+ last: last$2
2304
+ };
2305
+
2306
+ var cell$1 = function () {
2307
+ var td = $_xbeoqkkjfuw8q73.fromTag('td');
2308
+ $_fatuxylgjfuw8qav.append(td, $_xbeoqkkjfuw8q73.fromTag('br'));
2309
+ return td;
2310
+ };
2311
+ var replace = function (cell, tag, attrs) {
2312
+ var replica = $_ddvp06lkjfuw8qbt.copy(cell, tag);
2313
+ $_11yiupkajfuw8q5c.each(attrs, function (v, k) {
2314
+ if (v === null)
2315
+ $_3q82t2l5jfuw8q93.remove(replica, k);
2316
+ else
2317
+ $_3q82t2l5jfuw8q93.set(replica, k, v);
2318
+ });
2319
+ return replica;
2320
+ };
2321
+ var pasteReplace = function (cellContent) {
2322
+ return cellContent;
2323
+ };
2324
+ var newRow = function (doc) {
2325
+ return function () {
2326
+ return $_xbeoqkkjfuw8q73.fromTag('tr', doc.dom());
2327
+ };
2328
+ };
2329
+ var cloneFormats = function (oldCell, newCell, formats) {
2330
+ var first = $_ejrzj4lljfuw8qbw.first(oldCell);
2331
+ return first.map(function (firstText) {
2332
+ var formatSelector = formats.join(',');
2333
+ var parents = $_6c9d0hl7jfuw8q9d.ancestors(firstText, formatSelector, function (element) {
2334
+ return $_e8rn66kojfuw8q7n.eq(element, oldCell);
2335
+ });
2336
+ return $_tyr3yk5jfuw8q47.foldr(parents, function (last, parent) {
2337
+ var clonedFormat = $_ddvp06lkjfuw8qbt.shallow(parent);
2338
+ $_fatuxylgjfuw8qav.append(last, clonedFormat);
2339
+ return clonedFormat;
2340
+ }, newCell);
2341
+ }).getOr(newCell);
2342
+ };
2343
+ var cellOperations = function (mutate, doc, formatsToClone) {
2344
+ var newCell = function (prev) {
2345
+ var doc = $_s8scrkmjfuw8q7a.owner(prev.element());
2346
+ var td = $_xbeoqkkjfuw8q73.fromTag($_a8gk30l6jfuw8q9c.name(prev.element()), doc.dom());
2347
+ var formats = formatsToClone.getOr([
2348
+ 'strong',
2349
+ 'em',
2350
+ 'b',
2351
+ 'i',
2352
+ 'span',
2353
+ 'font',
2354
+ 'h1',
2355
+ 'h2',
2356
+ 'h3',
2357
+ 'h4',
2358
+ 'h5',
2359
+ 'h6',
2360
+ 'p',
2361
+ 'div'
2362
+ ]);
2363
+ var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;
2364
+ $_fatuxylgjfuw8qav.append(lastNode, $_xbeoqkkjfuw8q73.fromTag('br'));
2365
+ $_bfod2hlejfuw8qac.copy(prev.element(), td);
2366
+ $_bfod2hlejfuw8qac.remove(td, 'height');
2367
+ if (prev.colspan() !== 1)
2368
+ $_bfod2hlejfuw8qac.remove(prev.element(), 'width');
2369
+ mutate(prev.element(), td);
2370
+ return td;
2371
+ };
2372
+ return {
2373
+ row: newRow(doc),
2374
+ cell: newCell,
2375
+ replace: replace,
2376
+ gap: cell$1
2377
+ };
2378
+ };
2379
+ var paste = function (doc) {
2380
+ return {
2381
+ row: newRow(doc),
2382
+ cell: cell$1,
2383
+ replace: pasteReplace,
2384
+ gap: cell$1
2385
+ };
2386
+ };
2387
+ var $_5ohg1eljjfuw8qb4 = {
2388
+ cellOperations: cellOperations,
2389
+ paste: paste
2390
+ };
2391
+
2392
+ var fromHtml$1 = function (html, scope) {
2393
+ var doc = scope || document;
2394
+ var div = doc.createElement('div');
2395
+ div.innerHTML = html;
2396
+ return $_s8scrkmjfuw8q7a.children($_xbeoqkkjfuw8q73.fromDom(div));
2397
+ };
2398
+ var fromTags = function (tags, scope) {
2399
+ return $_tyr3yk5jfuw8q47.map(tags, function (x) {
2400
+ return $_xbeoqkkjfuw8q73.fromTag(x, scope);
2401
+ });
2402
+ };
2403
+ var fromText$1 = function (texts, scope) {
2404
+ return $_tyr3yk5jfuw8q47.map(texts, function (x) {
2405
+ return $_xbeoqkkjfuw8q73.fromText(x, scope);
2406
+ });
2407
+ };
2408
+ var fromDom$1 = function (nodes) {
2409
+ return $_tyr3yk5jfuw8q47.map(nodes, $_xbeoqkkjfuw8q73.fromDom);
2410
+ };
2411
+ var $_du13u9lpjfuw8qce = {
2412
+ fromHtml: fromHtml$1,
2413
+ fromTags: fromTags,
2414
+ fromText: fromText$1,
2415
+ fromDom: fromDom$1
2416
+ };
2417
+
2418
+ var TagBoundaries = [
2419
+ 'body',
2420
+ 'p',
2421
+ 'div',
2422
+ 'article',
2423
+ 'aside',
2424
+ 'figcaption',
2425
+ 'figure',
2426
+ 'footer',
2427
+ 'header',
2428
+ 'nav',
2429
+ 'section',
2430
+ 'ol',
2431
+ 'ul',
2432
+ 'li',
2433
+ 'table',
2434
+ 'thead',
2435
+ 'tbody',
2436
+ 'tfoot',
2437
+ 'caption',
2438
+ 'tr',
2439
+ 'td',
2440
+ 'th',
2441
+ 'h1',
2442
+ 'h2',
2443
+ 'h3',
2444
+ 'h4',
2445
+ 'h5',
2446
+ 'h6',
2447
+ 'blockquote',
2448
+ 'pre',
2449
+ 'address'
2450
+ ];
2451
+
2452
+ function DomUniverse () {
2453
+ var clone = function (element) {
2454
+ return $_xbeoqkkjfuw8q73.fromDom(element.dom().cloneNode(false));
2455
+ };
2456
+ var isBoundary = function (element) {
2457
+ if (!$_a8gk30l6jfuw8q9c.isElement(element))
2458
+ return false;
2459
+ if ($_a8gk30l6jfuw8q9c.name(element) === 'body')
2460
+ return true;
2461
+ return $_tyr3yk5jfuw8q47.contains(TagBoundaries, $_a8gk30l6jfuw8q9c.name(element));
2462
+ };
2463
+ var isEmptyTag = function (element) {
2464
+ if (!$_a8gk30l6jfuw8q9c.isElement(element))
2465
+ return false;
2466
+ return $_tyr3yk5jfuw8q47.contains([
2467
+ 'br',
2468
+ 'img',
2469
+ 'hr',
2470
+ 'input'
2471
+ ], $_a8gk30l6jfuw8q9c.name(element));
2472
+ };
2473
+ var comparePosition = function (element, other) {
2474
+ return element.dom().compareDocumentPosition(other.dom());
2475
+ };
2476
+ var copyAttributesTo = function (source, destination) {
2477
+ var as = $_3q82t2l5jfuw8q93.clone(source);
2478
+ $_3q82t2l5jfuw8q93.setAll(destination, as);
2479
+ };
2480
+ return {
2481
+ up: $_20nfr6k7jfuw8q4g.constant({
2482
+ selector: $_8wdrbmlajfuw8q9m.ancestor,
2483
+ closest: $_8wdrbmlajfuw8q9m.closest,
2484
+ predicate: $_11ympzlbjfuw8q9n.ancestor,
2485
+ all: $_s8scrkmjfuw8q7a.parents
2486
+ }),
2487
+ down: $_20nfr6k7jfuw8q4g.constant({
2488
+ selector: $_6c9d0hl7jfuw8q9d.descendants,
2489
+ predicate: $_4d3nfbl8jfuw8q9f.descendants
2490
+ }),
2491
+ styles: $_20nfr6k7jfuw8q4g.constant({
2492
+ get: $_bfod2hlejfuw8qac.get,
2493
+ getRaw: $_bfod2hlejfuw8qac.getRaw,
2494
+ set: $_bfod2hlejfuw8qac.set,
2495
+ remove: $_bfod2hlejfuw8qac.remove
2496
+ }),
2497
+ attrs: $_20nfr6k7jfuw8q4g.constant({
2498
+ get: $_3q82t2l5jfuw8q93.get,
2499
+ set: $_3q82t2l5jfuw8q93.set,
2500
+ remove: $_3q82t2l5jfuw8q93.remove,
2501
+ copyTo: copyAttributesTo
2502
+ }),
2503
+ insert: $_20nfr6k7jfuw8q4g.constant({
2504
+ before: $_fatuxylgjfuw8qav.before,
2505
+ after: $_fatuxylgjfuw8qav.after,
2506
+ afterAll: $_9zaoqflijfuw8qb0.after,
2507
+ append: $_fatuxylgjfuw8qav.append,
2508
+ appendAll: $_9zaoqflijfuw8qb0.append,
2509
+ prepend: $_fatuxylgjfuw8qav.prepend,
2510
+ wrap: $_fatuxylgjfuw8qav.wrap
2511
+ }),
2512
+ remove: $_20nfr6k7jfuw8q4g.constant({
2513
+ unwrap: $_fl1deelhjfuw8qax.unwrap,
2514
+ remove: $_fl1deelhjfuw8qax.remove
2515
+ }),
2516
+ create: $_20nfr6k7jfuw8q4g.constant({
2517
+ nu: $_xbeoqkkjfuw8q73.fromTag,
2518
+ clone: clone,
2519
+ text: $_xbeoqkkjfuw8q73.fromText
2520
+ }),
2521
+ query: $_20nfr6k7jfuw8q4g.constant({
2522
+ comparePosition: comparePosition,
2523
+ prevSibling: $_s8scrkmjfuw8q7a.prevSibling,
2524
+ nextSibling: $_s8scrkmjfuw8q7a.nextSibling
2525
+ }),
2526
+ property: $_20nfr6k7jfuw8q4g.constant({
2527
+ children: $_s8scrkmjfuw8q7a.children,
2528
+ name: $_a8gk30l6jfuw8q9c.name,
2529
+ parent: $_s8scrkmjfuw8q7a.parent,
2530
+ isText: $_a8gk30l6jfuw8q9c.isText,
2531
+ isComment: $_a8gk30l6jfuw8q9c.isComment,
2532
+ isElement: $_a8gk30l6jfuw8q9c.isElement,
2533
+ getText: $_6j8y7blnjfuw8qc3.get,
2534
+ setText: $_6j8y7blnjfuw8qc3.set,
2535
+ isBoundary: isBoundary,
2536
+ isEmptyTag: isEmptyTag
2537
+ }),
2538
+ eq: $_e8rn66kojfuw8q7n.eq,
2539
+ is: $_e8rn66kojfuw8q7n.is
2540
+ };
2541
+ }
2542
+
2543
+ var leftRight = $_5now9kbjfuw8q5e.immutable('left', 'right');
2544
+ var bisect = function (universe, parent, child) {
2545
+ var children = universe.property().children(parent);
2546
+ var index = $_tyr3yk5jfuw8q47.findIndex(children, $_20nfr6k7jfuw8q4g.curry(universe.eq, child));
2547
+ return index.map(function (ind) {
2548
+ return {
2549
+ before: $_20nfr6k7jfuw8q4g.constant(children.slice(0, ind)),
2550
+ after: $_20nfr6k7jfuw8q4g.constant(children.slice(ind + 1))
2551
+ };
2552
+ });
2553
+ };
2554
+ var breakToRight = function (universe, parent, child) {
2555
+ return bisect(universe, parent, child).map(function (parts) {
2556
+ var second = universe.create().clone(parent);
2557
+ universe.insert().appendAll(second, parts.after());
2558
+ universe.insert().after(parent, second);
2559
+ return leftRight(parent, second);
2560
+ });
2561
+ };
2562
+ var breakToLeft = function (universe, parent, child) {
2563
+ return bisect(universe, parent, child).map(function (parts) {
2564
+ var prior = universe.create().clone(parent);
2565
+ universe.insert().appendAll(prior, parts.before().concat([child]));
2566
+ universe.insert().appendAll(parent, parts.after());
2567
+ universe.insert().before(parent, prior);
2568
+ return leftRight(prior, parent);
2569
+ });
2570
+ };
2571
+ var breakPath = function (universe, item, isTop, breaker) {
2572
+ var result = $_5now9kbjfuw8q5e.immutable('first', 'second', 'splits');
2573
+ var next = function (child, group, splits) {
2574
+ var fallback = result(child, Option.none(), splits);
2575
+ if (isTop(child))
2576
+ return result(child, group, splits);
2577
+ else {
2578
+ return universe.property().parent(child).bind(function (parent) {
2579
+ return breaker(universe, parent, child).map(function (breakage) {
2580
+ var extra = [{
2581
+ first: breakage.left,
2582
+ second: breakage.right
2583
+ }];
2584
+ var nextChild = isTop(parent) ? parent : breakage.left();
2585
+ return next(nextChild, Option.some(breakage.right()), splits.concat(extra));
2586
+ }).getOr(fallback);
2587
+ });
2588
+ }
2589
+ };
2590
+ return next(item, Option.none(), []);
2591
+ };
2592
+ var $_fx4c5ilyjfuw8qf8 = {
2593
+ breakToLeft: breakToLeft,
2594
+ breakToRight: breakToRight,
2595
+ breakPath: breakPath
2596
+ };
2597
+
2598
+ var all$3 = function (universe, look, elements, f) {
2599
+ var head = elements[0];
2600
+ var tail = elements.slice(1);
2601
+ return f(universe, look, head, tail);
2602
+ };
2603
+ var oneAll = function (universe, look, elements) {
2604
+ return elements.length > 0 ? all$3(universe, look, elements, unsafeOne) : Option.none();
2605
+ };
2606
+ var unsafeOne = function (universe, look, head, tail) {
2607
+ var start = look(universe, head);
2608
+ return $_tyr3yk5jfuw8q47.foldr(tail, function (b, a) {
2609
+ var current = look(universe, a);
2610
+ return commonElement(universe, b, current);
2611
+ }, start);
2612
+ };
2613
+ var commonElement = function (universe, start, end) {
2614
+ return start.bind(function (s) {
2615
+ return end.filter($_20nfr6k7jfuw8q4g.curry(universe.eq, s));
2616
+ });
2617
+ };
2618
+ var $_40yiy6lzjfuw8qfi = { oneAll: oneAll };
2619
+
2620
+ var eq$1 = function (universe, item) {
2621
+ return $_20nfr6k7jfuw8q4g.curry(universe.eq, item);
2622
+ };
2623
+ var unsafeSubset = function (universe, common, ps1, ps2) {
2624
+ var children = universe.property().children(common);
2625
+ if (universe.eq(common, ps1[0]))
2626
+ return Option.some([ps1[0]]);
2627
+ if (universe.eq(common, ps2[0]))
2628
+ return Option.some([ps2[0]]);
2629
+ var finder = function (ps) {
2630
+ var topDown = $_tyr3yk5jfuw8q47.reverse(ps);
2631
+ var index = $_tyr3yk5jfuw8q47.findIndex(topDown, eq$1(universe, common)).getOr(-1);
2632
+ var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];
2633
+ return $_tyr3yk5jfuw8q47.findIndex(children, eq$1(universe, item));
2634
+ };
2635
+ var startIndex = finder(ps1);
2636
+ var endIndex = finder(ps2);
2637
+ return startIndex.bind(function (sIndex) {
2638
+ return endIndex.map(function (eIndex) {
2639
+ var first = Math.min(sIndex, eIndex);
2640
+ var last = Math.max(sIndex, eIndex);
2641
+ return children.slice(first, last + 1);
2642
+ });
2643
+ });
2644
+ };
2645
+ var ancestors$2 = function (universe, start, end, _isRoot) {
2646
+ var isRoot = _isRoot !== undefined ? _isRoot : $_20nfr6k7jfuw8q4g.constant(false);
2647
+ var ps1 = [start].concat(universe.up().all(start));
2648
+ var ps2 = [end].concat(universe.up().all(end));
2649
+ var prune = function (path) {
2650
+ var index = $_tyr3yk5jfuw8q47.findIndex(path, isRoot);
2651
+ return index.fold(function () {
2652
+ return path;
2653
+ }, function (ind) {
2654
+ return path.slice(0, ind + 1);
2655
+ });
2656
+ };
2657
+ var pruned1 = prune(ps1);
2658
+ var pruned2 = prune(ps2);
2659
+ var shared = $_tyr3yk5jfuw8q47.find(pruned1, function (x) {
2660
+ return $_tyr3yk5jfuw8q47.exists(pruned2, eq$1(universe, x));
2661
+ });
2662
+ return {
2663
+ firstpath: $_20nfr6k7jfuw8q4g.constant(pruned1),
2664
+ secondpath: $_20nfr6k7jfuw8q4g.constant(pruned2),
2665
+ shared: $_20nfr6k7jfuw8q4g.constant(shared)
2666
+ };
2667
+ };
2668
+ var subset = function (universe, start, end) {
2669
+ var ancs = ancestors$2(universe, start, end);
2670
+ return ancs.shared().bind(function (shared) {
2671
+ return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());
2672
+ });
2673
+ };
2674
+ var $_7m4t8jm0jfuw8qfq = {
2675
+ subset: subset,
2676
+ ancestors: ancestors$2
2677
+ };
2678
+
2679
+ var sharedOne = function (universe, look, elements) {
2680
+ return $_40yiy6lzjfuw8qfi.oneAll(universe, look, elements);
2681
+ };
2682
+ var subset$1 = function (universe, start, finish) {
2683
+ return $_7m4t8jm0jfuw8qfq.subset(universe, start, finish);
2684
+ };
2685
+ var ancestors$3 = function (universe, start, finish, _isRoot) {
2686
+ return $_7m4t8jm0jfuw8qfq.ancestors(universe, start, finish, _isRoot);
2687
+ };
2688
+ var breakToLeft$1 = function (universe, parent, child) {
2689
+ return $_fx4c5ilyjfuw8qf8.breakToLeft(universe, parent, child);
2690
+ };
2691
+ var breakToRight$1 = function (universe, parent, child) {
2692
+ return $_fx4c5ilyjfuw8qf8.breakToRight(universe, parent, child);
2693
+ };
2694
+ var breakPath$1 = function (universe, child, isTop, breaker) {
2695
+ return $_fx4c5ilyjfuw8qf8.breakPath(universe, child, isTop, breaker);
2696
+ };
2697
+ var $_23lsh2lxjfuw8qf5 = {
2698
+ sharedOne: sharedOne,
2699
+ subset: subset$1,
2700
+ ancestors: ancestors$3,
2701
+ breakToLeft: breakToLeft$1,
2702
+ breakToRight: breakToRight$1,
2703
+ breakPath: breakPath$1
2704
+ };
2705
+
2706
+ var universe = DomUniverse();
2707
+ var sharedOne$1 = function (look, elements) {
2708
+ return $_23lsh2lxjfuw8qf5.sharedOne(universe, function (universe, element) {
2709
+ return look(element);
2710
+ }, elements);
2711
+ };
2712
+ var subset$2 = function (start, finish) {
2713
+ return $_23lsh2lxjfuw8qf5.subset(universe, start, finish);
2714
+ };
2715
+ var ancestors$4 = function (start, finish, _isRoot) {
2716
+ return $_23lsh2lxjfuw8qf5.ancestors(universe, start, finish, _isRoot);
2717
+ };
2718
+ var breakToLeft$2 = function (parent, child) {
2719
+ return $_23lsh2lxjfuw8qf5.breakToLeft(universe, parent, child);
2720
+ };
2721
+ var breakToRight$2 = function (parent, child) {
2722
+ return $_23lsh2lxjfuw8qf5.breakToRight(universe, parent, child);
2723
+ };
2724
+ var breakPath$2 = function (child, isTop, breaker) {
2725
+ return $_23lsh2lxjfuw8qf5.breakPath(universe, child, isTop, function (u, p, c) {
2726
+ return breaker(p, c);
2727
+ });
2728
+ };
2729
+ var $_583a2nlujfuw8qdw = {
2730
+ sharedOne: sharedOne$1,
2731
+ subset: subset$2,
2732
+ ancestors: ancestors$4,
2733
+ breakToLeft: breakToLeft$2,
2734
+ breakToRight: breakToRight$2,
2735
+ breakPath: breakPath$2
2736
+ };
2737
+
2738
+ var inSelection = function (bounds, detail) {
2739
+ var leftEdge = detail.column();
2740
+ var rightEdge = detail.column() + detail.colspan() - 1;
2741
+ var topEdge = detail.row();
2742
+ var bottomEdge = detail.row() + detail.rowspan() - 1;
2743
+ return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());
2744
+ };
2745
+ var isWithin = function (bounds, detail) {
2746
+ return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();
2747
+ };
2748
+ var isRectangular = function (warehouse, bounds) {
2749
+ var isRect = true;
2750
+ var detailIsWithin = $_20nfr6k7jfuw8q4g.curry(isWithin, bounds);
2751
+ for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {
2752
+ for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {
2753
+ isRect = isRect && $_2ge24cldjfuw8qa3.getAt(warehouse, i, j).exists(detailIsWithin);
2754
+ }
2755
+ }
2756
+ return isRect ? Option.some(bounds) : Option.none();
2757
+ };
2758
+ var $_6nqrbhm3jfuw8qgd = {
2759
+ inSelection: inSelection,
2760
+ isWithin: isWithin,
2761
+ isRectangular: isRectangular
2762
+ };
2763
+
2764
+ var getBounds = function (detailA, detailB) {
2765
+ return $_ce5pyrkgjfuw8q5v.bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));
2766
+ };
2767
+ var getAnyBox = function (warehouse, startCell, finishCell) {
2768
+ var startCoords = $_2ge24cldjfuw8qa3.findItem(warehouse, startCell, $_e8rn66kojfuw8q7n.eq);
2769
+ var finishCoords = $_2ge24cldjfuw8qa3.findItem(warehouse, finishCell, $_e8rn66kojfuw8q7n.eq);
2770
+ return startCoords.bind(function (sc) {
2771
+ return finishCoords.map(function (fc) {
2772
+ return getBounds(sc, fc);
2773
+ });
2774
+ });
2775
+ };
2776
+ var getBox = function (warehouse, startCell, finishCell) {
2777
+ return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {
2778
+ return $_6nqrbhm3jfuw8qgd.isRectangular(warehouse, bounds);
2779
+ });
2780
+ };
2781
+ var $_ceqdh6m4jfuw8qgj = {
2782
+ getAnyBox: getAnyBox,
2783
+ getBox: getBox
2784
+ };
2785
+
2786
+ var moveBy = function (warehouse, cell, row, column) {
2787
+ return $_2ge24cldjfuw8qa3.findItem(warehouse, cell, $_e8rn66kojfuw8q7n.eq).bind(function (detail) {
2788
+ var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();
2789
+ var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();
2790
+ var dest = $_2ge24cldjfuw8qa3.getAt(warehouse, startRow + row, startCol + column);
2791
+ return dest.map(function (d) {
2792
+ return d.element();
2793
+ });
2794
+ });
2795
+ };
2796
+ var intercepts = function (warehouse, start, finish) {
2797
+ return $_ceqdh6m4jfuw8qgj.getAnyBox(warehouse, start, finish).map(function (bounds) {
2798
+ var inside = $_2ge24cldjfuw8qa3.filterItems(warehouse, $_20nfr6k7jfuw8q4g.curry($_6nqrbhm3jfuw8qgd.inSelection, bounds));
2799
+ return $_tyr3yk5jfuw8q47.map(inside, function (detail) {
2800
+ return detail.element();
2801
+ });
2802
+ });
2803
+ };
2804
+ var parentCell = function (warehouse, innerCell) {
2805
+ var isContainedBy = function (c1, c2) {
2806
+ return $_e8rn66kojfuw8q7n.contains(c2, c1);
2807
+ };
2808
+ return $_2ge24cldjfuw8qa3.findItem(warehouse, innerCell, isContainedBy).bind(function (detail) {
2809
+ return detail.element();
2810
+ });
2811
+ };
2812
+ var $_fej9f9m2jfuw8qg6 = {
2813
+ moveBy: moveBy,
2814
+ intercepts: intercepts,
2815
+ parentCell: parentCell
2816
+ };
2817
+
2818
+ var moveBy$1 = function (cell, deltaRow, deltaColumn) {
2819
+ return $_aqhz9okhjfuw8q5y.table(cell).bind(function (table) {
2820
+ var warehouse = getWarehouse(table);
2821
+ return $_fej9f9m2jfuw8qg6.moveBy(warehouse, cell, deltaRow, deltaColumn);
2822
+ });
2823
+ };
2824
+ var intercepts$1 = function (table, first, last) {
2825
+ var warehouse = getWarehouse(table);
2826
+ return $_fej9f9m2jfuw8qg6.intercepts(warehouse, first, last);
2827
+ };
2828
+ var nestedIntercepts = function (table, first, firstTable, last, lastTable) {
2829
+ var warehouse = getWarehouse(table);
2830
+ var startCell = $_e8rn66kojfuw8q7n.eq(table, firstTable) ? first : $_fej9f9m2jfuw8qg6.parentCell(warehouse, first);
2831
+ var lastCell = $_e8rn66kojfuw8q7n.eq(table, lastTable) ? last : $_fej9f9m2jfuw8qg6.parentCell(warehouse, last);
2832
+ return $_fej9f9m2jfuw8qg6.intercepts(warehouse, startCell, lastCell);
2833
+ };
2834
+ var getBox$1 = function (table, first, last) {
2835
+ var warehouse = getWarehouse(table);
2836
+ return $_ceqdh6m4jfuw8qgj.getBox(warehouse, first, last);
2837
+ };
2838
+ var getWarehouse = function (table) {
2839
+ var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
2840
+ return $_2ge24cldjfuw8qa3.generate(list);
2841
+ };
2842
+ var $_53tlnwm1jfuw8qg2 = {
2843
+ moveBy: moveBy$1,
2844
+ intercepts: intercepts$1,
2845
+ nestedIntercepts: nestedIntercepts,
2846
+ getBox: getBox$1
2847
+ };
2848
+
2849
+ var lookupTable = function (container, isRoot) {
2850
+ return $_8wdrbmlajfuw8q9m.ancestor(container, 'table');
2851
+ };
2852
+ var identified = $_5now9kbjfuw8q5e.immutableBag([
2853
+ 'boxes',
2854
+ 'start',
2855
+ 'finish'
2856
+ ], []);
2857
+ var identify = function (start, finish, isRoot) {
2858
+ var getIsRoot = function (rootTable) {
2859
+ return function (element) {
2860
+ return isRoot(element) || $_e8rn66kojfuw8q7n.eq(element, rootTable);
2861
+ };
2862
+ };
2863
+ if ($_e8rn66kojfuw8q7n.eq(start, finish)) {
2864
+ return Option.some(identified({
2865
+ boxes: Option.some([start]),
2866
+ start: start,
2867
+ finish: finish
2868
+ }));
2869
+ } else {
2870
+ return lookupTable(start, isRoot).bind(function (startTable) {
2871
+ return lookupTable(finish, isRoot).bind(function (finishTable) {
2872
+ if ($_e8rn66kojfuw8q7n.eq(startTable, finishTable)) {
2873
+ return Option.some(identified({
2874
+ boxes: $_53tlnwm1jfuw8qg2.intercepts(startTable, start, finish),
2875
+ start: start,
2876
+ finish: finish
2877
+ }));
2878
+ } else if ($_e8rn66kojfuw8q7n.contains(startTable, finishTable)) {
2879
+ var ancestorCells = $_6c9d0hl7jfuw8q9d.ancestors(finish, 'td,th', getIsRoot(startTable));
2880
+ var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;
2881
+ return Option.some(identified({
2882
+ boxes: $_53tlnwm1jfuw8qg2.nestedIntercepts(startTable, start, startTable, finish, finishTable),
2883
+ start: start,
2884
+ finish: finishCell
2885
+ }));
2886
+ } else if ($_e8rn66kojfuw8q7n.contains(finishTable, startTable)) {
2887
+ var ancestorCells = $_6c9d0hl7jfuw8q9d.ancestors(start, 'td,th', getIsRoot(finishTable));
2888
+ var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;
2889
+ return Option.some(identified({
2890
+ boxes: $_53tlnwm1jfuw8qg2.nestedIntercepts(finishTable, start, startTable, finish, finishTable),
2891
+ start: start,
2892
+ finish: startCell
2893
+ }));
2894
+ } else {
2895
+ return $_583a2nlujfuw8qdw.ancestors(start, finish).shared().bind(function (lca) {
2896
+ return $_8wdrbmlajfuw8q9m.closest(lca, 'table', isRoot).bind(function (lcaTable) {
2897
+ var finishAncestorCells = $_6c9d0hl7jfuw8q9d.ancestors(finish, 'td,th', getIsRoot(lcaTable));
2898
+ var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;
2899
+ var startAncestorCells = $_6c9d0hl7jfuw8q9d.ancestors(start, 'td,th', getIsRoot(lcaTable));
2900
+ var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;
2901
+ return Option.some(identified({
2902
+ boxes: $_53tlnwm1jfuw8qg2.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),
2903
+ start: startCell,
2904
+ finish: finishCell
2905
+ }));
2906
+ });
2907
+ });
2908
+ }
2909
+ });
2910
+ });
2911
+ }
2912
+ };
2913
+ var retrieve = function (container, selector) {
2914
+ var sels = $_6c9d0hl7jfuw8q9d.descendants(container, selector);
2915
+ return sels.length > 0 ? Option.some(sels) : Option.none();
2916
+ };
2917
+ var getLast = function (boxes, lastSelectedSelector) {
2918
+ return $_tyr3yk5jfuw8q47.find(boxes, function (box) {
2919
+ return $_enn9uikjjfuw8q6w.is(box, lastSelectedSelector);
2920
+ });
2921
+ };
2922
+ var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {
2923
+ return $_8wdrbmlajfuw8q9m.descendant(container, firstSelectedSelector).bind(function (first) {
2924
+ return $_8wdrbmlajfuw8q9m.descendant(container, lastSelectedSelector).bind(function (last) {
2925
+ return $_583a2nlujfuw8qdw.sharedOne(lookupTable, [
2926
+ first,
2927
+ last
2928
+ ]).map(function (tbl) {
2929
+ return {
2930
+ first: $_20nfr6k7jfuw8q4g.constant(first),
2931
+ last: $_20nfr6k7jfuw8q4g.constant(last),
2932
+ table: $_20nfr6k7jfuw8q4g.constant(tbl)
2933
+ };
2934
+ });
2935
+ });
2936
+ });
2937
+ };
2938
+ var expandTo = function (finish, firstSelectedSelector) {
2939
+ return $_8wdrbmlajfuw8q9m.ancestor(finish, 'table').bind(function (table) {
2940
+ return $_8wdrbmlajfuw8q9m.descendant(table, firstSelectedSelector).bind(function (start) {
2941
+ return identify(start, finish).bind(function (identified) {
2942
+ return identified.boxes().map(function (boxes) {
2943
+ return {
2944
+ boxes: $_20nfr6k7jfuw8q4g.constant(boxes),
2945
+ start: $_20nfr6k7jfuw8q4g.constant(identified.start()),
2946
+ finish: $_20nfr6k7jfuw8q4g.constant(identified.finish())
2947
+ };
2948
+ });
2949
+ });
2950
+ });
2951
+ });
2952
+ };
2953
+ var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {
2954
+ return getLast(boxes, lastSelectedSelector).bind(function (last) {
2955
+ return $_53tlnwm1jfuw8qg2.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {
2956
+ return expandTo(finish, firstSelectedSelector);
2957
+ });
2958
+ });
2959
+ };
2960
+ var $_dpd405ltjfuw8qd8 = {
2961
+ identify: identify,
2962
+ retrieve: retrieve,
2963
+ shiftSelection: shiftSelection,
2964
+ getEdges: getEdges
2965
+ };
2966
+
2967
+ var retrieve$1 = function (container, selector) {
2968
+ return $_dpd405ltjfuw8qd8.retrieve(container, selector);
2969
+ };
2970
+ var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {
2971
+ return $_dpd405ltjfuw8qd8.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {
2972
+ var isRoot = function (ancestor) {
2973
+ return $_e8rn66kojfuw8q7n.eq(container, ancestor);
2974
+ };
2975
+ var firstAncestor = $_8wdrbmlajfuw8q9m.ancestor(edges.first(), 'thead,tfoot,tbody,table', isRoot);
2976
+ var lastAncestor = $_8wdrbmlajfuw8q9m.ancestor(edges.last(), 'thead,tfoot,tbody,table', isRoot);
2977
+ return firstAncestor.bind(function (fA) {
2978
+ return lastAncestor.bind(function (lA) {
2979
+ return $_e8rn66kojfuw8q7n.eq(fA, lA) ? $_53tlnwm1jfuw8qg2.getBox(edges.table(), edges.first(), edges.last()) : Option.none();
2980
+ });
2981
+ });
2982
+ });
2983
+ };
2984
+ var $_1mynollsjfuw8qcy = {
2985
+ retrieve: retrieve$1,
2986
+ retrieveBox: retrieveBox
2987
+ };
2988
+
2989
+ var selected = 'data-mce-selected';
2990
+ var selectedSelector = 'td[' + selected + '],th[' + selected + ']';
2991
+ var attributeSelector = '[' + selected + ']';
2992
+ var firstSelected = 'data-mce-first-selected';
2993
+ var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';
2994
+ var lastSelected = 'data-mce-last-selected';
2995
+ var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';
2996
+ var $_f8tr2nm5jfuw8qgp = {
2997
+ selected: $_20nfr6k7jfuw8q4g.constant(selected),
2998
+ selectedSelector: $_20nfr6k7jfuw8q4g.constant(selectedSelector),
2999
+ attributeSelector: $_20nfr6k7jfuw8q4g.constant(attributeSelector),
3000
+ firstSelected: $_20nfr6k7jfuw8q4g.constant(firstSelected),
3001
+ firstSelectedSelector: $_20nfr6k7jfuw8q4g.constant(firstSelectedSelector),
3002
+ lastSelected: $_20nfr6k7jfuw8q4g.constant(lastSelected),
3003
+ lastSelectedSelector: $_20nfr6k7jfuw8q4g.constant(lastSelectedSelector)
3004
+ };
3005
+
3006
+ var generate$1 = function (cases) {
3007
+ if (!$_g6mvnrk8jfuw8q4k.isArray(cases)) {
3008
+ throw new Error('cases must be an array');
3009
+ }
3010
+ if (cases.length === 0) {
3011
+ throw new Error('there must be at least one case');
3012
+ }
3013
+ var constructors = [];
3014
+ var adt = {};
3015
+ $_tyr3yk5jfuw8q47.each(cases, function (acase, count) {
3016
+ var keys = $_11yiupkajfuw8q5c.keys(acase);
3017
+ if (keys.length !== 1) {
3018
+ throw new Error('one and only one name per case');
3019
+ }
3020
+ var key = keys[0];
3021
+ var value = acase[key];
3022
+ if (adt[key] !== undefined) {
3023
+ throw new Error('duplicate key detected:' + key);
3024
+ } else if (key === 'cata') {
3025
+ throw new Error('cannot have a case named cata (sorry)');
3026
+ } else if (!$_g6mvnrk8jfuw8q4k.isArray(value)) {
3027
+ throw new Error('case arguments must be an array');
3028
+ }
3029
+ constructors.push(key);
3030
+ adt[key] = function () {
3031
+ var argLength = arguments.length;
3032
+ if (argLength !== value.length) {
3033
+ throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);
3034
+ }
3035
+ var args = new Array(argLength);
3036
+ for (var i = 0; i < args.length; i++)
3037
+ args[i] = arguments[i];
3038
+ var match = function (branches) {
3039
+ var branchKeys = $_11yiupkajfuw8q5c.keys(branches);
3040
+ if (constructors.length !== branchKeys.length) {
3041
+ throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(','));
3042
+ }
3043
+ var allReqd = $_tyr3yk5jfuw8q47.forall(constructors, function (reqKey) {
3044
+ return $_tyr3yk5jfuw8q47.contains(branchKeys, reqKey);
3045
+ });
3046
+ if (!allReqd)
3047
+ throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', '));
3048
+ return branches[key].apply(null, args);
3049
+ };
3050
+ return {
3051
+ fold: function () {
3052
+ if (arguments.length !== cases.length) {
3053
+ throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);
3054
+ }
3055
+ var target = arguments[count];
3056
+ return target.apply(null, args);
3057
+ },
3058
+ match: match,
3059
+ log: function (label) {
3060
+ console.log(label, {
3061
+ constructors: constructors,
3062
+ constructor: key,
3063
+ params: args
3064
+ });
3065
+ }
3066
+ };
3067
+ };
3068
+ });
3069
+ return adt;
3070
+ };
3071
+ var $_7sbzam7jfuw8qgu = { generate: generate$1 };
3072
+
3073
+ var type$1 = $_7sbzam7jfuw8qgu.generate([
3074
+ { none: [] },
3075
+ { multiple: ['elements'] },
3076
+ { single: ['selection'] }
3077
+ ]);
3078
+ var cata = function (subject, onNone, onMultiple, onSingle) {
3079
+ return subject.fold(onNone, onMultiple, onSingle);
3080
+ };
3081
+ var $_cx0pwam6jfuw8qgr = {
3082
+ cata: cata,
3083
+ none: type$1.none,
3084
+ multiple: type$1.multiple,
3085
+ single: type$1.single
3086
+ };
3087
+
3088
+ var selection = function (cell, selections) {
3089
+ return $_cx0pwam6jfuw8qgr.cata(selections.get(), $_20nfr6k7jfuw8q4g.constant([]), $_20nfr6k7jfuw8q4g.identity, $_20nfr6k7jfuw8q4g.constant([cell]));
3090
+ };
3091
+ var unmergable = function (cell, selections) {
3092
+ var hasSpan = function (elem) {
3093
+ return $_3q82t2l5jfuw8q93.has(elem, 'rowspan') && parseInt($_3q82t2l5jfuw8q93.get(elem, 'rowspan'), 10) > 1 || $_3q82t2l5jfuw8q93.has(elem, 'colspan') && parseInt($_3q82t2l5jfuw8q93.get(elem, 'colspan'), 10) > 1;
3094
+ };
3095
+ var candidates = selection(cell, selections);
3096
+ return candidates.length > 0 && $_tyr3yk5jfuw8q47.forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();
3097
+ };
3098
+ var mergable = function (table, selections) {
3099
+ return $_cx0pwam6jfuw8qgr.cata(selections.get(), Option.none, function (cells, _env) {
3100
+ if (cells.length === 0) {
3101
+ return Option.none();
3102
+ }
3103
+ return $_1mynollsjfuw8qcy.retrieveBox(table, $_f8tr2nm5jfuw8qgp.firstSelectedSelector(), $_f8tr2nm5jfuw8qgp.lastSelectedSelector()).bind(function (bounds) {
3104
+ return cells.length > 1 ? Option.some({
3105
+ bounds: $_20nfr6k7jfuw8q4g.constant(bounds),
3106
+ cells: $_20nfr6k7jfuw8q4g.constant(cells)
3107
+ }) : Option.none();
3108
+ });
3109
+ }, Option.none);
3110
+ };
3111
+ var $_3xucu8lrjfuw8qco = {
3112
+ mergable: mergable,
3113
+ unmergable: unmergable,
3114
+ selection: selection
3115
+ };
3116
+
3117
+ var noMenu = function (cell) {
3118
+ return {
3119
+ element: $_20nfr6k7jfuw8q4g.constant(cell),
3120
+ mergable: Option.none,
3121
+ unmergable: Option.none,
3122
+ selection: $_20nfr6k7jfuw8q4g.constant([cell])
3123
+ };
3124
+ };
3125
+ var forMenu = function (selections, table, cell) {
3126
+ return {
3127
+ element: $_20nfr6k7jfuw8q4g.constant(cell),
3128
+ mergable: $_20nfr6k7jfuw8q4g.constant($_3xucu8lrjfuw8qco.mergable(table, selections)),
3129
+ unmergable: $_20nfr6k7jfuw8q4g.constant($_3xucu8lrjfuw8qco.unmergable(cell, selections)),
3130
+ selection: $_20nfr6k7jfuw8q4g.constant($_3xucu8lrjfuw8qco.selection(cell, selections))
3131
+ };
3132
+ };
3133
+ var notCell$1 = function (element) {
3134
+ return noMenu(element);
3135
+ };
3136
+ var paste$1 = $_5now9kbjfuw8q5e.immutable('element', 'clipboard', 'generators');
3137
+ var pasteRows = function (selections, table, cell, clipboard, generators) {
3138
+ return {
3139
+ element: $_20nfr6k7jfuw8q4g.constant(cell),
3140
+ mergable: Option.none,
3141
+ unmergable: Option.none,
3142
+ selection: $_20nfr6k7jfuw8q4g.constant($_3xucu8lrjfuw8qco.selection(cell, selections)),
3143
+ clipboard: $_20nfr6k7jfuw8q4g.constant(clipboard),
3144
+ generators: $_20nfr6k7jfuw8q4g.constant(generators)
3145
+ };
3146
+ };
3147
+ var $_5b7h1hlqjfuw8qci = {
3148
+ noMenu: noMenu,
3149
+ forMenu: forMenu,
3150
+ notCell: notCell$1,
3151
+ paste: paste$1,
3152
+ pasteRows: pasteRows
3153
+ };
3154
+
3155
+ var extractSelected = function (cells) {
3156
+ return $_aqhz9okhjfuw8q5y.table(cells[0]).map($_ddvp06lkjfuw8qbt.deep).map(function (replica) {
3157
+ return [$_bbpooak9jfuw8q4m.extract(replica, $_f8tr2nm5jfuw8qgp.attributeSelector())];
3158
+ });
3159
+ };
3160
+ var serializeElement = function (editor, elm) {
3161
+ return editor.selection.serializer.serialize(elm.dom(), {});
3162
+ };
3163
+ var registerEvents = function (editor, selections, actions, cellSelection) {
3164
+ editor.on('BeforeGetContent', function (e) {
3165
+ var multiCellContext = function (cells) {
3166
+ e.preventDefault();
3167
+ extractSelected(cells).each(function (elements) {
3168
+ e.content = $_tyr3yk5jfuw8q47.map(elements, function (elm) {
3169
+ return serializeElement(editor, elm);
3170
+ }).join('');
3171
+ });
3172
+ };
3173
+ if (e.selection === true) {
3174
+ $_cx0pwam6jfuw8qgr.cata(selections.get(), $_20nfr6k7jfuw8q4g.noop, multiCellContext, $_20nfr6k7jfuw8q4g.noop);
3175
+ }
3176
+ });
3177
+ editor.on('BeforeSetContent', function (e) {
3178
+ if (e.selection === true && e.paste === true) {
3179
+ var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
3180
+ cellOpt.each(function (domCell) {
3181
+ var cell = $_xbeoqkkjfuw8q73.fromDom(domCell);
3182
+ var table = $_aqhz9okhjfuw8q5y.table(cell);
3183
+ table.bind(function (table) {
3184
+ var elements = $_tyr3yk5jfuw8q47.filter($_du13u9lpjfuw8qce.fromHtml(e.content), function (content) {
3185
+ return $_a8gk30l6jfuw8q9c.name(content) !== 'meta';
3186
+ });
3187
+ if (elements.length === 1 && $_a8gk30l6jfuw8q9c.name(elements[0]) === 'table') {
3188
+ e.preventDefault();
3189
+ var doc = $_xbeoqkkjfuw8q73.fromDom(editor.getDoc());
3190
+ var generators = $_5ohg1eljjfuw8qb4.paste(doc);
3191
+ var targets = $_5b7h1hlqjfuw8qci.paste(cell, elements[0], generators);
3192
+ actions.pasteCells(table, targets).each(function (rng) {
3193
+ editor.selection.setRng(rng);
3194
+ editor.focus();
3195
+ cellSelection.clear(table);
3196
+ });
3197
+ }
3198
+ });
3199
+ });
3200
+ }
3201
+ });
3202
+ };
3203
+ var $_3y1hv8k4jfuw8q3l = { registerEvents: registerEvents };
3204
+
3205
+ function Dimension (name, getOffset) {
3206
+ var set = function (element, h) {
3207
+ if (!$_g6mvnrk8jfuw8q4k.isNumber(h) && !h.match(/^[0-9]+$/))
3208
+ throw name + '.set accepts only positive integer values. Value was ' + h;
3209
+ var dom = element.dom();
3210
+ if ($_b75qp5lfjfuw8qau.isSupported(dom))
3211
+ dom.style[name] = h + 'px';
3212
+ };
3213
+ var get = function (element) {
3214
+ var r = getOffset(element);
3215
+ if (r <= 0 || r === null) {
3216
+ var css = $_bfod2hlejfuw8qac.get(element, name);
3217
+ return parseFloat(css) || 0;
3218
+ }
3219
+ return r;
3220
+ };
3221
+ var getOuter = get;
3222
+ var aggregate = function (element, properties) {
3223
+ return $_tyr3yk5jfuw8q47.foldl(properties, function (acc, property) {
3224
+ var val = $_bfod2hlejfuw8qac.get(element, property);
3225
+ var value = val === undefined ? 0 : parseInt(val, 10);
3226
+ return isNaN(value) ? acc : acc + value;
3227
+ }, 0);
3228
+ };
3229
+ var max = function (element, value, properties) {
3230
+ var cumulativeInclusions = aggregate(element, properties);
3231
+ var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;
3232
+ return absoluteMax;
3233
+ };
3234
+ return {
3235
+ set: set,
3236
+ get: get,
3237
+ getOuter: getOuter,
3238
+ aggregate: aggregate,
3239
+ max: max
3240
+ };
3241
+ }
3242
+
3243
+ var api$1 = Dimension('height', function (element) {
3244
+ return $_atd1tul9jfuw8q9i.inBody(element) ? element.dom().getBoundingClientRect().height : element.dom().offsetHeight;
3245
+ });
3246
+ var set$3 = function (element, h) {
3247
+ api$1.set(element, h);
3248
+ };
3249
+ var get$3 = function (element) {
3250
+ return api$1.get(element);
3251
+ };
3252
+ var getOuter = function (element) {
3253
+ return api$1.getOuter(element);
3254
+ };
3255
+ var setMax = function (element, value) {
3256
+ var inclusions = [
3257
+ 'margin-top',
3258
+ 'border-top-width',
3259
+ 'padding-top',
3260
+ 'padding-bottom',
3261
+ 'border-bottom-width',
3262
+ 'margin-bottom'
3263
+ ];
3264
+ var absMax = api$1.max(element, value, inclusions);
3265
+ $_bfod2hlejfuw8qac.set(element, 'max-height', absMax + 'px');
3266
+ };
3267
+ var $_cymdhgmcjfuw8qif = {
3268
+ set: set$3,
3269
+ get: get$3,
3270
+ getOuter: getOuter,
3271
+ setMax: setMax
3272
+ };
3273
+
3274
+ var api$2 = Dimension('width', function (element) {
3275
+ return element.dom().offsetWidth;
3276
+ });
3277
+ var set$4 = function (element, h) {
3278
+ api$2.set(element, h);
3279
+ };
3280
+ var get$4 = function (element) {
3281
+ return api$2.get(element);
3282
+ };
3283
+ var getOuter$1 = function (element) {
3284
+ return api$2.getOuter(element);
3285
+ };
3286
+ var setMax$1 = function (element, value) {
3287
+ var inclusions = [
3288
+ 'margin-left',
3289
+ 'border-left-width',
3290
+ 'padding-left',
3291
+ 'padding-right',
3292
+ 'border-right-width',
3293
+ 'margin-right'
3294
+ ];
3295
+ var absMax = api$2.max(element, value, inclusions);
3296
+ $_bfod2hlejfuw8qac.set(element, 'max-width', absMax + 'px');
3297
+ };
3298
+ var $_fj252lmejfuw8qin = {
3299
+ set: set$4,
3300
+ get: get$4,
3301
+ getOuter: getOuter$1,
3302
+ setMax: setMax$1
3303
+ };
3304
+
3305
+ var platform = $_fqgee0ktjfuw8q83.detect();
3306
+ var needManualCalc = function () {
3307
+ return platform.browser.isIE() || platform.browser.isEdge();
3308
+ };
3309
+ var toNumber = function (px, fallback) {
3310
+ var num = parseFloat(px);
3311
+ return isNaN(num) ? fallback : num;
3312
+ };
3313
+ var getProp = function (elm, name, fallback) {
3314
+ return toNumber($_bfod2hlejfuw8qac.get(elm, name), fallback);
3315
+ };
3316
+ var getCalculatedHeight = function (cell) {
3317
+ var paddingTop = getProp(cell, 'padding-top', 0);
3318
+ var paddingBottom = getProp(cell, 'padding-bottom', 0);
3319
+ var borderTop = getProp(cell, 'border-top-width', 0);
3320
+ var borderBottom = getProp(cell, 'border-bottom-width', 0);
3321
+ var height = cell.dom().getBoundingClientRect().height;
3322
+ var boxSizing = $_bfod2hlejfuw8qac.get(cell, 'box-sizing');
3323
+ var borders = borderTop + borderBottom;
3324
+ return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;
3325
+ };
3326
+ var getWidth = function (cell) {
3327
+ return getProp(cell, 'width', $_fj252lmejfuw8qin.get(cell));
3328
+ };
3329
+ var getHeight = function (cell) {
3330
+ return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', $_cymdhgmcjfuw8qif.get(cell));
3331
+ };
3332
+ var $_ddwgqpmbjfuw8qi6 = {
3333
+ getWidth: getWidth,
3334
+ getHeight: getHeight
3335
+ };
3336
+
3337
+ var genericSizeRegex = /(\d+(\.\d+)?)(\w|%)*/;
3338
+ var percentageBasedSizeRegex = /(\d+(\.\d+)?)%/;
3339
+ var pixelBasedSizeRegex = /(\d+(\.\d+)?)px|em/;
3340
+ var setPixelWidth = function (cell, amount) {
3341
+ $_bfod2hlejfuw8qac.set(cell, 'width', amount + 'px');
3342
+ };
3343
+ var setPercentageWidth = function (cell, amount) {
3344
+ $_bfod2hlejfuw8qac.set(cell, 'width', amount + '%');
3345
+ };
3346
+ var setHeight = function (cell, amount) {
3347
+ $_bfod2hlejfuw8qac.set(cell, 'height', amount + 'px');
3348
+ };
3349
+ var getHeightValue = function (cell) {
3350
+ return $_bfod2hlejfuw8qac.getRaw(cell, 'height').getOrThunk(function () {
3351
+ return $_ddwgqpmbjfuw8qi6.getHeight(cell) + 'px';
3352
+ });
3353
+ };
3354
+ var convert = function (cell, number, getter, setter) {
3355
+ var newSize = $_aqhz9okhjfuw8q5y.table(cell).map(function (table) {
3356
+ var total = getter(table);
3357
+ return Math.floor(number / 100 * total);
3358
+ }).getOr(number);
3359
+ setter(cell, newSize);
3360
+ return newSize;
3361
+ };
3362
+ var normalizePixelSize = function (value, cell, getter, setter) {
3363
+ var number = parseInt(value, 10);
3364
+ return $_ey09l9l2jfuw8q8y.endsWith(value, '%') && $_a8gk30l6jfuw8q9c.name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;
3365
+ };
3366
+ var getTotalHeight = function (cell) {
3367
+ var value = getHeightValue(cell);
3368
+ if (!value)
3369
+ return $_cymdhgmcjfuw8qif.get(cell);
3370
+ return normalizePixelSize(value, cell, $_cymdhgmcjfuw8qif.get, setHeight);
3371
+ };
3372
+ var get$5 = function (cell, type, f) {
3373
+ var v = f(cell);
3374
+ var span = getSpan(cell, type);
3375
+ return v / span;
3376
+ };
3377
+ var getSpan = function (cell, type) {
3378
+ return $_3q82t2l5jfuw8q93.has(cell, type) ? parseInt($_3q82t2l5jfuw8q93.get(cell, type), 10) : 1;
3379
+ };
3380
+ var getRawWidth = function (element) {
3381
+ var cssWidth = $_bfod2hlejfuw8qac.getRaw(element, 'width');
3382
+ return cssWidth.fold(function () {
3383
+ return Option.from($_3q82t2l5jfuw8q93.get(element, 'width'));
3384
+ }, function (width) {
3385
+ return Option.some(width);
3386
+ });
3387
+ };
3388
+ var normalizePercentageWidth = function (cellWidth, tableSize) {
3389
+ return cellWidth / tableSize.pixelWidth() * 100;
3390
+ };
3391
+ var choosePercentageSize = function (element, width, tableSize) {
3392
+ if (percentageBasedSizeRegex.test(width)) {
3393
+ var percentMatch = percentageBasedSizeRegex.exec(width);
3394
+ return parseFloat(percentMatch[1]);
3395
+ } else {
3396
+ var fallbackWidth = $_fj252lmejfuw8qin.get(element);
3397
+ var intWidth = parseInt(fallbackWidth, 10);
3398
+ return normalizePercentageWidth(intWidth, tableSize);
3399
+ }
3400
+ };
3401
+ var getPercentageWidth = function (cell, tableSize) {
3402
+ var width = getRawWidth(cell);
3403
+ return width.fold(function () {
3404
+ var width = $_fj252lmejfuw8qin.get(cell);
3405
+ var intWidth = parseInt(width, 10);
3406
+ return normalizePercentageWidth(intWidth, tableSize);
3407
+ }, function (width) {
3408
+ return choosePercentageSize(cell, width, tableSize);
3409
+ });
3410
+ };
3411
+ var normalizePixelWidth = function (cellWidth, tableSize) {
3412
+ return cellWidth / 100 * tableSize.pixelWidth();
3413
+ };
3414
+ var choosePixelSize = function (element, width, tableSize) {
3415
+ if (pixelBasedSizeRegex.test(width)) {
3416
+ var pixelMatch = pixelBasedSizeRegex.exec(width);
3417
+ return parseInt(pixelMatch[1], 10);
3418
+ } else if (percentageBasedSizeRegex.test(width)) {
3419
+ var percentMatch = percentageBasedSizeRegex.exec(width);
3420
+ var floatWidth = parseFloat(percentMatch[1]);
3421
+ return normalizePixelWidth(floatWidth, tableSize);
3422
+ } else {
3423
+ var fallbackWidth = $_fj252lmejfuw8qin.get(element);
3424
+ return parseInt(fallbackWidth, 10);
3425
+ }
3426
+ };
3427
+ var getPixelWidth = function (cell, tableSize) {
3428
+ var width = getRawWidth(cell);
3429
+ return width.fold(function () {
3430
+ var width = $_fj252lmejfuw8qin.get(cell);
3431
+ var intWidth = parseInt(width, 10);
3432
+ return intWidth;
3433
+ }, function (width) {
3434
+ return choosePixelSize(cell, width, tableSize);
3435
+ });
3436
+ };
3437
+ var getHeight$1 = function (cell) {
3438
+ return get$5(cell, 'rowspan', getTotalHeight);
3439
+ };
3440
+ var getGenericWidth = function (cell) {
3441
+ var width = getRawWidth(cell);
3442
+ return width.bind(function (width) {
3443
+ if (genericSizeRegex.test(width)) {
3444
+ var match = genericSizeRegex.exec(width);
3445
+ return Option.some({
3446
+ width: $_20nfr6k7jfuw8q4g.constant(match[1]),
3447
+ unit: $_20nfr6k7jfuw8q4g.constant(match[3])
3448
+ });
3449
+ } else {
3450
+ return Option.none();
3451
+ }
3452
+ });
3453
+ };
3454
+ var setGenericWidth = function (cell, amount, unit) {
3455
+ $_bfod2hlejfuw8qac.set(cell, 'width', amount + unit);
3456
+ };
3457
+ var $_by2skemajfuw8qhj = {
3458
+ percentageBasedSizeRegex: $_20nfr6k7jfuw8q4g.constant(percentageBasedSizeRegex),
3459
+ pixelBasedSizeRegex: $_20nfr6k7jfuw8q4g.constant(pixelBasedSizeRegex),
3460
+ setPixelWidth: setPixelWidth,
3461
+ setPercentageWidth: setPercentageWidth,
3462
+ setHeight: setHeight,
3463
+ getPixelWidth: getPixelWidth,
3464
+ getPercentageWidth: getPercentageWidth,
3465
+ getGenericWidth: getGenericWidth,
3466
+ setGenericWidth: setGenericWidth,
3467
+ getHeight: getHeight$1,
3468
+ getRawWidth: getRawWidth
3469
+ };
3470
+
3471
+ var halve = function (main, other) {
3472
+ var width = $_by2skemajfuw8qhj.getGenericWidth(main);
3473
+ width.each(function (width) {
3474
+ var newWidth = width.width() / 2;
3475
+ $_by2skemajfuw8qhj.setGenericWidth(main, newWidth, width.unit());
3476
+ $_by2skemajfuw8qhj.setGenericWidth(other, newWidth, width.unit());
3477
+ });
3478
+ };
3479
+ var $_57e49gm9jfuw8qhh = { halve: halve };
3480
+
3481
+ var attached = function (element, scope) {
3482
+ var doc = scope || $_xbeoqkkjfuw8q73.fromDom(document.documentElement);
3483
+ return $_11ympzlbjfuw8q9n.ancestor(element, $_20nfr6k7jfuw8q4g.curry($_e8rn66kojfuw8q7n.eq, doc)).isSome();
3484
+ };
3485
+ var windowOf = function (element) {
3486
+ var dom = element.dom();
3487
+ if (dom === dom.window)
3488
+ return element;
3489
+ return $_a8gk30l6jfuw8q9c.isDocument(element) ? dom.defaultView || dom.parentWindow : null;
3490
+ };
3491
+ var $_a9ygj4mjjfuw8qj6 = {
3492
+ attached: attached,
3493
+ windowOf: windowOf
3494
+ };
3495
+
3496
+ var r = function (left, top) {
3497
+ var translate = function (x, y) {
3498
+ return r(left + x, top + y);
3499
+ };
3500
+ return {
3501
+ left: $_20nfr6k7jfuw8q4g.constant(left),
3502
+ top: $_20nfr6k7jfuw8q4g.constant(top),
3503
+ translate: translate
3504
+ };
3505
+ };
3506
+
3507
+ var boxPosition = function (dom) {
3508
+ var box = dom.getBoundingClientRect();
3509
+ return r(box.left, box.top);
3510
+ };
3511
+ var firstDefinedOrZero = function (a, b) {
3512
+ return a !== undefined ? a : b !== undefined ? b : 0;
3513
+ };
3514
+ var absolute = function (element) {
3515
+ var doc = element.dom().ownerDocument;
3516
+ var body = doc.body;
3517
+ var win = $_a9ygj4mjjfuw8qj6.windowOf($_xbeoqkkjfuw8q73.fromDom(doc));
3518
+ var html = doc.documentElement;
3519
+ var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);
3520
+ var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);
3521
+ var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);
3522
+ var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);
3523
+ return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);
3524
+ };
3525
+ var relative = function (element) {
3526
+ var dom = element.dom();
3527
+ return r(dom.offsetLeft, dom.offsetTop);
3528
+ };
3529
+ var viewport = function (element) {
3530
+ var dom = element.dom();
3531
+ var doc = dom.ownerDocument;
3532
+ var body = doc.body;
3533
+ var html = $_xbeoqkkjfuw8q73.fromDom(doc.documentElement);
3534
+ if (body === dom)
3535
+ return r(body.offsetLeft, body.offsetTop);
3536
+ if (!$_a9ygj4mjjfuw8qj6.attached(element, html))
3537
+ return r(0, 0);
3538
+ return boxPosition(dom);
3539
+ };
3540
+ var $_hsvzlmijfuw8qj4 = {
3541
+ absolute: absolute,
3542
+ relative: relative,
3543
+ viewport: viewport
3544
+ };
3545
+
3546
+ var rowInfo = $_5now9kbjfuw8q5e.immutable('row', 'y');
3547
+ var colInfo = $_5now9kbjfuw8q5e.immutable('col', 'x');
3548
+ var rtlEdge = function (cell) {
3549
+ var pos = $_hsvzlmijfuw8qj4.absolute(cell);
3550
+ return pos.left() + $_fj252lmejfuw8qin.getOuter(cell);
3551
+ };
3552
+ var ltrEdge = function (cell) {
3553
+ return $_hsvzlmijfuw8qj4.absolute(cell).left();
3554
+ };
3555
+ var getLeftEdge = function (index, cell) {
3556
+ return colInfo(index, ltrEdge(cell));
3557
+ };
3558
+ var getRightEdge = function (index, cell) {
3559
+ return colInfo(index, rtlEdge(cell));
3560
+ };
3561
+ var getTop = function (cell) {
3562
+ return $_hsvzlmijfuw8qj4.absolute(cell).top();
3563
+ };
3564
+ var getTopEdge = function (index, cell) {
3565
+ return rowInfo(index, getTop(cell));
3566
+ };
3567
+ var getBottomEdge = function (index, cell) {
3568
+ return rowInfo(index, getTop(cell) + $_cymdhgmcjfuw8qif.getOuter(cell));
3569
+ };
3570
+ var findPositions = function (getInnerEdge, getOuterEdge, array) {
3571
+ if (array.length === 0)
3572
+ return [];
3573
+ var lines = $_tyr3yk5jfuw8q47.map(array.slice(1), function (cellOption, index) {
3574
+ return cellOption.map(function (cell) {
3575
+ return getInnerEdge(index, cell);
3576
+ });
3577
+ });
3578
+ var lastLine = array[array.length - 1].map(function (cell) {
3579
+ return getOuterEdge(array.length - 1, cell);
3580
+ });
3581
+ return lines.concat([lastLine]);
3582
+ };
3583
+ var negate = function (step, _table) {
3584
+ return -step;
3585
+ };
3586
+ var height = {
3587
+ delta: $_20nfr6k7jfuw8q4g.identity,
3588
+ positions: $_20nfr6k7jfuw8q4g.curry(findPositions, getTopEdge, getBottomEdge),
3589
+ edge: getTop
3590
+ };
3591
+ var ltr = {
3592
+ delta: $_20nfr6k7jfuw8q4g.identity,
3593
+ edge: ltrEdge,
3594
+ positions: $_20nfr6k7jfuw8q4g.curry(findPositions, getLeftEdge, getRightEdge)
3595
+ };
3596
+ var rtl = {
3597
+ delta: negate,
3598
+ edge: rtlEdge,
3599
+ positions: $_20nfr6k7jfuw8q4g.curry(findPositions, getRightEdge, getLeftEdge)
3600
+ };
3601
+ var $_16z2iamhjfuw8qir = {
3602
+ height: height,
3603
+ rtl: rtl,
3604
+ ltr: ltr
3605
+ };
3606
+
3607
+ var $_26mw5tmgjfuw8qiq = {
3608
+ ltr: $_16z2iamhjfuw8qir.ltr,
3609
+ rtl: $_16z2iamhjfuw8qir.rtl
3610
+ };
3611
+
3612
+ function TableDirection (directionAt) {
3613
+ var auto = function (table) {
3614
+ return directionAt(table).isRtl() ? $_26mw5tmgjfuw8qiq.rtl : $_26mw5tmgjfuw8qiq.ltr;
3615
+ };
3616
+ var delta = function (amount, table) {
3617
+ return auto(table).delta(amount, table);
3618
+ };
3619
+ var positions = function (cols, table) {
3620
+ return auto(table).positions(cols, table);
3621
+ };
3622
+ var edge = function (cell) {
3623
+ return auto(cell).edge(cell);
3624
+ };
3625
+ return {
3626
+ delta: delta,
3627
+ edge: edge,
3628
+ positions: positions
3629
+ };
3630
+ }
3631
+
3632
+ var getGridSize = function (table) {
3633
+ var input = $_dy3x0nkfjfuw8q5l.fromTable(table);
3634
+ var warehouse = $_2ge24cldjfuw8qa3.generate(input);
3635
+ return warehouse.grid();
3636
+ };
3637
+ var $_b452wimljfuw8qjd = { getGridSize: getGridSize };
3638
+
3639
+ var Cell = function (initial) {
3640
+ var value = initial;
3641
+ var get = function () {
3642
+ return value;
3643
+ };
3644
+ var set = function (v) {
3645
+ value = v;
3646
+ };
3647
+ var clone = function () {
3648
+ return Cell(get());
3649
+ };
3650
+ return {
3651
+ get: get,
3652
+ set: set,
3653
+ clone: clone
3654
+ };
3655
+ };
3656
+
3657
+ var base = function (handleUnsupported, required) {
3658
+ return baseWith(handleUnsupported, required, {
3659
+ validate: $_g6mvnrk8jfuw8q4k.isFunction,
3660
+ label: 'function'
3661
+ });
3662
+ };
3663
+ var baseWith = function (handleUnsupported, required, pred) {
3664
+ if (required.length === 0)
3665
+ throw new Error('You must specify at least one required field.');
3666
+ $_2j2nzkkejfuw8q5j.validateStrArr('required', required);
3667
+ $_2j2nzkkejfuw8q5j.checkDupes(required);
3668
+ return function (obj) {
3669
+ var keys = $_11yiupkajfuw8q5c.keys(obj);
3670
+ var allReqd = $_tyr3yk5jfuw8q47.forall(required, function (req) {
3671
+ return $_tyr3yk5jfuw8q47.contains(keys, req);
3672
+ });
3673
+ if (!allReqd)
3674
+ $_2j2nzkkejfuw8q5j.reqMessage(required, keys);
3675
+ handleUnsupported(required, keys);
3676
+ var invalidKeys = $_tyr3yk5jfuw8q47.filter(required, function (key) {
3677
+ return !pred.validate(obj[key], key);
3678
+ });
3679
+ if (invalidKeys.length > 0)
3680
+ $_2j2nzkkejfuw8q5j.invalidTypeMessage(invalidKeys, pred.label);
3681
+ return obj;
3682
+ };
3683
+ };
3684
+ var handleExact = function (required, keys) {
3685
+ var unsupported = $_tyr3yk5jfuw8q47.filter(keys, function (key) {
3686
+ return !$_tyr3yk5jfuw8q47.contains(required, key);
3687
+ });
3688
+ if (unsupported.length > 0)
3689
+ $_2j2nzkkejfuw8q5j.unsuppMessage(unsupported);
3690
+ };
3691
+ var allowExtra = $_20nfr6k7jfuw8q4g.noop;
3692
+ var $_7z97w5mpjfuw8qkk = {
3693
+ exactly: $_20nfr6k7jfuw8q4g.curry(base, handleExact),
3694
+ ensure: $_20nfr6k7jfuw8q4g.curry(base, allowExtra),
3695
+ ensureWith: $_20nfr6k7jfuw8q4g.curry(baseWith, allowExtra)
3696
+ };
3697
+
3698
+ var elementToData = function (element) {
3699
+ var colspan = $_3q82t2l5jfuw8q93.has(element, 'colspan') ? parseInt($_3q82t2l5jfuw8q93.get(element, 'colspan'), 10) : 1;
3700
+ var rowspan = $_3q82t2l5jfuw8q93.has(element, 'rowspan') ? parseInt($_3q82t2l5jfuw8q93.get(element, 'rowspan'), 10) : 1;
3701
+ return {
3702
+ element: $_20nfr6k7jfuw8q4g.constant(element),
3703
+ colspan: $_20nfr6k7jfuw8q4g.constant(colspan),
3704
+ rowspan: $_20nfr6k7jfuw8q4g.constant(rowspan)
3705
+ };
3706
+ };
3707
+ var modification = function (generators, _toData) {
3708
+ contract(generators);
3709
+ var position = Cell(Option.none());
3710
+ var toData = _toData !== undefined ? _toData : elementToData;
3711
+ var nu = function (data) {
3712
+ return generators.cell(data);
3713
+ };
3714
+ var nuFrom = function (element) {
3715
+ var data = toData(element);
3716
+ return nu(data);
3717
+ };
3718
+ var add = function (element) {
3719
+ var replacement = nuFrom(element);
3720
+ if (position.get().isNone())
3721
+ position.set(Option.some(replacement));
3722
+ recent = Option.some({
3723
+ item: element,
3724
+ replacement: replacement
3725
+ });
3726
+ return replacement;
3727
+ };
3728
+ var recent = Option.none();
3729
+ var getOrInit = function (element, comparator) {
3730
+ return recent.fold(function () {
3731
+ return add(element);
3732
+ }, function (p) {
3733
+ return comparator(element, p.item) ? p.replacement : add(element);
3734
+ });
3735
+ };
3736
+ return {
3737
+ getOrInit: getOrInit,
3738
+ cursor: position.get
3739
+ };
3740
+ };
3741
+ var transform = function (scope, tag) {
3742
+ return function (generators) {
3743
+ var position = Cell(Option.none());
3744
+ contract(generators);
3745
+ var list = [];
3746
+ var find = function (element, comparator) {
3747
+ return $_tyr3yk5jfuw8q47.find(list, function (x) {
3748
+ return comparator(x.item, element);
3749
+ });
3750
+ };
3751
+ var makeNew = function (element) {
3752
+ var cell = generators.replace(element, tag, { scope: scope });
3753
+ list.push({
3754
+ item: element,
3755
+ sub: cell
3756
+ });
3757
+ if (position.get().isNone())
3758
+ position.set(Option.some(cell));
3759
+ return cell;
3760
+ };
3761
+ var replaceOrInit = function (element, comparator) {
3762
+ return find(element, comparator).fold(function () {
3763
+ return makeNew(element);
3764
+ }, function (p) {
3765
+ return comparator(element, p.item) ? p.sub : makeNew(element);
3766
+ });
3767
+ };
3768
+ return {
3769
+ replaceOrInit: replaceOrInit,
3770
+ cursor: position.get
3771
+ };
3772
+ };
3773
+ };
3774
+ var merging = function (generators) {
3775
+ contract(generators);
3776
+ var position = Cell(Option.none());
3777
+ var combine = function (cell) {
3778
+ if (position.get().isNone())
3779
+ position.set(Option.some(cell));
3780
+ return function () {
3781
+ var raw = generators.cell({
3782
+ element: $_20nfr6k7jfuw8q4g.constant(cell),
3783
+ colspan: $_20nfr6k7jfuw8q4g.constant(1),
3784
+ rowspan: $_20nfr6k7jfuw8q4g.constant(1)
3785
+ });
3786
+ $_bfod2hlejfuw8qac.remove(raw, 'width');
3787
+ $_bfod2hlejfuw8qac.remove(cell, 'width');
3788
+ return raw;
3789
+ };
3790
+ };
3791
+ return {
3792
+ combine: combine,
3793
+ cursor: position.get
3794
+ };
3795
+ };
3796
+ var contract = $_7z97w5mpjfuw8qkk.exactly([
3797
+ 'cell',
3798
+ 'row',
3799
+ 'replace',
3800
+ 'gap'
3801
+ ]);
3802
+ var $_eoocrvmnjfuw8qk1 = {
3803
+ modification: modification,
3804
+ transform: transform,
3805
+ merging: merging
3806
+ };
3807
+
3808
+ var blockList = [
3809
+ 'body',
3810
+ 'p',
3811
+ 'div',
3812
+ 'article',
3813
+ 'aside',
3814
+ 'figcaption',
3815
+ 'figure',
3816
+ 'footer',
3817
+ 'header',
3818
+ 'nav',
3819
+ 'section',
3820
+ 'ol',
3821
+ 'ul',
3822
+ 'table',
3823
+ 'thead',
3824
+ 'tfoot',
3825
+ 'tbody',
3826
+ 'caption',
3827
+ 'tr',
3828
+ 'td',
3829
+ 'th',
3830
+ 'h1',
3831
+ 'h2',
3832
+ 'h3',
3833
+ 'h4',
3834
+ 'h5',
3835
+ 'h6',
3836
+ 'blockquote',
3837
+ 'pre',
3838
+ 'address'
3839
+ ];
3840
+ var isList = function (universe, item) {
3841
+ var tagName = universe.property().name(item);
3842
+ return $_tyr3yk5jfuw8q47.contains([
3843
+ 'ol',
3844
+ 'ul'
3845
+ ], tagName);
3846
+ };
3847
+ var isBlock = function (universe, item) {
3848
+ var tagName = universe.property().name(item);
3849
+ return $_tyr3yk5jfuw8q47.contains(blockList, tagName);
3850
+ };
3851
+ var isFormatting = function (universe, item) {
3852
+ var tagName = universe.property().name(item);
3853
+ return $_tyr3yk5jfuw8q47.contains([
3854
+ 'address',
3855
+ 'pre',
3856
+ 'p',
3857
+ 'h1',
3858
+ 'h2',
3859
+ 'h3',
3860
+ 'h4',
3861
+ 'h5',
3862
+ 'h6'
3863
+ ], tagName);
3864
+ };
3865
+ var isHeading = function (universe, item) {
3866
+ var tagName = universe.property().name(item);
3867
+ return $_tyr3yk5jfuw8q47.contains([
3868
+ 'h1',
3869
+ 'h2',
3870
+ 'h3',
3871
+ 'h4',
3872
+ 'h5',
3873
+ 'h6'
3874
+ ], tagName);
3875
+ };
3876
+ var isContainer = function (universe, item) {
3877
+ return $_tyr3yk5jfuw8q47.contains([
3878
+ 'div',
3879
+ 'li',
3880
+ 'td',
3881
+ 'th',
3882
+ 'blockquote',
3883
+ 'body',
3884
+ 'caption'
3885
+ ], universe.property().name(item));
3886
+ };
3887
+ var isEmptyTag = function (universe, item) {
3888
+ return $_tyr3yk5jfuw8q47.contains([
3889
+ 'br',
3890
+ 'img',
3891
+ 'hr',
3892
+ 'input'
3893
+ ], universe.property().name(item));
3894
+ };
3895
+ var isFrame = function (universe, item) {
3896
+ return universe.property().name(item) === 'iframe';
3897
+ };
3898
+ var isInline = function (universe, item) {
3899
+ return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';
3900
+ };
3901
+ var $_325i5bmsjfuw8qle = {
3902
+ isBlock: isBlock,
3903
+ isList: isList,
3904
+ isFormatting: isFormatting,
3905
+ isHeading: isHeading,
3906
+ isContainer: isContainer,
3907
+ isEmptyTag: isEmptyTag,
3908
+ isFrame: isFrame,
3909
+ isInline: isInline
3910
+ };
3911
+
3912
+ var universe$1 = DomUniverse();
3913
+ var isBlock$1 = function (element) {
3914
+ return $_325i5bmsjfuw8qle.isBlock(universe$1, element);
3915
+ };
3916
+ var isList$1 = function (element) {
3917
+ return $_325i5bmsjfuw8qle.isList(universe$1, element);
3918
+ };
3919
+ var isFormatting$1 = function (element) {
3920
+ return $_325i5bmsjfuw8qle.isFormatting(universe$1, element);
3921
+ };
3922
+ var isHeading$1 = function (element) {
3923
+ return $_325i5bmsjfuw8qle.isHeading(universe$1, element);
3924
+ };
3925
+ var isContainer$1 = function (element) {
3926
+ return $_325i5bmsjfuw8qle.isContainer(universe$1, element);
3927
+ };
3928
+ var isEmptyTag$1 = function (element) {
3929
+ return $_325i5bmsjfuw8qle.isEmptyTag(universe$1, element);
3930
+ };
3931
+ var isFrame$1 = function (element) {
3932
+ return $_325i5bmsjfuw8qle.isFrame(universe$1, element);
3933
+ };
3934
+ var isInline$1 = function (element) {
3935
+ return $_325i5bmsjfuw8qle.isInline(universe$1, element);
3936
+ };
3937
+ var $_d9tdqtmrjfuw8ql9 = {
3938
+ isBlock: isBlock$1,
3939
+ isList: isList$1,
3940
+ isFormatting: isFormatting$1,
3941
+ isHeading: isHeading$1,
3942
+ isContainer: isContainer$1,
3943
+ isEmptyTag: isEmptyTag$1,
3944
+ isFrame: isFrame$1,
3945
+ isInline: isInline$1
3946
+ };
3947
+
3948
+ var merge = function (cells) {
3949
+ var isBr = function (el) {
3950
+ return $_a8gk30l6jfuw8q9c.name(el) === 'br';
3951
+ };
3952
+ var advancedBr = function (children) {
3953
+ return $_tyr3yk5jfuw8q47.forall(children, function (c) {
3954
+ return isBr(c) || $_a8gk30l6jfuw8q9c.isText(c) && $_6j8y7blnjfuw8qc3.get(c).trim().length === 0;
3955
+ });
3956
+ };
3957
+ var isListItem = function (el) {
3958
+ return $_a8gk30l6jfuw8q9c.name(el) === 'li' || $_11ympzlbjfuw8q9n.ancestor(el, $_d9tdqtmrjfuw8ql9.isList).isSome();
3959
+ };
3960
+ var siblingIsBlock = function (el) {
3961
+ return $_s8scrkmjfuw8q7a.nextSibling(el).map(function (rightSibling) {
3962
+ if ($_d9tdqtmrjfuw8ql9.isBlock(rightSibling))
3963
+ return true;
3964
+ if ($_d9tdqtmrjfuw8ql9.isEmptyTag(rightSibling)) {
3965
+ return $_a8gk30l6jfuw8q9c.name(rightSibling) === 'img' ? false : true;
3966
+ }
3967
+ }).getOr(false);
3968
+ };
3969
+ var markCell = function (cell) {
3970
+ return $_ejrzj4lljfuw8qbw.last(cell).bind(function (rightEdge) {
3971
+ var rightSiblingIsBlock = siblingIsBlock(rightEdge);
3972
+ return $_s8scrkmjfuw8q7a.parent(rightEdge).map(function (parent) {
3973
+ return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || $_d9tdqtmrjfuw8ql9.isBlock(parent) && !$_e8rn66kojfuw8q7n.eq(cell, parent) ? [] : [$_xbeoqkkjfuw8q73.fromTag('br')];
3974
+ });
3975
+ }).getOr([]);
3976
+ };
3977
+ var markContent = function () {
3978
+ var content = $_tyr3yk5jfuw8q47.bind(cells, function (cell) {
3979
+ var children = $_s8scrkmjfuw8q7a.children(cell);
3980
+ return advancedBr(children) ? [] : children.concat(markCell(cell));
3981
+ });
3982
+ return content.length === 0 ? [$_xbeoqkkjfuw8q73.fromTag('br')] : content;
3983
+ };
3984
+ var contents = markContent();
3985
+ $_fl1deelhjfuw8qax.empty(cells[0]);
3986
+ $_9zaoqflijfuw8qb0.append(cells[0], contents);
3987
+ };
3988
+ var $_ancl40mqjfuw8qkm = { merge: merge };
3989
+
3990
+ var shallow$1 = function (old, nu) {
3991
+ return nu;
3992
+ };
3993
+ var deep$1 = function (old, nu) {
3994
+ var bothObjects = $_g6mvnrk8jfuw8q4k.isObject(old) && $_g6mvnrk8jfuw8q4k.isObject(nu);
3995
+ return bothObjects ? deepMerge(old, nu) : nu;
3996
+ };
3997
+ var baseMerge = function (merger) {
3998
+ return function () {
3999
+ var objects = new Array(arguments.length);
4000
+ for (var i = 0; i < objects.length; i++)
4001
+ objects[i] = arguments[i];
4002
+ if (objects.length === 0)
4003
+ throw new Error('Can\'t merge zero objects');
4004
+ var ret = {};
4005
+ for (var j = 0; j < objects.length; j++) {
4006
+ var curObject = objects[j];
4007
+ for (var key in curObject)
4008
+ if (curObject.hasOwnProperty(key)) {
4009
+ ret[key] = merger(ret[key], curObject[key]);
4010
+ }
4011
+ }
4012
+ return ret;
4013
+ };
4014
+ };
4015
+ var deepMerge = baseMerge(deep$1);
4016
+ var merge$1 = baseMerge(shallow$1);
4017
+ var $_91sgzmujfuw8qm5 = {
4018
+ deepMerge: deepMerge,
4019
+ merge: merge$1
4020
+ };
4021
+
4022
+ var cat = function (arr) {
4023
+ var r = [];
4024
+ var push = function (x) {
4025
+ r.push(x);
4026
+ };
4027
+ for (var i = 0; i < arr.length; i++) {
4028
+ arr[i].each(push);
4029
+ }
4030
+ return r;
4031
+ };
4032
+ var findMap = function (arr, f) {
4033
+ for (var i = 0; i < arr.length; i++) {
4034
+ var r = f(arr[i], i);
4035
+ if (r.isSome()) {
4036
+ return r;
4037
+ }
4038
+ }
4039
+ return Option.none();
4040
+ };
4041
+ var liftN = function (arr, f) {
4042
+ var r = [];
4043
+ for (var i = 0; i < arr.length; i++) {
4044
+ var x = arr[i];
4045
+ if (x.isSome()) {
4046
+ r.push(x.getOrDie());
4047
+ } else {
4048
+ return Option.none();
4049
+ }
4050
+ }
4051
+ return Option.some(f.apply(null, r));
4052
+ };
4053
+ var $_cul8qomvjfuw8qm7 = {
4054
+ cat: cat,
4055
+ findMap: findMap,
4056
+ liftN: liftN
4057
+ };
4058
+
4059
+ var addCell = function (gridRow, index, cell) {
4060
+ var cells = gridRow.cells();
4061
+ var before = cells.slice(0, index);
4062
+ var after = cells.slice(index);
4063
+ var newCells = before.concat([cell]).concat(after);
4064
+ return setCells(gridRow, newCells);
4065
+ };
4066
+ var mutateCell = function (gridRow, index, cell) {
4067
+ var cells = gridRow.cells();
4068
+ cells[index] = cell;
4069
+ };
4070
+ var setCells = function (gridRow, cells) {
4071
+ return $_ce5pyrkgjfuw8q5v.rowcells(cells, gridRow.section());
4072
+ };
4073
+ var mapCells = function (gridRow, f) {
4074
+ var cells = gridRow.cells();
4075
+ var r = $_tyr3yk5jfuw8q47.map(cells, f);
4076
+ return $_ce5pyrkgjfuw8q5v.rowcells(r, gridRow.section());
4077
+ };
4078
+ var getCell = function (gridRow, index) {
4079
+ return gridRow.cells()[index];
4080
+ };
4081
+ var getCellElement = function (gridRow, index) {
4082
+ return getCell(gridRow, index).element();
4083
+ };
4084
+ var cellLength = function (gridRow) {
4085
+ return gridRow.cells().length;
4086
+ };
4087
+ var $_aylxzgmyjfuw8qmj = {
4088
+ addCell: addCell,
4089
+ setCells: setCells,
4090
+ mutateCell: mutateCell,
4091
+ getCell: getCell,
4092
+ getCellElement: getCellElement,
4093
+ mapCells: mapCells,
4094
+ cellLength: cellLength
4095
+ };
4096
+
4097
+ var getColumn = function (grid, index) {
4098
+ return $_tyr3yk5jfuw8q47.map(grid, function (row) {
4099
+ return $_aylxzgmyjfuw8qmj.getCell(row, index);
4100
+ });
4101
+ };
4102
+ var getRow = function (grid, index) {
4103
+ return grid[index];
4104
+ };
4105
+ var findDiff = function (xs, comp) {
4106
+ if (xs.length === 0)
4107
+ return 0;
4108
+ var first = xs[0];
4109
+ var index = $_tyr3yk5jfuw8q47.findIndex(xs, function (x) {
4110
+ return !comp(first.element(), x.element());
4111
+ });
4112
+ return index.fold(function () {
4113
+ return xs.length;
4114
+ }, function (ind) {
4115
+ return ind;
4116
+ });
4117
+ };
4118
+ var subgrid = function (grid, row, column, comparator) {
4119
+ var restOfRow = getRow(grid, row).cells().slice(column);
4120
+ var endColIndex = findDiff(restOfRow, comparator);
4121
+ var restOfColumn = getColumn(grid, column).slice(row);
4122
+ var endRowIndex = findDiff(restOfColumn, comparator);
4123
+ return {
4124
+ colspan: $_20nfr6k7jfuw8q4g.constant(endColIndex),
4125
+ rowspan: $_20nfr6k7jfuw8q4g.constant(endRowIndex)
4126
+ };
4127
+ };
4128
+ var $_8v4imgmxjfuw8qme = { subgrid: subgrid };
4129
+
4130
+ var toDetails = function (grid, comparator) {
4131
+ var seen = $_tyr3yk5jfuw8q47.map(grid, function (row, ri) {
4132
+ return $_tyr3yk5jfuw8q47.map(row.cells(), function (col, ci) {
4133
+ return false;
4134
+ });
4135
+ });
4136
+ var updateSeen = function (ri, ci, rowspan, colspan) {
4137
+ for (var r = ri; r < ri + rowspan; r++) {
4138
+ for (var c = ci; c < ci + colspan; c++) {
4139
+ seen[r][c] = true;
4140
+ }
4141
+ }
4142
+ };
4143
+ return $_tyr3yk5jfuw8q47.map(grid, function (row, ri) {
4144
+ var details = $_tyr3yk5jfuw8q47.bind(row.cells(), function (cell, ci) {
4145
+ if (seen[ri][ci] === false) {
4146
+ var result = $_8v4imgmxjfuw8qme.subgrid(grid, ri, ci, comparator);
4147
+ updateSeen(ri, ci, result.rowspan(), result.colspan());
4148
+ return [$_ce5pyrkgjfuw8q5v.detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];
4149
+ } else {
4150
+ return [];
4151
+ }
4152
+ });
4153
+ return $_ce5pyrkgjfuw8q5v.rowdetails(details, row.section());
4154
+ });
4155
+ };
4156
+ var toGrid = function (warehouse, generators, isNew) {
4157
+ var grid = [];
4158
+ for (var i = 0; i < warehouse.grid().rows(); i++) {
4159
+ var rowCells = [];
4160
+ for (var j = 0; j < warehouse.grid().columns(); j++) {
4161
+ var element = $_2ge24cldjfuw8qa3.getAt(warehouse, i, j).map(function (item) {
4162
+ return $_ce5pyrkgjfuw8q5v.elementnew(item.element(), isNew);
4163
+ }).getOrThunk(function () {
4164
+ return $_ce5pyrkgjfuw8q5v.elementnew(generators.gap(), true);
4165
+ });
4166
+ rowCells.push(element);
4167
+ }
4168
+ var row = $_ce5pyrkgjfuw8q5v.rowcells(rowCells, warehouse.all()[i].section());
4169
+ grid.push(row);
4170
+ }
4171
+ return grid;
4172
+ };
4173
+ var $_cw9o3smwjfuw8qm9 = {
4174
+ toDetails: toDetails,
4175
+ toGrid: toGrid
4176
+ };
4177
+
4178
+ var setIfNot = function (element, property, value, ignore) {
4179
+ if (value === ignore)
4180
+ $_3q82t2l5jfuw8q93.remove(element, property);
4181
+ else
4182
+ $_3q82t2l5jfuw8q93.set(element, property, value);
4183
+ };
4184
+ var render = function (table, grid) {
4185
+ var newRows = [];
4186
+ var newCells = [];
4187
+ var renderSection = function (gridSection, sectionName) {
4188
+ var section = $_8wdrbmlajfuw8q9m.child(table, sectionName).getOrThunk(function () {
4189
+ var tb = $_xbeoqkkjfuw8q73.fromTag(sectionName, $_s8scrkmjfuw8q7a.owner(table).dom());
4190
+ $_fatuxylgjfuw8qav.append(table, tb);
4191
+ return tb;
4192
+ });
4193
+ $_fl1deelhjfuw8qax.empty(section);
4194
+ var rows = $_tyr3yk5jfuw8q47.map(gridSection, function (row) {
4195
+ if (row.isNew()) {
4196
+ newRows.push(row.element());
4197
+ }
4198
+ var tr = row.element();
4199
+ $_fl1deelhjfuw8qax.empty(tr);
4200
+ $_tyr3yk5jfuw8q47.each(row.cells(), function (cell) {
4201
+ if (cell.isNew()) {
4202
+ newCells.push(cell.element());
4203
+ }
4204
+ setIfNot(cell.element(), 'colspan', cell.colspan(), 1);
4205
+ setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);
4206
+ $_fatuxylgjfuw8qav.append(tr, cell.element());
4207
+ });
4208
+ return tr;
4209
+ });
4210
+ $_9zaoqflijfuw8qb0.append(section, rows);
4211
+ };
4212
+ var removeSection = function (sectionName) {
4213
+ $_8wdrbmlajfuw8q9m.child(table, sectionName).bind($_fl1deelhjfuw8qax.remove);
4214
+ };
4215
+ var renderOrRemoveSection = function (gridSection, sectionName) {
4216
+ if (gridSection.length > 0) {
4217
+ renderSection(gridSection, sectionName);
4218
+ } else {
4219
+ removeSection(sectionName);
4220
+ }
4221
+ };
4222
+ var headSection = [];
4223
+ var bodySection = [];
4224
+ var footSection = [];
4225
+ $_tyr3yk5jfuw8q47.each(grid, function (row) {
4226
+ switch (row.section()) {
4227
+ case 'thead':
4228
+ headSection.push(row);
4229
+ break;
4230
+ case 'tbody':
4231
+ bodySection.push(row);
4232
+ break;
4233
+ case 'tfoot':
4234
+ footSection.push(row);
4235
+ break;
4236
+ }
4237
+ });
4238
+ renderOrRemoveSection(headSection, 'thead');
4239
+ renderOrRemoveSection(bodySection, 'tbody');
4240
+ renderOrRemoveSection(footSection, 'tfoot');
4241
+ return {
4242
+ newRows: $_20nfr6k7jfuw8q4g.constant(newRows),
4243
+ newCells: $_20nfr6k7jfuw8q4g.constant(newCells)
4244
+ };
4245
+ };
4246
+ var copy$2 = function (grid) {
4247
+ var rows = $_tyr3yk5jfuw8q47.map(grid, function (row) {
4248
+ var tr = $_ddvp06lkjfuw8qbt.shallow(row.element());
4249
+ $_tyr3yk5jfuw8q47.each(row.cells(), function (cell) {
4250
+ var clonedCell = $_ddvp06lkjfuw8qbt.deep(cell.element());
4251
+ setIfNot(clonedCell, 'colspan', cell.colspan(), 1);
4252
+ setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);
4253
+ $_fatuxylgjfuw8qav.append(tr, clonedCell);
4254
+ });
4255
+ return tr;
4256
+ });
4257
+ return rows;
4258
+ };
4259
+ var $_c9mejomzjfuw8qmn = {
4260
+ render: render,
4261
+ copy: copy$2
4262
+ };
4263
+
4264
+ var repeat = function (repititions, f) {
4265
+ var r = [];
4266
+ for (var i = 0; i < repititions; i++) {
4267
+ r.push(f(i));
4268
+ }
4269
+ return r;
4270
+ };
4271
+ var range$1 = function (start, end) {
4272
+ var r = [];
4273
+ for (var i = start; i < end; i++) {
4274
+ r.push(i);
4275
+ }
4276
+ return r;
4277
+ };
4278
+ var unique = function (xs, comparator) {
4279
+ var result = [];
4280
+ $_tyr3yk5jfuw8q47.each(xs, function (x, i) {
4281
+ if (i < xs.length - 1 && !comparator(x, xs[i + 1])) {
4282
+ result.push(x);
4283
+ } else if (i === xs.length - 1) {
4284
+ result.push(x);
4285
+ }
4286
+ });
4287
+ return result;
4288
+ };
4289
+ var deduce = function (xs, index) {
4290
+ if (index < 0 || index >= xs.length - 1)
4291
+ return Option.none();
4292
+ var current = xs[index].fold(function () {
4293
+ var rest = $_tyr3yk5jfuw8q47.reverse(xs.slice(0, index));
4294
+ return $_cul8qomvjfuw8qm7.findMap(rest, function (a, i) {
4295
+ return a.map(function (aa) {
4296
+ return {
4297
+ value: aa,
4298
+ delta: i + 1
4299
+ };
4300
+ });
4301
+ });
4302
+ }, function (c) {
4303
+ return Option.some({
4304
+ value: c,
4305
+ delta: 0
4306
+ });
4307
+ });
4308
+ var next = xs[index + 1].fold(function () {
4309
+ var rest = xs.slice(index + 1);
4310
+ return $_cul8qomvjfuw8qm7.findMap(rest, function (a, i) {
4311
+ return a.map(function (aa) {
4312
+ return {
4313
+ value: aa,
4314
+ delta: i + 1
4315
+ };
4316
+ });
4317
+ });
4318
+ }, function (n) {
4319
+ return Option.some({
4320
+ value: n,
4321
+ delta: 1
4322
+ });
4323
+ });
4324
+ return current.bind(function (c) {
4325
+ return next.map(function (n) {
4326
+ var extras = n.delta + c.delta;
4327
+ return Math.abs(n.value - c.value) / extras;
4328
+ });
4329
+ });
4330
+ };
4331
+ var $_fcnwwbn2jfuw8qoa = {
4332
+ repeat: repeat,
4333
+ range: range$1,
4334
+ unique: unique,
4335
+ deduce: deduce
4336
+ };
4337
+
4338
+ var columns = function (warehouse) {
4339
+ var grid = warehouse.grid();
4340
+ var cols = $_fcnwwbn2jfuw8qoa.range(0, grid.columns());
4341
+ var rows = $_fcnwwbn2jfuw8qoa.range(0, grid.rows());
4342
+ return $_tyr3yk5jfuw8q47.map(cols, function (col) {
4343
+ var getBlock = function () {
4344
+ return $_tyr3yk5jfuw8q47.bind(rows, function (r) {
4345
+ return $_2ge24cldjfuw8qa3.getAt(warehouse, r, col).filter(function (detail) {
4346
+ return detail.column() === col;
4347
+ }).fold($_20nfr6k7jfuw8q4g.constant([]), function (detail) {
4348
+ return [detail];
4349
+ });
4350
+ });
4351
+ };
4352
+ var isSingle = function (detail) {
4353
+ return detail.colspan() === 1;
4354
+ };
4355
+ var getFallback = function () {
4356
+ return $_2ge24cldjfuw8qa3.getAt(warehouse, 0, col);
4357
+ };
4358
+ return decide(getBlock, isSingle, getFallback);
4359
+ });
4360
+ };
4361
+ var decide = function (getBlock, isSingle, getFallback) {
4362
+ var inBlock = getBlock();
4363
+ var singleInBlock = $_tyr3yk5jfuw8q47.find(inBlock, isSingle);
4364
+ var detailOption = singleInBlock.orThunk(function () {
4365
+ return Option.from(inBlock[0]).orThunk(getFallback);
4366
+ });
4367
+ return detailOption.map(function (detail) {
4368
+ return detail.element();
4369
+ });
4370
+ };
4371
+ var rows$1 = function (warehouse) {
4372
+ var grid = warehouse.grid();
4373
+ var rows = $_fcnwwbn2jfuw8qoa.range(0, grid.rows());
4374
+ var cols = $_fcnwwbn2jfuw8qoa.range(0, grid.columns());
4375
+ return $_tyr3yk5jfuw8q47.map(rows, function (row) {
4376
+ var getBlock = function () {
4377
+ return $_tyr3yk5jfuw8q47.bind(cols, function (c) {
4378
+ return $_2ge24cldjfuw8qa3.getAt(warehouse, row, c).filter(function (detail) {
4379
+ return detail.row() === row;
4380
+ }).fold($_20nfr6k7jfuw8q4g.constant([]), function (detail) {
4381
+ return [detail];
4382
+ });
4383
+ });
4384
+ };
4385
+ var isSingle = function (detail) {
4386
+ return detail.rowspan() === 1;
4387
+ };
4388
+ var getFallback = function () {
4389
+ return $_2ge24cldjfuw8qa3.getAt(warehouse, row, 0);
4390
+ };
4391
+ return decide(getBlock, isSingle, getFallback);
4392
+ });
4393
+ };
4394
+ var $_9oko5pn1jfuw8qo0 = {
4395
+ columns: columns,
4396
+ rows: rows$1
4397
+ };
4398
+
4399
+ var col = function (column, x, y, w, h) {
4400
+ var blocker = $_xbeoqkkjfuw8q73.fromTag('div');
4401
+ $_bfod2hlejfuw8qac.setAll(blocker, {
4402
+ position: 'absolute',
4403
+ left: x - w / 2 + 'px',
4404
+ top: y + 'px',
4405
+ height: h + 'px',
4406
+ width: w + 'px'
4407
+ });
4408
+ $_3q82t2l5jfuw8q93.setAll(blocker, {
4409
+ 'data-column': column,
4410
+ 'role': 'presentation'
4411
+ });
4412
+ return blocker;
4413
+ };
4414
+ var row$1 = function (row, x, y, w, h) {
4415
+ var blocker = $_xbeoqkkjfuw8q73.fromTag('div');
4416
+ $_bfod2hlejfuw8qac.setAll(blocker, {
4417
+ position: 'absolute',
4418
+ left: x + 'px',
4419
+ top: y - h / 2 + 'px',
4420
+ height: h + 'px',
4421
+ width: w + 'px'
4422
+ });
4423
+ $_3q82t2l5jfuw8q93.setAll(blocker, {
4424
+ 'data-row': row,
4425
+ 'role': 'presentation'
4426
+ });
4427
+ return blocker;
4428
+ };
4429
+ var $_bis8idn3jfuw8qoi = {
4430
+ col: col,
4431
+ row: row$1
4432
+ };
4433
+
4434
+ var css = function (namespace) {
4435
+ var dashNamespace = namespace.replace(/\./g, '-');
4436
+ var resolve = function (str) {
4437
+ return dashNamespace + '-' + str;
4438
+ };
4439
+ return { resolve: resolve };
4440
+ };
4441
+ var $_63w6atn5jfuw8qot = { css: css };
4442
+
4443
+ var styles = $_63w6atn5jfuw8qot.css('ephox-snooker');
4444
+ var $_f6r94sn4jfuw8qoq = { resolve: styles.resolve };
4445
+
4446
+ function Toggler (turnOff, turnOn, initial) {
4447
+ var active = initial || false;
4448
+ var on = function () {
4449
+ turnOn();
4450
+ active = true;
4451
+ };
4452
+ var off = function () {
4453
+ turnOff();
4454
+ active = false;
4455
+ };
4456
+ var toggle = function () {
4457
+ var f = active ? off : on;
4458
+ f();
4459
+ };
4460
+ var isOn = function () {
4461
+ return active;
4462
+ };
4463
+ return {
4464
+ on: on,
4465
+ off: off,
4466
+ toggle: toggle,
4467
+ isOn: isOn
4468
+ };
4469
+ }
4470
+
4471
+ var read = function (element, attr) {
4472
+ var value = $_3q82t2l5jfuw8q93.get(element, attr);
4473
+ return value === undefined || value === '' ? [] : value.split(' ');
4474
+ };
4475
+ var add = function (element, attr, id) {
4476
+ var old = read(element, attr);
4477
+ var nu = old.concat([id]);
4478
+ $_3q82t2l5jfuw8q93.set(element, attr, nu.join(' '));
4479
+ };
4480
+ var remove$3 = function (element, attr, id) {
4481
+ var nu = $_tyr3yk5jfuw8q47.filter(read(element, attr), function (v) {
4482
+ return v !== id;
4483
+ });
4484
+ if (nu.length > 0)
4485
+ $_3q82t2l5jfuw8q93.set(element, attr, nu.join(' '));
4486
+ else
4487
+ $_3q82t2l5jfuw8q93.remove(element, attr);
4488
+ };
4489
+ var $_61h5lon9jfuw8qp0 = {
4490
+ read: read,
4491
+ add: add,
4492
+ remove: remove$3
4493
+ };
4494
+
4495
+ var supports = function (element) {
4496
+ return element.dom().classList !== undefined;
4497
+ };
4498
+ var get$6 = function (element) {
4499
+ return $_61h5lon9jfuw8qp0.read(element, 'class');
4500
+ };
4501
+ var add$1 = function (element, clazz) {
4502
+ return $_61h5lon9jfuw8qp0.add(element, 'class', clazz);
4503
+ };
4504
+ var remove$4 = function (element, clazz) {
4505
+ return $_61h5lon9jfuw8qp0.remove(element, 'class', clazz);
4506
+ };
4507
+ var toggle = function (element, clazz) {
4508
+ if ($_tyr3yk5jfuw8q47.contains(get$6(element), clazz)) {
4509
+ remove$4(element, clazz);
4510
+ } else {
4511
+ add$1(element, clazz);
4512
+ }
4513
+ };
4514
+ var $_f4rpvun8jfuw8qox = {
4515
+ get: get$6,
4516
+ add: add$1,
4517
+ remove: remove$4,
4518
+ toggle: toggle,
4519
+ supports: supports
4520
+ };
4521
+
4522
+ var add$2 = function (element, clazz) {
4523
+ if ($_f4rpvun8jfuw8qox.supports(element))
4524
+ element.dom().classList.add(clazz);
4525
+ else
4526
+ $_f4rpvun8jfuw8qox.add(element, clazz);
4527
+ };
4528
+ var cleanClass = function (element) {
4529
+ var classList = $_f4rpvun8jfuw8qox.supports(element) ? element.dom().classList : $_f4rpvun8jfuw8qox.get(element);
4530
+ if (classList.length === 0) {
4531
+ $_3q82t2l5jfuw8q93.remove(element, 'class');
4532
+ }
4533
+ };
4534
+ var remove$5 = function (element, clazz) {
4535
+ if ($_f4rpvun8jfuw8qox.supports(element)) {
4536
+ var classList = element.dom().classList;
4537
+ classList.remove(clazz);
4538
+ } else
4539
+ $_f4rpvun8jfuw8qox.remove(element, clazz);
4540
+ cleanClass(element);
4541
+ };
4542
+ var toggle$1 = function (element, clazz) {
4543
+ return $_f4rpvun8jfuw8qox.supports(element) ? element.dom().classList.toggle(clazz) : $_f4rpvun8jfuw8qox.toggle(element, clazz);
4544
+ };
4545
+ var toggler = function (element, clazz) {
4546
+ var hasClasslist = $_f4rpvun8jfuw8qox.supports(element);
4547
+ var classList = element.dom().classList;
4548
+ var off = function () {
4549
+ if (hasClasslist)
4550
+ classList.remove(clazz);
4551
+ else
4552
+ $_f4rpvun8jfuw8qox.remove(element, clazz);
4553
+ };
4554
+ var on = function () {
4555
+ if (hasClasslist)
4556
+ classList.add(clazz);
4557
+ else
4558
+ $_f4rpvun8jfuw8qox.add(element, clazz);
4559
+ };
4560
+ return Toggler(off, on, has$1(element, clazz));
4561
+ };
4562
+ var has$1 = function (element, clazz) {
4563
+ return $_f4rpvun8jfuw8qox.supports(element) && element.dom().classList.contains(clazz);
4564
+ };
4565
+ var $_fmcseon6jfuw8qou = {
4566
+ add: add$2,
4567
+ remove: remove$5,
4568
+ toggle: toggle$1,
4569
+ toggler: toggler,
4570
+ has: has$1
4571
+ };
4572
+
4573
+ var resizeBar = $_f6r94sn4jfuw8qoq.resolve('resizer-bar');
4574
+ var resizeRowBar = $_f6r94sn4jfuw8qoq.resolve('resizer-rows');
4575
+ var resizeColBar = $_f6r94sn4jfuw8qoq.resolve('resizer-cols');
4576
+ var BAR_THICKNESS = 7;
4577
+ var clear = function (wire) {
4578
+ var previous = $_6c9d0hl7jfuw8q9d.descendants(wire.parent(), '.' + resizeBar);
4579
+ $_tyr3yk5jfuw8q47.each(previous, $_fl1deelhjfuw8qax.remove);
4580
+ };
4581
+ var drawBar = function (wire, positions, create) {
4582
+ var origin = wire.origin();
4583
+ $_tyr3yk5jfuw8q47.each(positions, function (cpOption, i) {
4584
+ cpOption.each(function (cp) {
4585
+ var bar = create(origin, cp);
4586
+ $_fmcseon6jfuw8qou.add(bar, resizeBar);
4587
+ $_fatuxylgjfuw8qav.append(wire.parent(), bar);
4588
+ });
4589
+ });
4590
+ };
4591
+ var refreshCol = function (wire, colPositions, position, tableHeight) {
4592
+ drawBar(wire, colPositions, function (origin, cp) {
4593
+ var colBar = $_bis8idn3jfuw8qoi.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);
4594
+ $_fmcseon6jfuw8qou.add(colBar, resizeColBar);
4595
+ return colBar;
4596
+ });
4597
+ };
4598
+ var refreshRow = function (wire, rowPositions, position, tableWidth) {
4599
+ drawBar(wire, rowPositions, function (origin, cp) {
4600
+ var rowBar = $_bis8idn3jfuw8qoi.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);
4601
+ $_fmcseon6jfuw8qou.add(rowBar, resizeRowBar);
4602
+ return rowBar;
4603
+ });
4604
+ };
4605
+ var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {
4606
+ var position = $_hsvzlmijfuw8qj4.absolute(table);
4607
+ var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];
4608
+ refreshRow(wire, rowPositions, position, $_fj252lmejfuw8qin.getOuter(table));
4609
+ var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];
4610
+ refreshCol(wire, colPositions, position, $_cymdhgmcjfuw8qif.getOuter(table));
4611
+ };
4612
+ var refresh = function (wire, table, hdirection, vdirection) {
4613
+ clear(wire);
4614
+ var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
4615
+ var warehouse = $_2ge24cldjfuw8qa3.generate(list);
4616
+ var rows = $_9oko5pn1jfuw8qo0.rows(warehouse);
4617
+ var cols = $_9oko5pn1jfuw8qo0.columns(warehouse);
4618
+ refreshGrid(wire, table, rows, cols, hdirection, vdirection);
4619
+ };
4620
+ var each$2 = function (wire, f) {
4621
+ var bars = $_6c9d0hl7jfuw8q9d.descendants(wire.parent(), '.' + resizeBar);
4622
+ $_tyr3yk5jfuw8q47.each(bars, f);
4623
+ };
4624
+ var hide = function (wire) {
4625
+ each$2(wire, function (bar) {
4626
+ $_bfod2hlejfuw8qac.set(bar, 'display', 'none');
4627
+ });
4628
+ };
4629
+ var show = function (wire) {
4630
+ each$2(wire, function (bar) {
4631
+ $_bfod2hlejfuw8qac.set(bar, 'display', 'block');
4632
+ });
4633
+ };
4634
+ var isRowBar = function (element) {
4635
+ return $_fmcseon6jfuw8qou.has(element, resizeRowBar);
4636
+ };
4637
+ var isColBar = function (element) {
4638
+ return $_fmcseon6jfuw8qou.has(element, resizeColBar);
4639
+ };
4640
+ var $_jc1w5n0jfuw8qng = {
4641
+ refresh: refresh,
4642
+ hide: hide,
4643
+ show: show,
4644
+ destroy: clear,
4645
+ isRowBar: isRowBar,
4646
+ isColBar: isColBar
4647
+ };
4648
+
4649
+ var fromWarehouse = function (warehouse, generators) {
4650
+ return $_cw9o3smwjfuw8qm9.toGrid(warehouse, generators, false);
4651
+ };
4652
+ var deriveRows = function (rendered, generators) {
4653
+ var findRow = function (details) {
4654
+ var rowOfCells = $_cul8qomvjfuw8qm7.findMap(details, function (detail) {
4655
+ return $_s8scrkmjfuw8q7a.parent(detail.element()).map(function (row) {
4656
+ var isNew = $_s8scrkmjfuw8q7a.parent(row).isNone();
4657
+ return $_ce5pyrkgjfuw8q5v.elementnew(row, isNew);
4658
+ });
4659
+ });
4660
+ return rowOfCells.getOrThunk(function () {
4661
+ return $_ce5pyrkgjfuw8q5v.elementnew(generators.row(), true);
4662
+ });
4663
+ };
4664
+ return $_tyr3yk5jfuw8q47.map(rendered, function (details) {
4665
+ var row = findRow(details.details());
4666
+ return $_ce5pyrkgjfuw8q5v.rowdatanew(row.element(), details.details(), details.section(), row.isNew());
4667
+ });
4668
+ };
4669
+ var toDetailList = function (grid, generators) {
4670
+ var rendered = $_cw9o3smwjfuw8qm9.toDetails(grid, $_e8rn66kojfuw8q7n.eq);
4671
+ return deriveRows(rendered, generators);
4672
+ };
4673
+ var findInWarehouse = function (warehouse, element) {
4674
+ var all = $_tyr3yk5jfuw8q47.flatten($_tyr3yk5jfuw8q47.map(warehouse.all(), function (r) {
4675
+ return r.cells();
4676
+ }));
4677
+ return $_tyr3yk5jfuw8q47.find(all, function (e) {
4678
+ return $_e8rn66kojfuw8q7n.eq(element, e.element());
4679
+ });
4680
+ };
4681
+ var run = function (operation, extract, adjustment, postAction, genWrappers) {
4682
+ return function (wire, table, target, generators, direction) {
4683
+ var input = $_dy3x0nkfjfuw8q5l.fromTable(table);
4684
+ var warehouse = $_2ge24cldjfuw8qa3.generate(input);
4685
+ var output = extract(warehouse, target).map(function (info) {
4686
+ var model = fromWarehouse(warehouse, generators);
4687
+ var result = operation(model, info, $_e8rn66kojfuw8q7n.eq, genWrappers(generators));
4688
+ var grid = toDetailList(result.grid(), generators);
4689
+ return {
4690
+ grid: $_20nfr6k7jfuw8q4g.constant(grid),
4691
+ cursor: result.cursor
4692
+ };
4693
+ });
4694
+ return output.fold(function () {
4695
+ return Option.none();
4696
+ }, function (out) {
4697
+ var newElements = $_c9mejomzjfuw8qmn.render(table, out.grid());
4698
+ adjustment(table, out.grid(), direction);
4699
+ postAction(table);
4700
+ $_jc1w5n0jfuw8qng.refresh(wire, table, $_16z2iamhjfuw8qir.height, direction);
4701
+ return Option.some({
4702
+ cursor: out.cursor,
4703
+ newRows: newElements.newRows,
4704
+ newCells: newElements.newCells
4705
+ });
4706
+ });
4707
+ };
4708
+ };
4709
+ var onCell = function (warehouse, target) {
4710
+ return $_aqhz9okhjfuw8q5y.cell(target.element()).bind(function (cell) {
4711
+ return findInWarehouse(warehouse, cell);
4712
+ });
4713
+ };
4714
+ var onPaste = function (warehouse, target) {
4715
+ return $_aqhz9okhjfuw8q5y.cell(target.element()).bind(function (cell) {
4716
+ return findInWarehouse(warehouse, cell).map(function (details) {
4717
+ return $_91sgzmujfuw8qm5.merge(details, {
4718
+ generators: target.generators,
4719
+ clipboard: target.clipboard
4720
+ });
4721
+ });
4722
+ });
4723
+ };
4724
+ var onPasteRows = function (warehouse, target) {
4725
+ var details = $_tyr3yk5jfuw8q47.map(target.selection(), function (cell) {
4726
+ return $_aqhz9okhjfuw8q5y.cell(cell).bind(function (lc) {
4727
+ return findInWarehouse(warehouse, lc);
4728
+ });
4729
+ });
4730
+ var cells = $_cul8qomvjfuw8qm7.cat(details);
4731
+ return cells.length > 0 ? Option.some($_91sgzmujfuw8qm5.merge({ cells: cells }, {
4732
+ generators: target.generators,
4733
+ clipboard: target.clipboard
4734
+ })) : Option.none();
4735
+ };
4736
+ var onMergable = function (warehouse, target) {
4737
+ return target.mergable();
4738
+ };
4739
+ var onUnmergable = function (warehouse, target) {
4740
+ return target.unmergable();
4741
+ };
4742
+ var onCells = function (warehouse, target) {
4743
+ var details = $_tyr3yk5jfuw8q47.map(target.selection(), function (cell) {
4744
+ return $_aqhz9okhjfuw8q5y.cell(cell).bind(function (lc) {
4745
+ return findInWarehouse(warehouse, lc);
4746
+ });
4747
+ });
4748
+ var cells = $_cul8qomvjfuw8qm7.cat(details);
4749
+ return cells.length > 0 ? Option.some(cells) : Option.none();
4750
+ };
4751
+ var $_dis709mtjfuw8qlp = {
4752
+ run: run,
4753
+ toDetailList: toDetailList,
4754
+ onCell: onCell,
4755
+ onCells: onCells,
4756
+ onPaste: onPaste,
4757
+ onPasteRows: onPasteRows,
4758
+ onMergable: onMergable,
4759
+ onUnmergable: onUnmergable
4760
+ };
4761
+
4762
+ var value$1 = function (o) {
4763
+ var is = function (v) {
4764
+ return o === v;
4765
+ };
4766
+ var or = function (opt) {
4767
+ return value$1(o);
4768
+ };
4769
+ var orThunk = function (f) {
4770
+ return value$1(o);
4771
+ };
4772
+ var map = function (f) {
4773
+ return value$1(f(o));
4774
+ };
4775
+ var each = function (f) {
4776
+ f(o);
4777
+ };
4778
+ var bind = function (f) {
4779
+ return f(o);
4780
+ };
4781
+ var fold = function (_, onValue) {
4782
+ return onValue(o);
4783
+ };
4784
+ var exists = function (f) {
4785
+ return f(o);
4786
+ };
4787
+ var forall = function (f) {
4788
+ return f(o);
4789
+ };
4790
+ var toOption = function () {
4791
+ return Option.some(o);
4792
+ };
4793
+ return {
4794
+ is: is,
4795
+ isValue: $_20nfr6k7jfuw8q4g.always,
4796
+ isError: $_20nfr6k7jfuw8q4g.never,
4797
+ getOr: $_20nfr6k7jfuw8q4g.constant(o),
4798
+ getOrThunk: $_20nfr6k7jfuw8q4g.constant(o),
4799
+ getOrDie: $_20nfr6k7jfuw8q4g.constant(o),
4800
+ or: or,
4801
+ orThunk: orThunk,
4802
+ fold: fold,
4803
+ map: map,
4804
+ each: each,
4805
+ bind: bind,
4806
+ exists: exists,
4807
+ forall: forall,
4808
+ toOption: toOption
4809
+ };
4810
+ };
4811
+ var error = function (message) {
4812
+ var getOrThunk = function (f) {
4813
+ return f();
4814
+ };
4815
+ var getOrDie = function () {
4816
+ return $_20nfr6k7jfuw8q4g.die(String(message))();
4817
+ };
4818
+ var or = function (opt) {
4819
+ return opt;
4820
+ };
4821
+ var orThunk = function (f) {
4822
+ return f();
4823
+ };
4824
+ var map = function (f) {
4825
+ return error(message);
4826
+ };
4827
+ var bind = function (f) {
4828
+ return error(message);
4829
+ };
4830
+ var fold = function (onError, _) {
4831
+ return onError(message);
4832
+ };
4833
+ return {
4834
+ is: $_20nfr6k7jfuw8q4g.never,
4835
+ isValue: $_20nfr6k7jfuw8q4g.never,
4836
+ isError: $_20nfr6k7jfuw8q4g.always,
4837
+ getOr: $_20nfr6k7jfuw8q4g.identity,
4838
+ getOrThunk: getOrThunk,
4839
+ getOrDie: getOrDie,
4840
+ or: or,
4841
+ orThunk: orThunk,
4842
+ fold: fold,
4843
+ map: map,
4844
+ each: $_20nfr6k7jfuw8q4g.noop,
4845
+ bind: bind,
4846
+ exists: $_20nfr6k7jfuw8q4g.never,
4847
+ forall: $_20nfr6k7jfuw8q4g.always,
4848
+ toOption: Option.none
4849
+ };
4850
+ };
4851
+ var Result = {
4852
+ value: value$1,
4853
+ error: error
4854
+ };
4855
+
4856
+ var measure = function (startAddress, gridA, gridB) {
4857
+ if (startAddress.row() >= gridA.length || startAddress.column() > $_aylxzgmyjfuw8qmj.cellLength(gridA[0]))
4858
+ return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());
4859
+ var rowRemainder = gridA.slice(startAddress.row());
4860
+ var colRemainder = rowRemainder[0].cells().slice(startAddress.column());
4861
+ var colRequired = $_aylxzgmyjfuw8qmj.cellLength(gridB[0]);
4862
+ var rowRequired = gridB.length;
4863
+ return Result.value({
4864
+ rowDelta: $_20nfr6k7jfuw8q4g.constant(rowRemainder.length - rowRequired),
4865
+ colDelta: $_20nfr6k7jfuw8q4g.constant(colRemainder.length - colRequired)
4866
+ });
4867
+ };
4868
+ var measureWidth = function (gridA, gridB) {
4869
+ var colLengthA = $_aylxzgmyjfuw8qmj.cellLength(gridA[0]);
4870
+ var colLengthB = $_aylxzgmyjfuw8qmj.cellLength(gridB[0]);
4871
+ return {
4872
+ rowDelta: $_20nfr6k7jfuw8q4g.constant(0),
4873
+ colDelta: $_20nfr6k7jfuw8q4g.constant(colLengthA - colLengthB)
4874
+ };
4875
+ };
4876
+ var fill = function (cells, generator) {
4877
+ return $_tyr3yk5jfuw8q47.map(cells, function () {
4878
+ return $_ce5pyrkgjfuw8q5v.elementnew(generator.cell(), true);
4879
+ });
4880
+ };
4881
+ var rowFill = function (grid, amount, generator) {
4882
+ return grid.concat($_fcnwwbn2jfuw8qoa.repeat(amount, function (_row) {
4883
+ return $_aylxzgmyjfuw8qmj.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));
4884
+ }));
4885
+ };
4886
+ var colFill = function (grid, amount, generator) {
4887
+ return $_tyr3yk5jfuw8q47.map(grid, function (row) {
4888
+ return $_aylxzgmyjfuw8qmj.setCells(row, row.cells().concat(fill($_fcnwwbn2jfuw8qoa.range(0, amount), generator)));
4889
+ });
4890
+ };
4891
+ var tailor = function (gridA, delta, generator) {
4892
+ var fillCols = delta.colDelta() < 0 ? colFill : $_20nfr6k7jfuw8q4g.identity;
4893
+ var fillRows = delta.rowDelta() < 0 ? rowFill : $_20nfr6k7jfuw8q4g.identity;
4894
+ var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);
4895
+ var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);
4896
+ return tailoredGrid;
4897
+ };
4898
+ var $_pbbdjnbjfuw8qpe = {
4899
+ measure: measure,
4900
+ measureWidth: measureWidth,
4901
+ tailor: tailor
4902
+ };
4903
+
4904
+ var merge$2 = function (grid, bounds, comparator, substitution) {
4905
+ if (grid.length === 0)
4906
+ return grid;
4907
+ for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {
4908
+ for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {
4909
+ $_aylxzgmyjfuw8qmj.mutateCell(grid[i], j, $_ce5pyrkgjfuw8q5v.elementnew(substitution(), false));
4910
+ }
4911
+ }
4912
+ return grid;
4913
+ };
4914
+ var unmerge = function (grid, target, comparator, substitution) {
4915
+ var first = true;
4916
+ for (var i = 0; i < grid.length; i++) {
4917
+ for (var j = 0; j < $_aylxzgmyjfuw8qmj.cellLength(grid[0]); j++) {
4918
+ var current = $_aylxzgmyjfuw8qmj.getCellElement(grid[i], j);
4919
+ var isToReplace = comparator(current, target);
4920
+ if (isToReplace === true && first === false) {
4921
+ $_aylxzgmyjfuw8qmj.mutateCell(grid[i], j, $_ce5pyrkgjfuw8q5v.elementnew(substitution(), true));
4922
+ } else if (isToReplace === true) {
4923
+ first = false;
4924
+ }
4925
+ }
4926
+ }
4927
+ return grid;
4928
+ };
4929
+ var uniqueCells = function (row, comparator) {
4930
+ return $_tyr3yk5jfuw8q47.foldl(row, function (rest, cell) {
4931
+ return $_tyr3yk5jfuw8q47.exists(rest, function (currentCell) {
4932
+ return comparator(currentCell.element(), cell.element());
4933
+ }) ? rest : rest.concat([cell]);
4934
+ }, []);
4935
+ };
4936
+ var splitRows = function (grid, index, comparator, substitution) {
4937
+ if (index > 0 && index < grid.length) {
4938
+ var rowPrevCells = grid[index - 1].cells();
4939
+ var cells = uniqueCells(rowPrevCells, comparator);
4940
+ $_tyr3yk5jfuw8q47.each(cells, function (cell) {
4941
+ var replacement = Option.none();
4942
+ for (var i = index; i < grid.length; i++) {
4943
+ for (var j = 0; j < $_aylxzgmyjfuw8qmj.cellLength(grid[0]); j++) {
4944
+ var current = grid[i].cells()[j];
4945
+ var isToReplace = comparator(current.element(), cell.element());
4946
+ if (isToReplace) {
4947
+ if (replacement.isNone()) {
4948
+ replacement = Option.some(substitution());
4949
+ }
4950
+ replacement.each(function (sub) {
4951
+ $_aylxzgmyjfuw8qmj.mutateCell(grid[i], j, $_ce5pyrkgjfuw8q5v.elementnew(sub, true));
4952
+ });
4953
+ }
4954
+ }
4955
+ }
4956
+ });
4957
+ }
4958
+ return grid;
4959
+ };
4960
+ var $_72fqzkndjfuw8qpp = {
4961
+ merge: merge$2,
4962
+ unmerge: unmerge,
4963
+ splitRows: splitRows
4964
+ };
4965
+
4966
+ var isSpanning = function (grid, row, col, comparator) {
4967
+ var candidate = $_aylxzgmyjfuw8qmj.getCell(grid[row], col);
4968
+ var matching = $_20nfr6k7jfuw8q4g.curry(comparator, candidate.element());
4969
+ var currentRow = grid[row];
4970
+ return grid.length > 1 && $_aylxzgmyjfuw8qmj.cellLength(currentRow) > 1 && (col > 0 && matching($_aylxzgmyjfuw8qmj.getCellElement(currentRow, col - 1)) || col < currentRow.length - 1 && matching($_aylxzgmyjfuw8qmj.getCellElement(currentRow, col + 1)) || row > 0 && matching($_aylxzgmyjfuw8qmj.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching($_aylxzgmyjfuw8qmj.getCellElement(grid[row + 1], col)));
4971
+ };
4972
+ var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {
4973
+ var startRow = startAddress.row();
4974
+ var startCol = startAddress.column();
4975
+ var mergeHeight = gridB.length;
4976
+ var mergeWidth = $_aylxzgmyjfuw8qmj.cellLength(gridB[0]);
4977
+ var endRow = startRow + mergeHeight;
4978
+ var endCol = startCol + mergeWidth;
4979
+ for (var r = startRow; r < endRow; r++) {
4980
+ for (var c = startCol; c < endCol; c++) {
4981
+ if (isSpanning(gridA, r, c, comparator)) {
4982
+ $_72fqzkndjfuw8qpp.unmerge(gridA, $_aylxzgmyjfuw8qmj.getCellElement(gridA[r], c), comparator, generator.cell);
4983
+ }
4984
+ var newCell = $_aylxzgmyjfuw8qmj.getCellElement(gridB[r - startRow], c - startCol);
4985
+ var replacement = generator.replace(newCell);
4986
+ $_aylxzgmyjfuw8qmj.mutateCell(gridA[r], c, $_ce5pyrkgjfuw8q5v.elementnew(replacement, true));
4987
+ }
4988
+ }
4989
+ return gridA;
4990
+ };
4991
+ var merge$3 = function (startAddress, gridA, gridB, generator, comparator) {
4992
+ var result = $_pbbdjnbjfuw8qpe.measure(startAddress, gridA, gridB);
4993
+ return result.map(function (delta) {
4994
+ var fittedGrid = $_pbbdjnbjfuw8qpe.tailor(gridA, delta, generator);
4995
+ return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);
4996
+ });
4997
+ };
4998
+ var insert = function (index, gridA, gridB, generator, comparator) {
4999
+ $_72fqzkndjfuw8qpp.splitRows(gridA, index, comparator, generator.cell);
5000
+ var delta = $_pbbdjnbjfuw8qpe.measureWidth(gridB, gridA);
5001
+ var fittedNewGrid = $_pbbdjnbjfuw8qpe.tailor(gridB, delta, generator);
5002
+ var secondDelta = $_pbbdjnbjfuw8qpe.measureWidth(gridA, fittedNewGrid);
5003
+ var fittedOldGrid = $_pbbdjnbjfuw8qpe.tailor(gridA, secondDelta, generator);
5004
+ return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));
5005
+ };
5006
+ var $_5jycvqnajfuw8qp5 = {
5007
+ merge: merge$3,
5008
+ insert: insert
5009
+ };
5010
+
5011
+ var insertRowAt = function (grid, index, example, comparator, substitution) {
5012
+ var before = grid.slice(0, index);
5013
+ var after = grid.slice(index);
5014
+ var between = $_aylxzgmyjfuw8qmj.mapCells(grid[example], function (ex, c) {
5015
+ var withinSpan = index > 0 && index < grid.length && comparator($_aylxzgmyjfuw8qmj.getCellElement(grid[index - 1], c), $_aylxzgmyjfuw8qmj.getCellElement(grid[index], c));
5016
+ var ret = withinSpan ? $_aylxzgmyjfuw8qmj.getCell(grid[index], c) : $_ce5pyrkgjfuw8q5v.elementnew(substitution(ex.element(), comparator), true);
5017
+ return ret;
5018
+ });
5019
+ return before.concat([between]).concat(after);
5020
+ };
5021
+ var insertColumnAt = function (grid, index, example, comparator, substitution) {
5022
+ return $_tyr3yk5jfuw8q47.map(grid, function (row) {
5023
+ var withinSpan = index > 0 && index < $_aylxzgmyjfuw8qmj.cellLength(row) && comparator($_aylxzgmyjfuw8qmj.getCellElement(row, index - 1), $_aylxzgmyjfuw8qmj.getCellElement(row, index));
5024
+ var sub = withinSpan ? $_aylxzgmyjfuw8qmj.getCell(row, index) : $_ce5pyrkgjfuw8q5v.elementnew(substitution($_aylxzgmyjfuw8qmj.getCellElement(row, example), comparator), true);
5025
+ return $_aylxzgmyjfuw8qmj.addCell(row, index, sub);
5026
+ });
5027
+ };
5028
+ var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {
5029
+ var index = exampleCol + 1;
5030
+ return $_tyr3yk5jfuw8q47.map(grid, function (row, i) {
5031
+ var isTargetCell = i === exampleRow;
5032
+ var sub = isTargetCell ? $_ce5pyrkgjfuw8q5v.elementnew(substitution($_aylxzgmyjfuw8qmj.getCellElement(row, exampleCol), comparator), true) : $_aylxzgmyjfuw8qmj.getCell(row, exampleCol);
5033
+ return $_aylxzgmyjfuw8qmj.addCell(row, index, sub);
5034
+ });
5035
+ };
5036
+ var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {
5037
+ var index = exampleRow + 1;
5038
+ var before = grid.slice(0, index);
5039
+ var after = grid.slice(index);
5040
+ var between = $_aylxzgmyjfuw8qmj.mapCells(grid[exampleRow], function (ex, i) {
5041
+ var isTargetCell = i === exampleCol;
5042
+ return isTargetCell ? $_ce5pyrkgjfuw8q5v.elementnew(substitution(ex.element(), comparator), true) : ex;
5043
+ });
5044
+ return before.concat([between]).concat(after);
5045
+ };
5046
+ var deleteColumnsAt = function (grid, start, finish) {
5047
+ var rows = $_tyr3yk5jfuw8q47.map(grid, function (row) {
5048
+ var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));
5049
+ return $_ce5pyrkgjfuw8q5v.rowcells(cells, row.section());
5050
+ });
5051
+ return $_tyr3yk5jfuw8q47.filter(rows, function (row) {
5052
+ return row.cells().length > 0;
5053
+ });
5054
+ };
5055
+ var deleteRowsAt = function (grid, start, finish) {
5056
+ return grid.slice(0, start).concat(grid.slice(finish + 1));
5057
+ };
5058
+ var $_22uvfenejfuw8qpx = {
5059
+ insertRowAt: insertRowAt,
5060
+ insertColumnAt: insertColumnAt,
5061
+ splitCellIntoColumns: splitCellIntoColumns,
5062
+ splitCellIntoRows: splitCellIntoRows,
5063
+ deleteRowsAt: deleteRowsAt,
5064
+ deleteColumnsAt: deleteColumnsAt
5065
+ };
5066
+
5067
+ var replaceIn = function (grid, targets, comparator, substitution) {
5068
+ var isTarget = function (cell) {
5069
+ return $_tyr3yk5jfuw8q47.exists(targets, function (target) {
5070
+ return comparator(cell.element(), target.element());
5071
+ });
5072
+ };
5073
+ return $_tyr3yk5jfuw8q47.map(grid, function (row) {
5074
+ return $_aylxzgmyjfuw8qmj.mapCells(row, function (cell) {
5075
+ return isTarget(cell) ? $_ce5pyrkgjfuw8q5v.elementnew(substitution(cell.element(), comparator), true) : cell;
5076
+ });
5077
+ });
5078
+ };
5079
+ var notStartRow = function (grid, rowIndex, colIndex, comparator) {
5080
+ return $_aylxzgmyjfuw8qmj.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator($_aylxzgmyjfuw8qmj.getCellElement(grid[rowIndex - 1], colIndex), $_aylxzgmyjfuw8qmj.getCellElement(grid[rowIndex], colIndex)));
5081
+ };
5082
+ var notStartColumn = function (row, index, comparator) {
5083
+ return index > 0 && comparator($_aylxzgmyjfuw8qmj.getCellElement(row, index - 1), $_aylxzgmyjfuw8qmj.getCellElement(row, index));
5084
+ };
5085
+ var replaceColumn = function (grid, index, comparator, substitution) {
5086
+ var targets = $_tyr3yk5jfuw8q47.bind(grid, function (row, i) {
5087
+ var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);
5088
+ return alreadyAdded ? [] : [$_aylxzgmyjfuw8qmj.getCell(row, index)];
5089
+ });
5090
+ return replaceIn(grid, targets, comparator, substitution);
5091
+ };
5092
+ var replaceRow = function (grid, index, comparator, substitution) {
5093
+ var targetRow = grid[index];
5094
+ var targets = $_tyr3yk5jfuw8q47.bind(targetRow.cells(), function (item, i) {
5095
+ var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);
5096
+ return alreadyAdded ? [] : [item];
5097
+ });
5098
+ return replaceIn(grid, targets, comparator, substitution);
5099
+ };
5100
+ var $_507pt2nfjfuw8qq2 = {
5101
+ replaceColumn: replaceColumn,
5102
+ replaceRow: replaceRow
5103
+ };
5104
+
5105
+ var none$1 = function () {
5106
+ return folder(function (n, o, l, m, r) {
5107
+ return n();
5108
+ });
5109
+ };
5110
+ var only = function (index) {
5111
+ return folder(function (n, o, l, m, r) {
5112
+ return o(index);
5113
+ });
5114
+ };
5115
+ var left = function (index, next) {
5116
+ return folder(function (n, o, l, m, r) {
5117
+ return l(index, next);
5118
+ });
5119
+ };
5120
+ var middle = function (prev, index, next) {
5121
+ return folder(function (n, o, l, m, r) {
5122
+ return m(prev, index, next);
5123
+ });
5124
+ };
5125
+ var right = function (prev, index) {
5126
+ return folder(function (n, o, l, m, r) {
5127
+ return r(prev, index);
5128
+ });
5129
+ };
5130
+ var folder = function (fold) {
5131
+ return { fold: fold };
5132
+ };
5133
+ var $_17zkjbnijfuw8qqk = {
5134
+ none: none$1,
5135
+ only: only,
5136
+ left: left,
5137
+ middle: middle,
5138
+ right: right
5139
+ };
5140
+
5141
+ var neighbours$1 = function (input, index) {
5142
+ if (input.length === 0)
5143
+ return $_17zkjbnijfuw8qqk.none();
5144
+ if (input.length === 1)
5145
+ return $_17zkjbnijfuw8qqk.only(0);
5146
+ if (index === 0)
5147
+ return $_17zkjbnijfuw8qqk.left(0, 1);
5148
+ if (index === input.length - 1)
5149
+ return $_17zkjbnijfuw8qqk.right(index - 1, index);
5150
+ if (index > 0 && index < input.length - 1)
5151
+ return $_17zkjbnijfuw8qqk.middle(index - 1, index, index + 1);
5152
+ return $_17zkjbnijfuw8qqk.none();
5153
+ };
5154
+ var determine = function (input, column, step, tableSize) {
5155
+ var result = input.slice(0);
5156
+ var context = neighbours$1(input, column);
5157
+ var zero = function (array) {
5158
+ return $_tyr3yk5jfuw8q47.map(array, $_20nfr6k7jfuw8q4g.constant(0));
5159
+ };
5160
+ var onNone = $_20nfr6k7jfuw8q4g.constant(zero(result));
5161
+ var onOnly = function (index) {
5162
+ return tableSize.singleColumnWidth(result[index], step);
5163
+ };
5164
+ var onChange = function (index, next) {
5165
+ if (step >= 0) {
5166
+ var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);
5167
+ return zero(result.slice(0, index)).concat([
5168
+ step,
5169
+ newNext - result[next]
5170
+ ]).concat(zero(result.slice(next + 1)));
5171
+ } else {
5172
+ var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);
5173
+ var diffx = result[index] - newThis;
5174
+ return zero(result.slice(0, index)).concat([
5175
+ newThis - result[index],
5176
+ diffx
5177
+ ]).concat(zero(result.slice(next + 1)));
5178
+ }
5179
+ };
5180
+ var onLeft = onChange;
5181
+ var onMiddle = function (prev, index, next) {
5182
+ return onChange(index, next);
5183
+ };
5184
+ var onRight = function (prev, index) {
5185
+ if (step >= 0) {
5186
+ return zero(result.slice(0, index)).concat([step]);
5187
+ } else {
5188
+ var size = Math.max(tableSize.minCellWidth(), result[index] + step);
5189
+ return zero(result.slice(0, index)).concat([size - result[index]]);
5190
+ }
5191
+ };
5192
+ return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);
5193
+ };
5194
+ var $_7b8knbnhjfuw8qqd = { determine: determine };
5195
+
5196
+ var getSpan$1 = function (cell, type) {
5197
+ return $_3q82t2l5jfuw8q93.has(cell, type) && parseInt($_3q82t2l5jfuw8q93.get(cell, type), 10) > 1;
5198
+ };
5199
+ var hasColspan = function (cell) {
5200
+ return getSpan$1(cell, 'colspan');
5201
+ };
5202
+ var hasRowspan = function (cell) {
5203
+ return getSpan$1(cell, 'rowspan');
5204
+ };
5205
+ var getInt = function (element, property) {
5206
+ return parseInt($_bfod2hlejfuw8qac.get(element, property), 10);
5207
+ };
5208
+ var $_63qtcvnkjfuw8qqu = {
5209
+ hasColspan: hasColspan,
5210
+ hasRowspan: hasRowspan,
5211
+ minWidth: $_20nfr6k7jfuw8q4g.constant(10),
5212
+ minHeight: $_20nfr6k7jfuw8q4g.constant(10),
5213
+ getInt: getInt
5214
+ };
5215
+
5216
+ var getRaw$1 = function (cell, property, getter) {
5217
+ return $_bfod2hlejfuw8qac.getRaw(cell, property).fold(function () {
5218
+ return getter(cell) + 'px';
5219
+ }, function (raw) {
5220
+ return raw;
5221
+ });
5222
+ };
5223
+ var getRawW = function (cell) {
5224
+ return getRaw$1(cell, 'width', $_by2skemajfuw8qhj.getPixelWidth);
5225
+ };
5226
+ var getRawH = function (cell) {
5227
+ return getRaw$1(cell, 'height', $_by2skemajfuw8qhj.getHeight);
5228
+ };
5229
+ var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {
5230
+ var columns = $_9oko5pn1jfuw8qo0.columns(warehouse);
5231
+ var backups = $_tyr3yk5jfuw8q47.map(columns, function (cellOption) {
5232
+ return cellOption.map(direction.edge);
5233
+ });
5234
+ return $_tyr3yk5jfuw8q47.map(columns, function (cellOption, c) {
5235
+ var columnCell = cellOption.filter($_20nfr6k7jfuw8q4g.not($_63qtcvnkjfuw8qqu.hasColspan));
5236
+ return columnCell.fold(function () {
5237
+ var deduced = $_fcnwwbn2jfuw8qoa.deduce(backups, c);
5238
+ return fallback(deduced);
5239
+ }, function (cell) {
5240
+ return getWidth(cell, tableSize);
5241
+ });
5242
+ });
5243
+ };
5244
+ var getDeduced = function (deduced) {
5245
+ return deduced.map(function (d) {
5246
+ return d + 'px';
5247
+ }).getOr('');
5248
+ };
5249
+ var getRawWidths = function (warehouse, direction) {
5250
+ return getWidthFrom(warehouse, direction, getRawW, getDeduced);
5251
+ };
5252
+ var getPercentageWidths = function (warehouse, direction, tableSize) {
5253
+ return getWidthFrom(warehouse, direction, $_by2skemajfuw8qhj.getPercentageWidth, function (deduced) {
5254
+ return deduced.fold(function () {
5255
+ return tableSize.minCellWidth();
5256
+ }, function (cellWidth) {
5257
+ return cellWidth / tableSize.pixelWidth() * 100;
5258
+ });
5259
+ }, tableSize);
5260
+ };
5261
+ var getPixelWidths = function (warehouse, direction, tableSize) {
5262
+ return getWidthFrom(warehouse, direction, $_by2skemajfuw8qhj.getPixelWidth, function (deduced) {
5263
+ return deduced.getOrThunk(tableSize.minCellWidth);
5264
+ }, tableSize);
5265
+ };
5266
+ var getHeightFrom = function (warehouse, direction, getHeight, fallback) {
5267
+ var rows = $_9oko5pn1jfuw8qo0.rows(warehouse);
5268
+ var backups = $_tyr3yk5jfuw8q47.map(rows, function (cellOption) {
5269
+ return cellOption.map(direction.edge);
5270
+ });
5271
+ return $_tyr3yk5jfuw8q47.map(rows, function (cellOption, c) {
5272
+ var rowCell = cellOption.filter($_20nfr6k7jfuw8q4g.not($_63qtcvnkjfuw8qqu.hasRowspan));
5273
+ return rowCell.fold(function () {
5274
+ var deduced = $_fcnwwbn2jfuw8qoa.deduce(backups, c);
5275
+ return fallback(deduced);
5276
+ }, function (cell) {
5277
+ return getHeight(cell);
5278
+ });
5279
+ });
5280
+ };
5281
+ var getPixelHeights = function (warehouse, direction) {
5282
+ return getHeightFrom(warehouse, direction, $_by2skemajfuw8qhj.getHeight, function (deduced) {
5283
+ return deduced.getOrThunk($_63qtcvnkjfuw8qqu.minHeight);
5284
+ });
5285
+ };
5286
+ var getRawHeights = function (warehouse, direction) {
5287
+ return getHeightFrom(warehouse, direction, getRawH, getDeduced);
5288
+ };
5289
+ var $_694691njjfuw8qqm = {
5290
+ getRawWidths: getRawWidths,
5291
+ getPixelWidths: getPixelWidths,
5292
+ getPercentageWidths: getPercentageWidths,
5293
+ getPixelHeights: getPixelHeights,
5294
+ getRawHeights: getRawHeights
5295
+ };
5296
+
5297
+ var total = function (start, end, measures) {
5298
+ var r = 0;
5299
+ for (var i = start; i < end; i++) {
5300
+ r += measures[i] !== undefined ? measures[i] : 0;
5301
+ }
5302
+ return r;
5303
+ };
5304
+ var recalculateWidth = function (warehouse, widths) {
5305
+ var all = $_2ge24cldjfuw8qa3.justCells(warehouse);
5306
+ return $_tyr3yk5jfuw8q47.map(all, function (cell) {
5307
+ var width = total(cell.column(), cell.column() + cell.colspan(), widths);
5308
+ return {
5309
+ element: cell.element,
5310
+ width: $_20nfr6k7jfuw8q4g.constant(width),
5311
+ colspan: cell.colspan
5312
+ };
5313
+ });
5314
+ };
5315
+ var recalculateHeight = function (warehouse, heights) {
5316
+ var all = $_2ge24cldjfuw8qa3.justCells(warehouse);
5317
+ return $_tyr3yk5jfuw8q47.map(all, function (cell) {
5318
+ var height = total(cell.row(), cell.row() + cell.rowspan(), heights);
5319
+ return {
5320
+ element: cell.element,
5321
+ height: $_20nfr6k7jfuw8q4g.constant(height),
5322
+ rowspan: cell.rowspan
5323
+ };
5324
+ });
5325
+ };
5326
+ var matchRowHeight = function (warehouse, heights) {
5327
+ return $_tyr3yk5jfuw8q47.map(warehouse.all(), function (row, i) {
5328
+ return {
5329
+ element: row.element,
5330
+ height: $_20nfr6k7jfuw8q4g.constant(heights[i])
5331
+ };
5332
+ });
5333
+ };
5334
+ var $_2ltb63nljfuw8qr5 = {
5335
+ recalculateWidth: recalculateWidth,
5336
+ recalculateHeight: recalculateHeight,
5337
+ matchRowHeight: matchRowHeight
5338
+ };
5339
+
5340
+ var percentageSize = function (width, element) {
5341
+ var floatWidth = parseFloat(width);
5342
+ var pixelWidth = $_fj252lmejfuw8qin.get(element);
5343
+ var getCellDelta = function (delta) {
5344
+ return delta / pixelWidth * 100;
5345
+ };
5346
+ var singleColumnWidth = function (width, _delta) {
5347
+ return [100 - width];
5348
+ };
5349
+ var minCellWidth = function () {
5350
+ return $_63qtcvnkjfuw8qqu.minWidth() / pixelWidth * 100;
5351
+ };
5352
+ var setTableWidth = function (table, _newWidths, delta) {
5353
+ var total = floatWidth + delta;
5354
+ $_by2skemajfuw8qhj.setPercentageWidth(table, total);
5355
+ };
5356
+ return {
5357
+ width: $_20nfr6k7jfuw8q4g.constant(floatWidth),
5358
+ pixelWidth: $_20nfr6k7jfuw8q4g.constant(pixelWidth),
5359
+ getWidths: $_694691njjfuw8qqm.getPercentageWidths,
5360
+ getCellDelta: getCellDelta,
5361
+ singleColumnWidth: singleColumnWidth,
5362
+ minCellWidth: minCellWidth,
5363
+ setElementWidth: $_by2skemajfuw8qhj.setPercentageWidth,
5364
+ setTableWidth: setTableWidth
5365
+ };
5366
+ };
5367
+ var pixelSize = function (width) {
5368
+ var intWidth = parseInt(width, 10);
5369
+ var getCellDelta = $_20nfr6k7jfuw8q4g.identity;
5370
+ var singleColumnWidth = function (width, delta) {
5371
+ var newNext = Math.max($_63qtcvnkjfuw8qqu.minWidth(), width + delta);
5372
+ return [newNext - width];
5373
+ };
5374
+ var setTableWidth = function (table, newWidths, _delta) {
5375
+ var total = $_tyr3yk5jfuw8q47.foldr(newWidths, function (b, a) {
5376
+ return b + a;
5377
+ }, 0);
5378
+ $_by2skemajfuw8qhj.setPixelWidth(table, total);
5379
+ };
5380
+ return {
5381
+ width: $_20nfr6k7jfuw8q4g.constant(intWidth),
5382
+ pixelWidth: $_20nfr6k7jfuw8q4g.constant(intWidth),
5383
+ getWidths: $_694691njjfuw8qqm.getPixelWidths,
5384
+ getCellDelta: getCellDelta,
5385
+ singleColumnWidth: singleColumnWidth,
5386
+ minCellWidth: $_63qtcvnkjfuw8qqu.minWidth,
5387
+ setElementWidth: $_by2skemajfuw8qhj.setPixelWidth,
5388
+ setTableWidth: setTableWidth
5389
+ };
5390
+ };
5391
+ var chooseSize = function (element, width) {
5392
+ if ($_by2skemajfuw8qhj.percentageBasedSizeRegex().test(width)) {
5393
+ var percentMatch = $_by2skemajfuw8qhj.percentageBasedSizeRegex().exec(width);
5394
+ return percentageSize(percentMatch[1], element);
5395
+ } else if ($_by2skemajfuw8qhj.pixelBasedSizeRegex().test(width)) {
5396
+ var pixelMatch = $_by2skemajfuw8qhj.pixelBasedSizeRegex().exec(width);
5397
+ return pixelSize(pixelMatch[1]);
5398
+ } else {
5399
+ var fallbackWidth = $_fj252lmejfuw8qin.get(element);
5400
+ return pixelSize(fallbackWidth);
5401
+ }
5402
+ };
5403
+ var getTableSize = function (element) {
5404
+ var width = $_by2skemajfuw8qhj.getRawWidth(element);
5405
+ return width.fold(function () {
5406
+ var fallbackWidth = $_fj252lmejfuw8qin.get(element);
5407
+ return pixelSize(fallbackWidth);
5408
+ }, function (width) {
5409
+ return chooseSize(element, width);
5410
+ });
5411
+ };
5412
+ var $_2o9g1qnmjfuw8qrh = { getTableSize: getTableSize };
5413
+
5414
+ var getWarehouse$1 = function (list) {
5415
+ return $_2ge24cldjfuw8qa3.generate(list);
5416
+ };
5417
+ var sumUp = function (newSize) {
5418
+ return $_tyr3yk5jfuw8q47.foldr(newSize, function (b, a) {
5419
+ return b + a;
5420
+ }, 0);
5421
+ };
5422
+ var getTableWarehouse = function (table) {
5423
+ var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
5424
+ return getWarehouse$1(list);
5425
+ };
5426
+ var adjustWidth = function (table, delta, index, direction) {
5427
+ var tableSize = $_2o9g1qnmjfuw8qrh.getTableSize(table);
5428
+ var step = tableSize.getCellDelta(delta);
5429
+ var warehouse = getTableWarehouse(table);
5430
+ var widths = tableSize.getWidths(warehouse, direction, tableSize);
5431
+ var deltas = $_7b8knbnhjfuw8qqd.determine(widths, index, step, tableSize);
5432
+ var newWidths = $_tyr3yk5jfuw8q47.map(deltas, function (dx, i) {
5433
+ return dx + widths[i];
5434
+ });
5435
+ var newSizes = $_2ltb63nljfuw8qr5.recalculateWidth(warehouse, newWidths);
5436
+ $_tyr3yk5jfuw8q47.each(newSizes, function (cell) {
5437
+ tableSize.setElementWidth(cell.element(), cell.width());
5438
+ });
5439
+ if (index === warehouse.grid().columns() - 1) {
5440
+ tableSize.setTableWidth(table, newWidths, step);
5441
+ }
5442
+ };
5443
+ var adjustHeight = function (table, delta, index, direction) {
5444
+ var warehouse = getTableWarehouse(table);
5445
+ var heights = $_694691njjfuw8qqm.getPixelHeights(warehouse, direction);
5446
+ var newHeights = $_tyr3yk5jfuw8q47.map(heights, function (dy, i) {
5447
+ return index === i ? Math.max(delta + dy, $_63qtcvnkjfuw8qqu.minHeight()) : dy;
5448
+ });
5449
+ var newCellSizes = $_2ltb63nljfuw8qr5.recalculateHeight(warehouse, newHeights);
5450
+ var newRowSizes = $_2ltb63nljfuw8qr5.matchRowHeight(warehouse, newHeights);
5451
+ $_tyr3yk5jfuw8q47.each(newRowSizes, function (row) {
5452
+ $_by2skemajfuw8qhj.setHeight(row.element(), row.height());
5453
+ });
5454
+ $_tyr3yk5jfuw8q47.each(newCellSizes, function (cell) {
5455
+ $_by2skemajfuw8qhj.setHeight(cell.element(), cell.height());
5456
+ });
5457
+ var total = sumUp(newHeights);
5458
+ $_by2skemajfuw8qhj.setHeight(table, total);
5459
+ };
5460
+ var adjustWidthTo = function (table, list, direction) {
5461
+ var tableSize = $_2o9g1qnmjfuw8qrh.getTableSize(table);
5462
+ var warehouse = getWarehouse$1(list);
5463
+ var widths = tableSize.getWidths(warehouse, direction, tableSize);
5464
+ var newSizes = $_2ltb63nljfuw8qr5.recalculateWidth(warehouse, widths);
5465
+ $_tyr3yk5jfuw8q47.each(newSizes, function (cell) {
5466
+ tableSize.setElementWidth(cell.element(), cell.width());
5467
+ });
5468
+ var total = $_tyr3yk5jfuw8q47.foldr(widths, function (b, a) {
5469
+ return a + b;
5470
+ }, 0);
5471
+ if (newSizes.length > 0) {
5472
+ tableSize.setElementWidth(table, total);
5473
+ }
5474
+ };
5475
+ var $_cwciisngjfuw8qq6 = {
5476
+ adjustWidth: adjustWidth,
5477
+ adjustHeight: adjustHeight,
5478
+ adjustWidthTo: adjustWidthTo
5479
+ };
5480
+
5481
+ var prune = function (table) {
5482
+ var cells = $_aqhz9okhjfuw8q5y.cells(table);
5483
+ if (cells.length === 0)
5484
+ $_fl1deelhjfuw8qax.remove(table);
5485
+ };
5486
+ var outcome = $_5now9kbjfuw8q5e.immutable('grid', 'cursor');
5487
+ var elementFromGrid = function (grid, row, column) {
5488
+ return findIn(grid, row, column).orThunk(function () {
5489
+ return findIn(grid, 0, 0);
5490
+ });
5491
+ };
5492
+ var findIn = function (grid, row, column) {
5493
+ return Option.from(grid[row]).bind(function (r) {
5494
+ return Option.from(r.cells()[column]).bind(function (c) {
5495
+ return Option.from(c.element());
5496
+ });
5497
+ });
5498
+ };
5499
+ var bundle = function (grid, row, column) {
5500
+ return outcome(grid, findIn(grid, row, column));
5501
+ };
5502
+ var uniqueRows = function (details) {
5503
+ return $_tyr3yk5jfuw8q47.foldl(details, function (rest, detail) {
5504
+ return $_tyr3yk5jfuw8q47.exists(rest, function (currentDetail) {
5505
+ return currentDetail.row() === detail.row();
5506
+ }) ? rest : rest.concat([detail]);
5507
+ }, []).sort(function (detailA, detailB) {
5508
+ return detailA.row() - detailB.row();
5509
+ });
5510
+ };
5511
+ var uniqueColumns = function (details) {
5512
+ return $_tyr3yk5jfuw8q47.foldl(details, function (rest, detail) {
5513
+ return $_tyr3yk5jfuw8q47.exists(rest, function (currentDetail) {
5514
+ return currentDetail.column() === detail.column();
5515
+ }) ? rest : rest.concat([detail]);
5516
+ }, []).sort(function (detailA, detailB) {
5517
+ return detailA.column() - detailB.column();
5518
+ });
5519
+ };
5520
+ var insertRowBefore = function (grid, detail, comparator, genWrappers) {
5521
+ var example = detail.row();
5522
+ var targetIndex = detail.row();
5523
+ var newGrid = $_22uvfenejfuw8qpx.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
5524
+ return bundle(newGrid, targetIndex, detail.column());
5525
+ };
5526
+ var insertRowsBefore = function (grid, details, comparator, genWrappers) {
5527
+ var example = details[0].row();
5528
+ var targetIndex = details[0].row();
5529
+ var rows = uniqueRows(details);
5530
+ var newGrid = $_tyr3yk5jfuw8q47.foldl(rows, function (newGrid, _row) {
5531
+ return $_22uvfenejfuw8qpx.insertRowAt(newGrid, targetIndex, example, comparator, genWrappers.getOrInit);
5532
+ }, grid);
5533
+ return bundle(newGrid, targetIndex, details[0].column());
5534
+ };
5535
+ var insertRowAfter = function (grid, detail, comparator, genWrappers) {
5536
+ var example = detail.row();
5537
+ var targetIndex = detail.row() + detail.rowspan();
5538
+ var newGrid = $_22uvfenejfuw8qpx.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
5539
+ return bundle(newGrid, targetIndex, detail.column());
5540
+ };
5541
+ var insertRowsAfter = function (grid, details, comparator, genWrappers) {
5542
+ var rows = uniqueRows(details);
5543
+ var example = rows[rows.length - 1].row();
5544
+ var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();
5545
+ var newGrid = $_tyr3yk5jfuw8q47.foldl(rows, function (newGrid, _row) {
5546
+ return $_22uvfenejfuw8qpx.insertRowAt(newGrid, targetIndex, example, comparator, genWrappers.getOrInit);
5547
+ }, grid);
5548
+ return bundle(newGrid, targetIndex, details[0].column());
5549
+ };
5550
+ var insertColumnBefore = function (grid, detail, comparator, genWrappers) {
5551
+ var example = detail.column();
5552
+ var targetIndex = detail.column();
5553
+ var newGrid = $_22uvfenejfuw8qpx.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
5554
+ return bundle(newGrid, detail.row(), targetIndex);
5555
+ };
5556
+ var insertColumnsBefore = function (grid, details, comparator, genWrappers) {
5557
+ var columns = uniqueColumns(details);
5558
+ var example = columns[0].column();
5559
+ var targetIndex = columns[0].column();
5560
+ var newGrid = $_tyr3yk5jfuw8q47.foldl(columns, function (newGrid, _row) {
5561
+ return $_22uvfenejfuw8qpx.insertColumnAt(newGrid, targetIndex, example, comparator, genWrappers.getOrInit);
5562
+ }, grid);
5563
+ return bundle(newGrid, details[0].row(), targetIndex);
5564
+ };
5565
+ var insertColumnAfter = function (grid, detail, comparator, genWrappers) {
5566
+ var example = detail.column();
5567
+ var targetIndex = detail.column() + detail.colspan();
5568
+ var newGrid = $_22uvfenejfuw8qpx.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);
5569
+ return bundle(newGrid, detail.row(), targetIndex);
5570
+ };
5571
+ var insertColumnsAfter = function (grid, details, comparator, genWrappers) {
5572
+ var example = details[details.length - 1].column();
5573
+ var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();
5574
+ var columns = uniqueColumns(details);
5575
+ var newGrid = $_tyr3yk5jfuw8q47.foldl(columns, function (newGrid, _row) {
5576
+ return $_22uvfenejfuw8qpx.insertColumnAt(newGrid, targetIndex, example, comparator, genWrappers.getOrInit);
5577
+ }, grid);
5578
+ return bundle(newGrid, details[0].row(), targetIndex);
5579
+ };
5580
+ var makeRowHeader = function (grid, detail, comparator, genWrappers) {
5581
+ var newGrid = $_507pt2nfjfuw8qq2.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);
5582
+ return bundle(newGrid, detail.row(), detail.column());
5583
+ };
5584
+ var makeColumnHeader = function (grid, detail, comparator, genWrappers) {
5585
+ var newGrid = $_507pt2nfjfuw8qq2.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);
5586
+ return bundle(newGrid, detail.row(), detail.column());
5587
+ };
5588
+ var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {
5589
+ var newGrid = $_507pt2nfjfuw8qq2.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);
5590
+ return bundle(newGrid, detail.row(), detail.column());
5591
+ };
5592
+ var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {
5593
+ var newGrid = $_507pt2nfjfuw8qq2.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);
5594
+ return bundle(newGrid, detail.row(), detail.column());
5595
+ };
5596
+ var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {
5597
+ var newGrid = $_22uvfenejfuw8qpx.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);
5598
+ return bundle(newGrid, detail.row(), detail.column());
5599
+ };
5600
+ var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {
5601
+ var newGrid = $_22uvfenejfuw8qpx.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);
5602
+ return bundle(newGrid, detail.row(), detail.column());
5603
+ };
5604
+ var eraseColumns = function (grid, details, comparator, _genWrappers) {
5605
+ var columns = uniqueColumns(details);
5606
+ var newGrid = $_22uvfenejfuw8qpx.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());
5607
+ var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());
5608
+ return outcome(newGrid, cursor);
5609
+ };
5610
+ var eraseRows = function (grid, details, comparator, _genWrappers) {
5611
+ var rows = uniqueRows(details);
5612
+ var newGrid = $_22uvfenejfuw8qpx.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());
5613
+ var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());
5614
+ return outcome(newGrid, cursor);
5615
+ };
5616
+ var mergeCells = function (grid, mergable, comparator, _genWrappers) {
5617
+ var cells = mergable.cells();
5618
+ $_ancl40mqjfuw8qkm.merge(cells);
5619
+ var newGrid = $_72fqzkndjfuw8qpp.merge(grid, mergable.bounds(), comparator, $_20nfr6k7jfuw8q4g.constant(cells[0]));
5620
+ return outcome(newGrid, Option.from(cells[0]));
5621
+ };
5622
+ var unmergeCells = function (grid, unmergable, comparator, genWrappers) {
5623
+ var newGrid = $_tyr3yk5jfuw8q47.foldr(unmergable, function (b, cell) {
5624
+ return $_72fqzkndjfuw8qpp.unmerge(b, cell, comparator, genWrappers.combine(cell));
5625
+ }, grid);
5626
+ return outcome(newGrid, Option.from(unmergable[0]));
5627
+ };
5628
+ var pasteCells = function (grid, pasteDetails, comparator, genWrappers) {
5629
+ var gridify = function (table, generators) {
5630
+ var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
5631
+ var wh = $_2ge24cldjfuw8qa3.generate(list);
5632
+ return $_cw9o3smwjfuw8qm9.toGrid(wh, generators, true);
5633
+ };
5634
+ var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());
5635
+ var startAddress = $_ce5pyrkgjfuw8q5v.address(pasteDetails.row(), pasteDetails.column());
5636
+ var mergedGrid = $_5jycvqnajfuw8qp5.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);
5637
+ return mergedGrid.fold(function () {
5638
+ return outcome(grid, Option.some(pasteDetails.element()));
5639
+ }, function (nuGrid) {
5640
+ var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());
5641
+ return outcome(nuGrid, cursor);
5642
+ });
5643
+ };
5644
+ var gridifyRows = function (rows, generators, example) {
5645
+ var pasteDetails = $_dy3x0nkfjfuw8q5l.fromPastedRows(rows, example);
5646
+ var wh = $_2ge24cldjfuw8qa3.generate(pasteDetails);
5647
+ return $_cw9o3smwjfuw8qm9.toGrid(wh, generators, true);
5648
+ };
5649
+ var pasteRowsBefore = function (grid, pasteDetails, comparator, genWrappers) {
5650
+ var example = grid[pasteDetails.cells[0].row()];
5651
+ var index = pasteDetails.cells[0].row();
5652
+ var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);
5653
+ var mergedGrid = $_5jycvqnajfuw8qp5.insert(index, grid, gridB, pasteDetails.generators(), comparator);
5654
+ var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());
5655
+ return outcome(mergedGrid, cursor);
5656
+ };
5657
+ var pasteRowsAfter = function (grid, pasteDetails, comparator, genWrappers) {
5658
+ var example = grid[pasteDetails.cells[0].row()];
5659
+ var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();
5660
+ var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);
5661
+ var mergedGrid = $_5jycvqnajfuw8qp5.insert(index, grid, gridB, pasteDetails.generators(), comparator);
5662
+ var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());
5663
+ return outcome(mergedGrid, cursor);
5664
+ };
5665
+ var resize = $_cwciisngjfuw8qq6.adjustWidthTo;
5666
+ var $_2i21xzmmjfuw8qjg = {
5667
+ insertRowBefore: $_dis709mtjfuw8qlp.run(insertRowBefore, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5668
+ insertRowsBefore: $_dis709mtjfuw8qlp.run(insertRowsBefore, $_dis709mtjfuw8qlp.onCells, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5669
+ insertRowAfter: $_dis709mtjfuw8qlp.run(insertRowAfter, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5670
+ insertRowsAfter: $_dis709mtjfuw8qlp.run(insertRowsAfter, $_dis709mtjfuw8qlp.onCells, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5671
+ insertColumnBefore: $_dis709mtjfuw8qlp.run(insertColumnBefore, $_dis709mtjfuw8qlp.onCell, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5672
+ insertColumnsBefore: $_dis709mtjfuw8qlp.run(insertColumnsBefore, $_dis709mtjfuw8qlp.onCells, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5673
+ insertColumnAfter: $_dis709mtjfuw8qlp.run(insertColumnAfter, $_dis709mtjfuw8qlp.onCell, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5674
+ insertColumnsAfter: $_dis709mtjfuw8qlp.run(insertColumnsAfter, $_dis709mtjfuw8qlp.onCells, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5675
+ splitCellIntoColumns: $_dis709mtjfuw8qlp.run(splitCellIntoColumns$1, $_dis709mtjfuw8qlp.onCell, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5676
+ splitCellIntoRows: $_dis709mtjfuw8qlp.run(splitCellIntoRows$1, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5677
+ eraseColumns: $_dis709mtjfuw8qlp.run(eraseColumns, $_dis709mtjfuw8qlp.onCells, resize, prune, $_eoocrvmnjfuw8qk1.modification),
5678
+ eraseRows: $_dis709mtjfuw8qlp.run(eraseRows, $_dis709mtjfuw8qlp.onCells, $_20nfr6k7jfuw8q4g.noop, prune, $_eoocrvmnjfuw8qk1.modification),
5679
+ makeColumnHeader: $_dis709mtjfuw8qlp.run(makeColumnHeader, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.transform('row', 'th')),
5680
+ unmakeColumnHeader: $_dis709mtjfuw8qlp.run(unmakeColumnHeader, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.transform(null, 'td')),
5681
+ makeRowHeader: $_dis709mtjfuw8qlp.run(makeRowHeader, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.transform('col', 'th')),
5682
+ unmakeRowHeader: $_dis709mtjfuw8qlp.run(unmakeRowHeader, $_dis709mtjfuw8qlp.onCell, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.transform(null, 'td')),
5683
+ mergeCells: $_dis709mtjfuw8qlp.run(mergeCells, $_dis709mtjfuw8qlp.onMergable, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.merging),
5684
+ unmergeCells: $_dis709mtjfuw8qlp.run(unmergeCells, $_dis709mtjfuw8qlp.onUnmergable, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.merging),
5685
+ pasteCells: $_dis709mtjfuw8qlp.run(pasteCells, $_dis709mtjfuw8qlp.onPaste, resize, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5686
+ pasteRowsBefore: $_dis709mtjfuw8qlp.run(pasteRowsBefore, $_dis709mtjfuw8qlp.onPasteRows, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification),
5687
+ pasteRowsAfter: $_dis709mtjfuw8qlp.run(pasteRowsAfter, $_dis709mtjfuw8qlp.onPasteRows, $_20nfr6k7jfuw8q4g.noop, $_20nfr6k7jfuw8q4g.noop, $_eoocrvmnjfuw8qk1.modification)
5688
+ };
5689
+
5690
+ var getBody$1 = function (editor) {
5691
+ return $_xbeoqkkjfuw8q73.fromDom(editor.getBody());
5692
+ };
5693
+ var getIsRoot = function (editor) {
5694
+ return function (element) {
5695
+ return $_e8rn66kojfuw8q7n.eq(element, getBody$1(editor));
5696
+ };
5697
+ };
5698
+ var removePxSuffix = function (size) {
5699
+ return size ? size.replace(/px$/, '') : '';
5700
+ };
5701
+ var addSizeSuffix = function (size) {
5702
+ if (/^[0-9]+$/.test(size)) {
5703
+ size += 'px';
5704
+ }
5705
+ return size;
5706
+ };
5707
+ var $_5xkhf2nnjfuw8qrq = {
5708
+ getBody: getBody$1,
5709
+ getIsRoot: getIsRoot,
5710
+ addSizeSuffix: addSizeSuffix,
5711
+ removePxSuffix: removePxSuffix
5712
+ };
5713
+
5714
+ var onDirection = function (isLtr, isRtl) {
5715
+ return function (element) {
5716
+ return getDirection(element) === 'rtl' ? isRtl : isLtr;
5717
+ };
5718
+ };
5719
+ var getDirection = function (element) {
5720
+ return $_bfod2hlejfuw8qac.get(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';
5721
+ };
5722
+ var $_a5xia4npjfuw8qs0 = {
5723
+ onDirection: onDirection,
5724
+ getDirection: getDirection
5725
+ };
5726
+
5727
+ var ltr$1 = { isRtl: $_20nfr6k7jfuw8q4g.constant(false) };
5728
+ var rtl$1 = { isRtl: $_20nfr6k7jfuw8q4g.constant(true) };
5729
+ var directionAt = function (element) {
5730
+ var dir = $_a5xia4npjfuw8qs0.getDirection(element);
5731
+ return dir === 'rtl' ? rtl$1 : ltr$1;
5732
+ };
5733
+ var $_4xd1udnojfuw8qrw = { directionAt: directionAt };
5734
+
5735
+ var defaultTableToolbar = [
5736
+ 'tableprops',
5737
+ 'tabledelete',
5738
+ '|',
5739
+ 'tableinsertrowbefore',
5740
+ 'tableinsertrowafter',
5741
+ 'tabledeleterow',
5742
+ '|',
5743
+ 'tableinsertcolbefore',
5744
+ 'tableinsertcolafter',
5745
+ 'tabledeletecol'
5746
+ ];
5747
+ var defaultStyles = {
5748
+ 'border-collapse': 'collapse',
5749
+ 'width': '100%'
5750
+ };
5751
+ var defaultAttributes = { border: '1' };
5752
+ var getDefaultAttributes = function (editor) {
5753
+ return editor.getParam('table_default_attributes', defaultAttributes, 'object');
5754
+ };
5755
+ var getDefaultStyles = function (editor) {
5756
+ return editor.getParam('table_default_styles', defaultStyles, 'object');
5757
+ };
5758
+ var hasTableResizeBars = function (editor) {
5759
+ return editor.getParam('table_resize_bars', true, 'boolean');
5760
+ };
5761
+ var hasTabNavigation = function (editor) {
5762
+ return editor.getParam('table_tab_navigation', true, 'boolean');
5763
+ };
5764
+ var hasAdvancedCellTab = function (editor) {
5765
+ return editor.getParam('table_cell_advtab', true, 'boolean');
5766
+ };
5767
+ var hasAdvancedRowTab = function (editor) {
5768
+ return editor.getParam('table_row_advtab', true, 'boolean');
5769
+ };
5770
+ var hasAdvancedTableTab = function (editor) {
5771
+ return editor.getParam('table_advtab', true, 'boolean');
5772
+ };
5773
+ var hasAppearanceOptions = function (editor) {
5774
+ return editor.getParam('table_appearance_options', true, 'boolean');
5775
+ };
5776
+ var hasTableGrid = function (editor) {
5777
+ return editor.getParam('table_grid', true, 'boolean');
5778
+ };
5779
+ var shouldStyleWithCss = function (editor) {
5780
+ return editor.getParam('table_style_by_css', false, 'boolean');
5781
+ };
5782
+ var getCellClassList = function (editor) {
5783
+ return editor.getParam('table_cell_class_list', [], 'array');
5784
+ };
5785
+ var getRowClassList = function (editor) {
5786
+ return editor.getParam('table_row_class_list', [], 'array');
5787
+ };
5788
+ var getTableClassList = function (editor) {
5789
+ return editor.getParam('table_class_list', [], 'array');
5790
+ };
5791
+ var getColorPickerCallback = function (editor) {
5792
+ return editor.getParam('color_picker_callback');
5793
+ };
5794
+ var isPixelsForced = function (editor) {
5795
+ return editor.getParam('table_responsive_width') === false;
5796
+ };
5797
+ var getCloneElements = function (editor) {
5798
+ var cloneElements = editor.getParam('table_clone_elements');
5799
+ if ($_g6mvnrk8jfuw8q4k.isString(cloneElements)) {
5800
+ return Option.some(cloneElements.split(/[ ,]/));
5801
+ } else if (Array.isArray(cloneElements)) {
5802
+ return Option.some(cloneElements);
5803
+ } else {
5804
+ return Option.none();
5805
+ }
5806
+ };
5807
+ var hasObjectResizing = function (editor) {
5808
+ var objectResizing = editor.getParam('object_resizing', true);
5809
+ return objectResizing === 'table' || objectResizing;
5810
+ };
5811
+ var getToolbar = function (editor) {
5812
+ var toolbar = editor.getParam('table_toolbar', defaultTableToolbar);
5813
+ if (toolbar === '' || toolbar === false) {
5814
+ return [];
5815
+ } else if ($_g6mvnrk8jfuw8q4k.isString(toolbar)) {
5816
+ return toolbar.split(/[ ,]/);
5817
+ } else if ($_g6mvnrk8jfuw8q4k.isArray(toolbar)) {
5818
+ return toolbar;
5819
+ } else {
5820
+ return [];
5821
+ }
5822
+ };
5823
+
5824
+ var fireNewRow = function (editor, row) {
5825
+ return editor.fire('newrow', { node: row });
5826
+ };
5827
+ var fireNewCell = function (editor, cell) {
5828
+ return editor.fire('newcell', { node: cell });
5829
+ };
5830
+
5831
+ var TableActions = function (editor, lazyWire) {
5832
+ var isTableBody = function (editor) {
5833
+ return $_a8gk30l6jfuw8q9c.name($_5xkhf2nnjfuw8qrq.getBody(editor)) === 'table';
5834
+ };
5835
+ var lastRowGuard = function (table) {
5836
+ var size = $_b452wimljfuw8qjd.getGridSize(table);
5837
+ return isTableBody(editor) === false || size.rows() > 1;
5838
+ };
5839
+ var lastColumnGuard = function (table) {
5840
+ var size = $_b452wimljfuw8qjd.getGridSize(table);
5841
+ return isTableBody(editor) === false || size.columns() > 1;
5842
+ };
5843
+ var cloneFormats = getCloneElements(editor);
5844
+ var execute = function (operation, guard, mutate, lazyWire) {
5845
+ return function (table, target) {
5846
+ var dataStyleCells = $_6c9d0hl7jfuw8q9d.descendants(table, 'td[data-mce-style],th[data-mce-style]');
5847
+ $_tyr3yk5jfuw8q47.each(dataStyleCells, function (cell) {
5848
+ $_3q82t2l5jfuw8q93.remove(cell, 'data-mce-style');
5849
+ });
5850
+ var wire = lazyWire();
5851
+ var doc = $_xbeoqkkjfuw8q73.fromDom(editor.getDoc());
5852
+ var direction = TableDirection($_4xd1udnojfuw8qrw.directionAt);
5853
+ var generators = $_5ohg1eljjfuw8qb4.cellOperations(mutate, doc, cloneFormats);
5854
+ return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {
5855
+ $_tyr3yk5jfuw8q47.each(result.newRows(), function (row) {
5856
+ fireNewRow(editor, row.dom());
5857
+ });
5858
+ $_tyr3yk5jfuw8q47.each(result.newCells(), function (cell) {
5859
+ fireNewCell(editor, cell.dom());
5860
+ });
5861
+ return result.cursor().map(function (cell) {
5862
+ var rng = editor.dom.createRng();
5863
+ rng.setStart(cell.dom(), 0);
5864
+ rng.setEnd(cell.dom(), 0);
5865
+ return rng;
5866
+ });
5867
+ }) : Option.none();
5868
+ };
5869
+ };
5870
+ var deleteRow = execute($_2i21xzmmjfuw8qjg.eraseRows, lastRowGuard, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5871
+ var deleteColumn = execute($_2i21xzmmjfuw8qjg.eraseColumns, lastColumnGuard, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5872
+ var insertRowsBefore = execute($_2i21xzmmjfuw8qjg.insertRowsBefore, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5873
+ var insertRowsAfter = execute($_2i21xzmmjfuw8qjg.insertRowsAfter, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5874
+ var insertColumnsBefore = execute($_2i21xzmmjfuw8qjg.insertColumnsBefore, $_20nfr6k7jfuw8q4g.always, $_57e49gm9jfuw8qhh.halve, lazyWire);
5875
+ var insertColumnsAfter = execute($_2i21xzmmjfuw8qjg.insertColumnsAfter, $_20nfr6k7jfuw8q4g.always, $_57e49gm9jfuw8qhh.halve, lazyWire);
5876
+ var mergeCells = execute($_2i21xzmmjfuw8qjg.mergeCells, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5877
+ var unmergeCells = execute($_2i21xzmmjfuw8qjg.unmergeCells, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5878
+ var pasteRowsBefore = execute($_2i21xzmmjfuw8qjg.pasteRowsBefore, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5879
+ var pasteRowsAfter = execute($_2i21xzmmjfuw8qjg.pasteRowsAfter, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5880
+ var pasteCells = execute($_2i21xzmmjfuw8qjg.pasteCells, $_20nfr6k7jfuw8q4g.always, $_20nfr6k7jfuw8q4g.noop, lazyWire);
5881
+ return {
5882
+ deleteRow: deleteRow,
5883
+ deleteColumn: deleteColumn,
5884
+ insertRowsBefore: insertRowsBefore,
5885
+ insertRowsAfter: insertRowsAfter,
5886
+ insertColumnsBefore: insertColumnsBefore,
5887
+ insertColumnsAfter: insertColumnsAfter,
5888
+ mergeCells: mergeCells,
5889
+ unmergeCells: unmergeCells,
5890
+ pasteRowsBefore: pasteRowsBefore,
5891
+ pasteRowsAfter: pasteRowsAfter,
5892
+ pasteCells: pasteCells
5893
+ };
5894
+ };
5895
+
5896
+ var copyRows = function (table, target, generators) {
5897
+ var list = $_dy3x0nkfjfuw8q5l.fromTable(table);
5898
+ var house = $_2ge24cldjfuw8qa3.generate(list);
5899
+ var details = $_dis709mtjfuw8qlp.onCells(house, target);
5900
+ return details.map(function (selectedCells) {
5901
+ var grid = $_cw9o3smwjfuw8qm9.toGrid(house, generators, false);
5902
+ var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());
5903
+ var slicedDetails = $_dis709mtjfuw8qlp.toDetailList(slicedGrid, generators);
5904
+ return $_c9mejomzjfuw8qmn.copy(slicedDetails);
5905
+ });
5906
+ };
5907
+ var $_8a78aqntjfuw8qsp = { copyRows: copyRows };
5908
+
5909
+ var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
5910
+
5911
+ var getTDTHOverallStyle = function (dom, elm, name) {
5912
+ var cells = dom.select('td,th', elm);
5913
+ var firstChildStyle;
5914
+ var checkChildren = function (firstChildStyle, elms) {
5915
+ for (var i = 0; i < elms.length; i++) {
5916
+ var currentStyle = dom.getStyle(elms[i], name);
5917
+ if (typeof firstChildStyle === 'undefined') {
5918
+ firstChildStyle = currentStyle;
5919
+ }
5920
+ if (firstChildStyle !== currentStyle) {
5921
+ return '';
5922
+ }
5923
+ }
5924
+ return firstChildStyle;
5925
+ };
5926
+ firstChildStyle = checkChildren(firstChildStyle, cells);
5927
+ return firstChildStyle;
5928
+ };
5929
+ var applyAlign = function (editor, elm, name) {
5930
+ if (name) {
5931
+ editor.formatter.apply('align' + name, {}, elm);
5932
+ }
5933
+ };
5934
+ var applyVAlign = function (editor, elm, name) {
5935
+ if (name) {
5936
+ editor.formatter.apply('valign' + name, {}, elm);
5937
+ }
5938
+ };
5939
+ var unApplyAlign = function (editor, elm) {
5940
+ global$2.each('left center right'.split(' '), function (name) {
5941
+ editor.formatter.remove('align' + name, {}, elm);
5942
+ });
5943
+ };
5944
+ var unApplyVAlign = function (editor, elm) {
5945
+ global$2.each('top middle bottom'.split(' '), function (name) {
5946
+ editor.formatter.remove('valign' + name, {}, elm);
5947
+ });
5948
+ };
5949
+ var $_ch6rvmnwjfuw8qt7 = {
5950
+ applyAlign: applyAlign,
5951
+ applyVAlign: applyVAlign,
5952
+ unApplyAlign: unApplyAlign,
5953
+ unApplyVAlign: unApplyVAlign,
5954
+ getTDTHOverallStyle: getTDTHOverallStyle
5955
+ };
5956
+
5957
+ var buildListItems = function (inputList, itemCallback, startItems) {
5958
+ var appendItems = function (values, output) {
5959
+ output = output || [];
5960
+ global$2.each(values, function (item) {
5961
+ var menuItem = { text: item.text || item.title };
5962
+ if (item.menu) {
5963
+ menuItem.menu = appendItems(item.menu);
5964
+ } else {
5965
+ menuItem.value = item.value;
5966
+ if (itemCallback) {
5967
+ itemCallback(menuItem);
5968
+ }
5969
+ }
5970
+ output.push(menuItem);
5971
+ });
5972
+ return output;
5973
+ };
5974
+ return appendItems(inputList, startItems || []);
5975
+ };
5976
+ var updateStyleField = function (editor, evt) {
5977
+ var dom = editor.dom;
5978
+ var rootControl = evt.control.rootControl;
5979
+ var data = rootControl.toJSON();
5980
+ var css = dom.parseStyle(data.style);
5981
+ if (evt.control.name() === 'style') {
5982
+ rootControl.find('#borderStyle').value(css['border-style'] || '')[0].fire('select');
5983
+ rootControl.find('#borderColor').value(css['border-color'] || '')[0].fire('change');
5984
+ rootControl.find('#backgroundColor').value(css['background-color'] || '')[0].fire('change');
5985
+ rootControl.find('#width').value(css.width || '').fire('change');
5986
+ rootControl.find('#height').value(css.height || '').fire('change');
5987
+ } else {
5988
+ css['border-style'] = data.borderStyle;
5989
+ css['border-color'] = data.borderColor;
5990
+ css['background-color'] = data.backgroundColor;
5991
+ css.width = data.width ? $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.width) : '';
5992
+ css.height = data.height ? $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.height) : '';
5993
+ }
5994
+ rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
5995
+ };
5996
+ var extractAdvancedStyles = function (dom, elm) {
5997
+ var css = dom.parseStyle(dom.getAttrib(elm, 'style'));
5998
+ var data = {};
5999
+ if (css['border-style']) {
6000
+ data.borderStyle = css['border-style'];
6001
+ }
6002
+ if (css['border-color']) {
6003
+ data.borderColor = css['border-color'];
6004
+ }
6005
+ if (css['background-color']) {
6006
+ data.backgroundColor = css['background-color'];
6007
+ }
6008
+ data.style = dom.serializeStyle(css);
6009
+ return data;
6010
+ };
6011
+ var createStyleForm = function (editor) {
6012
+ var createColorPickAction = function () {
6013
+ var colorPickerCallback = getColorPickerCallback(editor);
6014
+ if (colorPickerCallback) {
6015
+ return function (evt) {
6016
+ return colorPickerCallback.call(editor, function (value) {
6017
+ evt.control.value(value).fire('change');
6018
+ }, evt.control.value());
6019
+ };
6020
+ }
6021
+ };
6022
+ return {
6023
+ title: 'Advanced',
6024
+ type: 'form',
6025
+ defaults: { onchange: $_20nfr6k7jfuw8q4g.curry(updateStyleField, editor) },
6026
+ items: [
6027
+ {
6028
+ label: 'Style',
6029
+ name: 'style',
6030
+ type: 'textbox'
6031
+ },
6032
+ {
6033
+ type: 'form',
6034
+ padding: 0,
6035
+ formItemDefaults: {
6036
+ layout: 'grid',
6037
+ alignH: [
6038
+ 'start',
6039
+ 'right'
6040
+ ]
6041
+ },
6042
+ defaults: { size: 7 },
6043
+ items: [
6044
+ {
6045
+ label: 'Border style',
6046
+ type: 'listbox',
6047
+ name: 'borderStyle',
6048
+ width: 90,
6049
+ onselect: $_20nfr6k7jfuw8q4g.curry(updateStyleField, editor),
6050
+ values: [
6051
+ {
6052
+ text: 'Select...',
6053
+ value: ''
6054
+ },
6055
+ {
6056
+ text: 'Solid',
6057
+ value: 'solid'
6058
+ },
6059
+ {
6060
+ text: 'Dotted',
6061
+ value: 'dotted'
6062
+ },
6063
+ {
6064
+ text: 'Dashed',
6065
+ value: 'dashed'
6066
+ },
6067
+ {
6068
+ text: 'Double',
6069
+ value: 'double'
6070
+ },
6071
+ {
6072
+ text: 'Groove',
6073
+ value: 'groove'
6074
+ },
6075
+ {
6076
+ text: 'Ridge',
6077
+ value: 'ridge'
6078
+ },
6079
+ {
6080
+ text: 'Inset',
6081
+ value: 'inset'
6082
+ },
6083
+ {
6084
+ text: 'Outset',
6085
+ value: 'outset'
6086
+ },
6087
+ {
6088
+ text: 'None',
6089
+ value: 'none'
6090
+ },
6091
+ {
6092
+ text: 'Hidden',
6093
+ value: 'hidden'
6094
+ }
6095
+ ]
6096
+ },
6097
+ {
6098
+ label: 'Border color',
6099
+ type: 'colorbox',
6100
+ name: 'borderColor',
6101
+ onaction: createColorPickAction()
6102
+ },
6103
+ {
6104
+ label: 'Background color',
6105
+ type: 'colorbox',
6106
+ name: 'backgroundColor',
6107
+ onaction: createColorPickAction()
6108
+ }
6109
+ ]
6110
+ }
6111
+ ]
6112
+ };
6113
+ };
6114
+ var $_2fnzp5nxjfuw8qt9 = {
6115
+ createStyleForm: createStyleForm,
6116
+ buildListItems: buildListItems,
6117
+ updateStyleField: updateStyleField,
6118
+ extractAdvancedStyles: extractAdvancedStyles
6119
+ };
6120
+
6121
+ var updateStyles = function (elm, cssText) {
6122
+ delete elm.dataset.mceStyle;
6123
+ elm.style.cssText += ';' + cssText;
6124
+ };
6125
+ var extractDataFromElement = function (editor, elm) {
6126
+ var dom = editor.dom;
6127
+ var data = {
6128
+ width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),
6129
+ height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),
6130
+ scope: dom.getAttrib(elm, 'scope'),
6131
+ class: dom.getAttrib(elm, 'class'),
6132
+ type: elm.nodeName.toLowerCase(),
6133
+ style: '',
6134
+ align: '',
6135
+ valign: ''
6136
+ };
6137
+ global$2.each('left center right'.split(' '), function (name) {
6138
+ if (editor.formatter.matchNode(elm, 'align' + name)) {
6139
+ data.align = name;
6140
+ }
6141
+ });
6142
+ global$2.each('top middle bottom'.split(' '), function (name) {
6143
+ if (editor.formatter.matchNode(elm, 'valign' + name)) {
6144
+ data.valign = name;
6145
+ }
6146
+ });
6147
+ if (hasAdvancedCellTab(editor)) {
6148
+ global$2.extend(data, $_2fnzp5nxjfuw8qt9.extractAdvancedStyles(dom, elm));
6149
+ }
6150
+ return data;
6151
+ };
6152
+ var onSubmitCellForm = function (editor, cells, evt) {
6153
+ var dom = editor.dom;
6154
+ var data;
6155
+ function setAttrib(elm, name, value) {
6156
+ if (value) {
6157
+ dom.setAttrib(elm, name, value);
6158
+ }
6159
+ }
6160
+ function setStyle(elm, name, value) {
6161
+ if (value) {
6162
+ dom.setStyle(elm, name, value);
6163
+ }
6164
+ }
6165
+ $_2fnzp5nxjfuw8qt9.updateStyleField(editor, evt);
6166
+ data = evt.control.rootControl.toJSON();
6167
+ editor.undoManager.transact(function () {
6168
+ global$2.each(cells, function (cellElm) {
6169
+ setAttrib(cellElm, 'scope', data.scope);
6170
+ if (cells.length === 1) {
6171
+ setAttrib(cellElm, 'style', data.style);
6172
+ } else {
6173
+ updateStyles(cellElm, data.style);
6174
+ }
6175
+ setAttrib(cellElm, 'class', data.class);
6176
+ setStyle(cellElm, 'width', $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.width));
6177
+ setStyle(cellElm, 'height', $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.height));
6178
+ if (data.type && cellElm.nodeName.toLowerCase() !== data.type) {
6179
+ cellElm = dom.rename(cellElm, data.type);
6180
+ }
6181
+ if (cells.length === 1) {
6182
+ $_ch6rvmnwjfuw8qt7.unApplyAlign(editor, cellElm);
6183
+ $_ch6rvmnwjfuw8qt7.unApplyVAlign(editor, cellElm);
6184
+ }
6185
+ if (data.align) {
6186
+ $_ch6rvmnwjfuw8qt7.applyAlign(editor, cellElm, data.align);
6187
+ }
6188
+ if (data.valign) {
6189
+ $_ch6rvmnwjfuw8qt7.applyVAlign(editor, cellElm, data.valign);
6190
+ }
6191
+ });
6192
+ editor.focus();
6193
+ });
6194
+ };
6195
+ var open = function (editor) {
6196
+ var cellElm, data, classListCtrl, cells = [];
6197
+ cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');
6198
+ cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');
6199
+ if (!cells.length && cellElm) {
6200
+ cells.push(cellElm);
6201
+ }
6202
+ cellElm = cellElm || cells[0];
6203
+ if (!cellElm) {
6204
+ return;
6205
+ }
6206
+ if (cells.length > 1) {
6207
+ data = {
6208
+ width: '',
6209
+ height: '',
6210
+ scope: '',
6211
+ class: '',
6212
+ align: '',
6213
+ valign: '',
6214
+ style: '',
6215
+ type: cellElm.nodeName.toLowerCase()
6216
+ };
6217
+ } else {
6218
+ data = extractDataFromElement(editor, cellElm);
6219
+ }
6220
+ if (getCellClassList(editor).length > 0) {
6221
+ classListCtrl = {
6222
+ name: 'class',
6223
+ type: 'listbox',
6224
+ label: 'Class',
6225
+ values: $_2fnzp5nxjfuw8qt9.buildListItems(getCellClassList(editor), function (item) {
6226
+ if (item.value) {
6227
+ item.textStyle = function () {
6228
+ return editor.formatter.getCssText({
6229
+ block: 'td',
6230
+ classes: [item.value]
6231
+ });
6232
+ };
6233
+ }
6234
+ })
6235
+ };
6236
+ }
6237
+ var generalCellForm = {
6238
+ type: 'form',
6239
+ layout: 'flex',
6240
+ direction: 'column',
6241
+ labelGapCalc: 'children',
6242
+ padding: 0,
6243
+ items: [
6244
+ {
6245
+ type: 'form',
6246
+ layout: 'grid',
6247
+ columns: 2,
6248
+ labelGapCalc: false,
6249
+ padding: 0,
6250
+ defaults: {
6251
+ type: 'textbox',
6252
+ maxWidth: 50
6253
+ },
6254
+ items: [
6255
+ {
6256
+ label: 'Width',
6257
+ name: 'width',
6258
+ onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6259
+ },
6260
+ {
6261
+ label: 'Height',
6262
+ name: 'height',
6263
+ onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6264
+ },
6265
+ {
6266
+ label: 'Cell type',
6267
+ name: 'type',
6268
+ type: 'listbox',
6269
+ text: 'None',
6270
+ minWidth: 90,
6271
+ maxWidth: null,
6272
+ values: [
6273
+ {
6274
+ text: 'Cell',
6275
+ value: 'td'
6276
+ },
6277
+ {
6278
+ text: 'Header cell',
6279
+ value: 'th'
6280
+ }
6281
+ ]
6282
+ },
6283
+ {
6284
+ label: 'Scope',
6285
+ name: 'scope',
6286
+ type: 'listbox',
6287
+ text: 'None',
6288
+ minWidth: 90,
6289
+ maxWidth: null,
6290
+ values: [
6291
+ {
6292
+ text: 'None',
6293
+ value: ''
6294
+ },
6295
+ {
6296
+ text: 'Row',
6297
+ value: 'row'
6298
+ },
6299
+ {
6300
+ text: 'Column',
6301
+ value: 'col'
6302
+ },
6303
+ {
6304
+ text: 'Row group',
6305
+ value: 'rowgroup'
6306
+ },
6307
+ {
6308
+ text: 'Column group',
6309
+ value: 'colgroup'
6310
+ }
6311
+ ]
6312
+ },
6313
+ {
6314
+ label: 'H Align',
6315
+ name: 'align',
6316
+ type: 'listbox',
6317
+ text: 'None',
6318
+ minWidth: 90,
6319
+ maxWidth: null,
6320
+ values: [
6321
+ {
6322
+ text: 'None',
6323
+ value: ''
6324
+ },
6325
+ {
6326
+ text: 'Left',
6327
+ value: 'left'
6328
+ },
6329
+ {
6330
+ text: 'Center',
6331
+ value: 'center'
6332
+ },
6333
+ {
6334
+ text: 'Right',
6335
+ value: 'right'
6336
+ }
6337
+ ]
6338
+ },
6339
+ {
6340
+ label: 'V Align',
6341
+ name: 'valign',
6342
+ type: 'listbox',
6343
+ text: 'None',
6344
+ minWidth: 90,
6345
+ maxWidth: null,
6346
+ values: [
6347
+ {
6348
+ text: 'None',
6349
+ value: ''
6350
+ },
6351
+ {
6352
+ text: 'Top',
6353
+ value: 'top'
6354
+ },
6355
+ {
6356
+ text: 'Middle',
6357
+ value: 'middle'
6358
+ },
6359
+ {
6360
+ text: 'Bottom',
6361
+ value: 'bottom'
6362
+ }
6363
+ ]
6364
+ }
6365
+ ]
6366
+ },
6367
+ classListCtrl
6368
+ ]
6369
+ };
6370
+ if (hasAdvancedCellTab(editor)) {
6371
+ editor.windowManager.open({
6372
+ title: 'Cell properties',
6373
+ bodyType: 'tabpanel',
6374
+ data: data,
6375
+ body: [
6376
+ {
6377
+ title: 'General',
6378
+ type: 'form',
6379
+ items: generalCellForm
6380
+ },
6381
+ $_2fnzp5nxjfuw8qt9.createStyleForm(editor)
6382
+ ],
6383
+ onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitCellForm, editor, cells)
6384
+ });
6385
+ } else {
6386
+ editor.windowManager.open({
6387
+ title: 'Cell properties',
6388
+ data: data,
6389
+ body: generalCellForm,
6390
+ onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitCellForm, editor, cells)
6391
+ });
6392
+ }
6393
+ };
6394
+ var $_48j9iinvjfuw8qsu = { open: open };
6395
+
6396
+ var extractDataFromElement$1 = function (editor, elm) {
6397
+ var dom = editor.dom;
6398
+ var data = {
6399
+ height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),
6400
+ scope: dom.getAttrib(elm, 'scope'),
6401
+ class: dom.getAttrib(elm, 'class'),
6402
+ align: '',
6403
+ style: '',
6404
+ type: elm.parentNode.nodeName.toLowerCase()
6405
+ };
6406
+ global$2.each('left center right'.split(' '), function (name) {
6407
+ if (editor.formatter.matchNode(elm, 'align' + name)) {
6408
+ data.align = name;
6409
+ }
6410
+ });
6411
+ if (hasAdvancedRowTab(editor)) {
6412
+ global$2.extend(data, $_2fnzp5nxjfuw8qt9.extractAdvancedStyles(dom, elm));
6413
+ }
6414
+ return data;
6415
+ };
6416
+ var switchRowType = function (dom, rowElm, toType) {
6417
+ var tableElm = dom.getParent(rowElm, 'table');
6418
+ var oldParentElm = rowElm.parentNode;
6419
+ var parentElm = dom.select(toType, tableElm)[0];
6420
+ if (!parentElm) {
6421
+ parentElm = dom.create(toType);
6422
+ if (tableElm.firstChild) {
6423
+ if (tableElm.firstChild.nodeName === 'CAPTION') {
6424
+ dom.insertAfter(parentElm, tableElm.firstChild);
6425
+ } else {
6426
+ tableElm.insertBefore(parentElm, tableElm.firstChild);
6427
+ }
6428
+ } else {
6429
+ tableElm.appendChild(parentElm);
6430
+ }
6431
+ }
6432
+ parentElm.appendChild(rowElm);
6433
+ if (!oldParentElm.hasChildNodes()) {
6434
+ dom.remove(oldParentElm);
6435
+ }
6436
+ };
6437
+ function onSubmitRowForm(editor, rows, oldData, evt) {
6438
+ var dom = editor.dom;
6439
+ function setAttrib(elm, name, value) {
6440
+ if (value) {
6441
+ dom.setAttrib(elm, name, value);
6442
+ }
6443
+ }
6444
+ function setStyle(elm, name, value) {
6445
+ if (value) {
6446
+ dom.setStyle(elm, name, value);
6447
+ }
6448
+ }
6449
+ $_2fnzp5nxjfuw8qt9.updateStyleField(editor, evt);
6450
+ var data = evt.control.rootControl.toJSON();
6451
+ editor.undoManager.transact(function () {
6452
+ global$2.each(rows, function (rowElm) {
6453
+ setAttrib(rowElm, 'scope', data.scope);
6454
+ setAttrib(rowElm, 'style', data.style);
6455
+ setAttrib(rowElm, 'class', data.class);
6456
+ setStyle(rowElm, 'height', $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.height));
6457
+ if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {
6458
+ switchRowType(editor.dom, rowElm, data.type);
6459
+ }
6460
+ if (data.align !== oldData.align) {
6461
+ $_ch6rvmnwjfuw8qt7.unApplyAlign(editor, rowElm);
6462
+ $_ch6rvmnwjfuw8qt7.applyAlign(editor, rowElm, data.align);
6463
+ }
6464
+ });
6465
+ editor.focus();
6466
+ });
6467
+ }
6468
+ var open$1 = function (editor) {
6469
+ var dom = editor.dom;
6470
+ var tableElm, cellElm, rowElm, classListCtrl, data;
6471
+ var rows = [];
6472
+ var generalRowForm;
6473
+ tableElm = dom.getParent(editor.selection.getStart(), 'table');
6474
+ cellElm = dom.getParent(editor.selection.getStart(), 'td,th');
6475
+ global$2.each(tableElm.rows, function (row) {
6476
+ global$2.each(row.cells, function (cell) {
6477
+ if (dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) {
6478
+ rows.push(row);
6479
+ return false;
6480
+ }
6481
+ });
6482
+ });
6483
+ rowElm = rows[0];
6484
+ if (!rowElm) {
6485
+ return;
6486
+ }
6487
+ if (rows.length > 1) {
6488
+ data = {
6489
+ height: '',
6490
+ scope: '',
6491
+ style: '',
6492
+ class: '',
6493
+ align: '',
6494
+ type: rowElm.parentNode.nodeName.toLowerCase()
6495
+ };
6496
+ } else {
6497
+ data = extractDataFromElement$1(editor, rowElm);
6498
+ }
6499
+ if (getRowClassList(editor).length > 0) {
6500
+ classListCtrl = {
6501
+ name: 'class',
6502
+ type: 'listbox',
6503
+ label: 'Class',
6504
+ values: $_2fnzp5nxjfuw8qt9.buildListItems(getRowClassList(editor), function (item) {
6505
+ if (item.value) {
6506
+ item.textStyle = function () {
6507
+ return editor.formatter.getCssText({
6508
+ block: 'tr',
6509
+ classes: [item.value]
6510
+ });
6511
+ };
6512
+ }
6513
+ })
6514
+ };
6515
+ }
6516
+ generalRowForm = {
6517
+ type: 'form',
6518
+ columns: 2,
6519
+ padding: 0,
6520
+ defaults: { type: 'textbox' },
6521
+ items: [
6522
+ {
6523
+ type: 'listbox',
6524
+ name: 'type',
6525
+ label: 'Row type',
6526
+ text: 'Header',
6527
+ maxWidth: null,
6528
+ values: [
6529
+ {
6530
+ text: 'Header',
6531
+ value: 'thead'
6532
+ },
6533
+ {
6534
+ text: 'Body',
6535
+ value: 'tbody'
6536
+ },
6537
+ {
6538
+ text: 'Footer',
6539
+ value: 'tfoot'
6540
+ }
6541
+ ]
6542
+ },
6543
+ {
6544
+ type: 'listbox',
6545
+ name: 'align',
6546
+ label: 'Alignment',
6547
+ text: 'None',
6548
+ maxWidth: null,
6549
+ values: [
6550
+ {
6551
+ text: 'None',
6552
+ value: ''
6553
+ },
6554
+ {
6555
+ text: 'Left',
6556
+ value: 'left'
6557
+ },
6558
+ {
6559
+ text: 'Center',
6560
+ value: 'center'
6561
+ },
6562
+ {
6563
+ text: 'Right',
6564
+ value: 'right'
6565
+ }
6566
+ ]
6567
+ },
6568
+ {
6569
+ label: 'Height',
6570
+ name: 'height'
6571
+ },
6572
+ classListCtrl
6573
+ ]
6574
+ };
6575
+ if (hasAdvancedRowTab(editor)) {
6576
+ editor.windowManager.open({
6577
+ title: 'Row properties',
6578
+ data: data,
6579
+ bodyType: 'tabpanel',
6580
+ body: [
6581
+ {
6582
+ title: 'General',
6583
+ type: 'form',
6584
+ items: generalRowForm
6585
+ },
6586
+ $_2fnzp5nxjfuw8qt9.createStyleForm(editor)
6587
+ ],
6588
+ onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitRowForm, editor, rows, data)
6589
+ });
6590
+ } else {
6591
+ editor.windowManager.open({
6592
+ title: 'Row properties',
6593
+ data: data,
6594
+ body: generalRowForm,
6595
+ onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitRowForm, editor, rows, data)
6596
+ });
6597
+ }
6598
+ };
6599
+ var $_cshv4qnyjfuw8qtf = { open: open$1 };
6600
+
6601
+ var global$3 = tinymce.util.Tools.resolve('tinymce.Env');
6602
+
6603
+ var DefaultRenderOptions = {
6604
+ styles: {
6605
+ 'border-collapse': 'collapse',
6606
+ width: '100%'
6607
+ },
6608
+ attributes: { border: '1' },
6609
+ percentages: true
6610
+ };
6611
+ var makeTable = function () {
6612
+ return $_xbeoqkkjfuw8q73.fromTag('table');
6613
+ };
6614
+ var tableBody = function () {
6615
+ return $_xbeoqkkjfuw8q73.fromTag('tbody');
6616
+ };
6617
+ var tableRow = function () {
6618
+ return $_xbeoqkkjfuw8q73.fromTag('tr');
6619
+ };
6620
+ var tableHeaderCell = function () {
6621
+ return $_xbeoqkkjfuw8q73.fromTag('th');
6622
+ };
6623
+ var tableCell = function () {
6624
+ return $_xbeoqkkjfuw8q73.fromTag('td');
6625
+ };
6626
+ var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {
6627
+ if (renderOpts === void 0) {
6628
+ renderOpts = DefaultRenderOptions;
6629
+ }
6630
+ var table = makeTable();
6631
+ $_bfod2hlejfuw8qac.setAll(table, renderOpts.styles);
6632
+ $_3q82t2l5jfuw8q93.setAll(table, renderOpts.attributes);
6633
+ var tbody = tableBody();
6634
+ $_fatuxylgjfuw8qav.append(table, tbody);
6635
+ var trs = [];
6636
+ for (var i = 0; i < rows; i++) {
6637
+ var tr = tableRow();
6638
+ for (var j = 0; j < columns; j++) {
6639
+ var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();
6640
+ if (j < columnHeaders) {
6641
+ $_3q82t2l5jfuw8q93.set(td, 'scope', 'row');
6642
+ }
6643
+ if (i < rowHeaders) {
6644
+ $_3q82t2l5jfuw8q93.set(td, 'scope', 'col');
6645
+ }
6646
+ $_fatuxylgjfuw8qav.append(td, $_xbeoqkkjfuw8q73.fromTag('br'));
6647
+ if (renderOpts.percentages) {
6648
+ $_bfod2hlejfuw8qac.set(td, 'width', 100 / columns + '%');
6649
+ }
6650
+ $_fatuxylgjfuw8qav.append(tr, td);
6651
+ }
6652
+ trs.push(tr);
6653
+ }
6654
+ $_9zaoqflijfuw8qb0.append(tbody, trs);
6655
+ return table;
6656
+ };
6657
+
6658
+ var get$7 = function (element) {
6659
+ return element.dom().innerHTML;
6660
+ };
6661
+ var set$5 = function (element, content) {
6662
+ var owner = $_s8scrkmjfuw8q7a.owner(element);
6663
+ var docDom = owner.dom();
6664
+ var fragment = $_xbeoqkkjfuw8q73.fromDom(docDom.createDocumentFragment());
6665
+ var contentElements = $_du13u9lpjfuw8qce.fromHtml(content, docDom);
6666
+ $_9zaoqflijfuw8qb0.append(fragment, contentElements);
6667
+ $_fl1deelhjfuw8qax.empty(element);
6668
+ $_fatuxylgjfuw8qav.append(element, fragment);
6669
+ };
6670
+ var getOuter$2 = function (element) {
6671
+ var container = $_xbeoqkkjfuw8q73.fromTag('div');
6672
+ var clone = $_xbeoqkkjfuw8q73.fromDom(element.dom().cloneNode(true));
6673
+ $_fatuxylgjfuw8qav.append(container, clone);
6674
+ return get$7(container);
6675
+ };
6676
+ var $_76qisuo4jfuw8qut = {
6677
+ get: get$7,
6678
+ set: set$5,
6679
+ getOuter: getOuter$2
6680
+ };
6681
+
6682
+ var placeCaretInCell = function (editor, cell) {
6683
+ editor.selection.select(cell.dom(), true);
6684
+ editor.selection.collapse(true);
6685
+ };
6686
+ var selectFirstCellInTable = function (editor, tableElm) {
6687
+ $_8wdrbmlajfuw8q9m.descendant(tableElm, 'td,th').each($_20nfr6k7jfuw8q4g.curry(placeCaretInCell, editor));
6688
+ };
6689
+ var fireEvents = function (editor, table) {
6690
+ $_tyr3yk5jfuw8q47.each($_6c9d0hl7jfuw8q9d.descendants(table, 'tr'), function (row) {
6691
+ fireNewRow(editor, row.dom());
6692
+ $_tyr3yk5jfuw8q47.each($_6c9d0hl7jfuw8q9d.descendants(row, 'th,td'), function (cell) {
6693
+ fireNewCell(editor, cell.dom());
6694
+ });
6695
+ });
6696
+ };
6697
+ var isPercentage = function (width) {
6698
+ return $_g6mvnrk8jfuw8q4k.isString(width) && width.indexOf('%') !== -1;
6699
+ };
6700
+ var insert$1 = function (editor, columns, rows) {
6701
+ var defaultStyles = getDefaultStyles(editor);
6702
+ var options = {
6703
+ styles: defaultStyles,
6704
+ attributes: getDefaultAttributes(editor),
6705
+ percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)
6706
+ };
6707
+ var table = render$1(rows, columns, 0, 0, options);
6708
+ $_3q82t2l5jfuw8q93.set(table, 'data-mce-id', '__mce');
6709
+ var html = $_76qisuo4jfuw8qut.getOuter(table);
6710
+ editor.insertContent(html);
6711
+ return $_8wdrbmlajfuw8q9m.descendant($_5xkhf2nnjfuw8qrq.getBody(editor), 'table[data-mce-id="__mce"]').map(function (table) {
6712
+ if (isPixelsForced(editor)) {
6713
+ $_bfod2hlejfuw8qac.set(table, 'width', $_bfod2hlejfuw8qac.get(table, 'width'));
6714
+ }
6715
+ $_3q82t2l5jfuw8q93.remove(table, 'data-mce-id');
6716
+ fireEvents(editor, table);
6717
+ selectFirstCellInTable(editor, table);
6718
+ return table.dom();
6719
+ }).getOr(null);
6720
+ };
6721
+ var $_1mq3b3o1jfuw8qtu = { insert: insert$1 };
6722
+
6723
+ function styleTDTH(dom, elm, name, value) {
6724
+ if (elm.tagName === 'TD' || elm.tagName === 'TH') {
6725
+ dom.setStyle(elm, name, value);
6726
+ } else {
6727
+ if (elm.children) {
6728
+ for (var i = 0; i < elm.children.length; i++) {
6729
+ styleTDTH(dom, elm.children[i], name, value);
6730
+ }
6731
+ }
6732
+ }
6733
+ }
6734
+ var extractDataFromElement$2 = function (editor, tableElm) {
6735
+ var dom = editor.dom;
6736
+ var data = {
6737
+ width: dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width'),
6738
+ height: dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height'),
6739
+ cellspacing: dom.getStyle(tableElm, 'border-spacing') || dom.getAttrib(tableElm, 'cellspacing'),
6740
+ cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || $_ch6rvmnwjfuw8qt7.getTDTHOverallStyle(editor.dom, tableElm, 'padding'),
6741
+ border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || $_ch6rvmnwjfuw8qt7.getTDTHOverallStyle(editor.dom, tableElm, 'border'),
6742
+ borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'),
6743
+ caption: !!dom.select('caption', tableElm)[0],
6744
+ class: dom.getAttrib(tableElm, 'class')
6745
+ };
6746
+ global$2.each('left center right'.split(' '), function (name) {
6747
+ if (editor.formatter.matchNode(tableElm, 'align' + name)) {
6748
+ data.align = name;
6749
+ }
6750
+ });
6751
+ if (hasAdvancedTableTab(editor)) {
6752
+ global$2.extend(data, $_2fnzp5nxjfuw8qt9.extractAdvancedStyles(dom, tableElm));
6753
+ }
6754
+ return data;
6755
+ };
6756
+ var applyDataToElement = function (editor, tableElm, data) {
6757
+ var dom = editor.dom;
6758
+ var attrs = {};
6759
+ var styles = {};
6760
+ attrs.class = data.class;
6761
+ styles.height = $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.height);
6762
+ if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {
6763
+ attrs.width = $_5xkhf2nnjfuw8qrq.removePxSuffix(data.width);
6764
+ } else {
6765
+ styles.width = $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.width);
6766
+ }
6767
+ if (shouldStyleWithCss(editor)) {
6768
+ styles['border-width'] = $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.border);
6769
+ styles['border-spacing'] = $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.cellspacing);
6770
+ global$2.extend(attrs, {
6771
+ 'data-mce-border-color': data.borderColor,
6772
+ 'data-mce-cell-padding': data.cellpadding,
6773
+ 'data-mce-border': data.border
6774
+ });
6775
+ } else {
6776
+ global$2.extend(attrs, {
6777
+ border: data.border,
6778
+ cellpadding: data.cellpadding,
6779
+ cellspacing: data.cellspacing
6780
+ });
6781
+ }
6782
+ if (shouldStyleWithCss(editor)) {
6783
+ if (tableElm.children) {
6784
+ for (var i = 0; i < tableElm.children.length; i++) {
6785
+ styleTDTH(dom, tableElm.children[i], {
6786
+ 'border-width': $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.border),
6787
+ 'border-color': data.borderColor,
6788
+ 'padding': $_5xkhf2nnjfuw8qrq.addSizeSuffix(data.cellpadding)
6789
+ });
6790
+ }
6791
+ }
6792
+ }
6793
+ if (data.style) {
6794
+ global$2.extend(styles, dom.parseStyle(data.style));
6795
+ } else {
6796
+ styles = global$2.extend({}, dom.parseStyle(dom.getAttrib(tableElm, 'style')), styles);
6797
+ }
6798
+ attrs.style = dom.serializeStyle(styles);
6799
+ dom.setAttribs(tableElm, attrs);
6800
+ };
6801
+ var onSubmitTableForm = function (editor, tableElm, evt) {
6802
+ var dom = editor.dom;
6803
+ var captionElm;
6804
+ var data;
6805
+ $_2fnzp5nxjfuw8qt9.updateStyleField(editor, evt);
6806
+ data = evt.control.rootControl.toJSON();
6807
+ if (data.class === false) {
6808
+ delete data.class;
6809
+ }
6810
+ editor.undoManager.transact(function () {
6811
+ if (!tableElm) {
6812
+ tableElm = $_1mq3b3o1jfuw8qtu.insert(editor, data.cols || 1, data.rows || 1);
6813
+ }
6814
+ applyDataToElement(editor, tableElm, data);
6815
+ captionElm = dom.select('caption', tableElm)[0];
6816
+ if (captionElm && !data.caption) {
6817
+ dom.remove(captionElm);
6818
+ }
6819
+ if (!captionElm && data.caption) {
6820
+ captionElm = dom.create('caption');
6821
+ captionElm.innerHTML = !global$3.ie ? '<br data-mce-bogus="1"/>' : '\xA0';
6822
+ tableElm.insertBefore(captionElm, tableElm.firstChild);
6823
+ }
6824
+ $_ch6rvmnwjfuw8qt7.unApplyAlign(editor, tableElm);
6825
+ if (data.align) {
6826
+ $_ch6rvmnwjfuw8qt7.applyAlign(editor, tableElm, data.align);
6827
+ }
6828
+ editor.focus();
6829
+ editor.addVisual();
6830
+ });
6831
+ };
6832
+ var open$2 = function (editor, isProps) {
6833
+ var dom = editor.dom;
6834
+ var tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm;
6835
+ if (isProps === true) {
6836
+ tableElm = dom.getParent(editor.selection.getStart(), 'table');
6837
+ if (tableElm) {
6838
+ data = extractDataFromElement$2(editor, tableElm);
6839
+ }
6840
+ } else {
6841
+ colsCtrl = {
6842
+ label: 'Cols',
6843
+ name: 'cols'
6844
+ };
6845
+ rowsCtrl = {
6846
+ label: 'Rows',
6847
+ name: 'rows'
6848
+ };
6849
+ }
6850
+ if (getTableClassList(editor).length > 0) {
6851
+ if (data.class) {
6852
+ data.class = data.class.replace(/\s*mce\-item\-table\s*/g, '');
6853
+ }
6854
+ classListCtrl = {
6855
+ name: 'class',
6856
+ type: 'listbox',
6857
+ label: 'Class',
6858
+ values: $_2fnzp5nxjfuw8qt9.buildListItems(getTableClassList(editor), function (item) {
6859
+ if (item.value) {
6860
+ item.textStyle = function () {
6861
+ return editor.formatter.getCssText({
6862
+ block: 'table',
6863
+ classes: [item.value]
6864
+ });
6865
+ };
6866
+ }
6867
+ })
6868
+ };
6869
+ }
6870
+ generalTableForm = {
6871
+ type: 'form',
6872
+ layout: 'flex',
6873
+ direction: 'column',
6874
+ labelGapCalc: 'children',
6875
+ padding: 0,
6876
+ items: [
6877
+ {
6878
+ type: 'form',
6879
+ labelGapCalc: false,
6880
+ padding: 0,
6881
+ layout: 'grid',
6882
+ columns: 2,
6883
+ defaults: {
6884
+ type: 'textbox',
6885
+ maxWidth: 50
6886
+ },
6887
+ items: hasAppearanceOptions(editor) ? [
6888
+ colsCtrl,
6889
+ rowsCtrl,
6890
+ {
6891
+ label: 'Width',
6892
+ name: 'width',
6893
+ onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6894
+ },
6895
+ {
6896
+ label: 'Height',
6897
+ name: 'height',
6898
+ onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6899
+ },
6900
+ {
6901
+ label: 'Cell spacing',
6902
+ name: 'cellspacing'
6903
+ },
6904
+ {
6905
+ label: 'Cell padding',
6906
+ name: 'cellpadding'
6907
+ },
6908
+ {
6909
+ label: 'Border',
6910
+ name: 'border'
6911
+ },
6912
+ {
6913
+ label: 'Caption',
6914
+ name: 'caption',
6915
+ type: 'checkbox'
6916
+ }
6917
+ ] : [
6918
+ colsCtrl,
6919
+ rowsCtrl,
6920
+ {
6921
+ label: 'Width',
6922
+ name: 'width',
6923
+ onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6924
+ },
6925
+ {
6926
+ label: 'Height',
6927
+ name: 'height',
6928
+ onchange: $_20nfr6k7jfuw8q4g.curry($_2fnzp5nxjfuw8qt9.updateStyleField, editor)
6929
+ }
6930
+ ]
6931
+ },
6932
+ {
6933
+ label: 'Alignment',
6934
+ name: 'align',
6935
+ type: 'listbox',
6936
+ text: 'None',
6937
+ values: [
6938
+ {
6939
+ text: 'None',
6940
+ value: ''
6941
+ },
6942
+ {
6943
+ text: 'Left',
6944
+ value: 'left'
6945
+ },
6946
+ {
6947
+ text: 'Center',
6948
+ value: 'center'
6949
+ },
6950
+ {
6951
+ text: 'Right',
6952
+ value: 'right'
6953
+ }
6954
+ ]
6955
+ },
6956
+ classListCtrl
6957
+ ]
6958
+ };
6959
+ if (hasAdvancedTableTab(editor)) {
6960
+ editor.windowManager.open({
6961
+ title: 'Table properties',
6962
+ data: data,
6963
+ bodyType: 'tabpanel',
6964
+ body: [
6965
+ {
6966
+ title: 'General',
6967
+ type: 'form',
6968
+ items: generalTableForm
6969
+ },
6970
+ $_2fnzp5nxjfuw8qt9.createStyleForm(editor)
6971
+ ],
6972
+ onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitTableForm, editor, tableElm)
6973
+ });
6974
+ } else {
6975
+ editor.windowManager.open({
6976
+ title: 'Table properties',
6977
+ data: data,
6978
+ body: generalTableForm,
6979
+ onsubmit: $_20nfr6k7jfuw8q4g.curry(onSubmitTableForm, editor, tableElm)
6980
+ });
6981
+ }
6982
+ };
6983
+ var $_ad8brjnzjfuw8qtm = { open: open$2 };
6984
+
6985
+ var each$3 = global$2.each;
6986
+ var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {
6987
+ var isRoot = $_5xkhf2nnjfuw8qrq.getIsRoot(editor);
6988
+ var eraseTable = function () {
6989
+ var cell = $_xbeoqkkjfuw8q73.fromDom(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
6990
+ var table = $_aqhz9okhjfuw8q5y.table(cell, isRoot);
6991
+ table.filter($_20nfr6k7jfuw8q4g.not(isRoot)).each(function (table) {
6992
+ var cursor = $_xbeoqkkjfuw8q73.fromText('');
6993
+ $_fatuxylgjfuw8qav.after(table, cursor);
6994
+ $_fl1deelhjfuw8qax.remove(table);
6995
+ var rng = editor.dom.createRng();
6996
+ rng.setStart(cursor.dom(), 0);
6997
+ rng.setEnd(cursor.dom(), 0);
6998
+ editor.selection.setRng(rng);
6999
+ });
7000
+ };
7001
+ var getSelectionStartCell = function () {
7002
+ return $_xbeoqkkjfuw8q73.fromDom(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
7003
+ };
7004
+ var getTableFromCell = function (cell) {
7005
+ return $_aqhz9okhjfuw8q5y.table(cell, isRoot);
7006
+ };
7007
+ var actOnSelection = function (execute) {
7008
+ var cell = getSelectionStartCell();
7009
+ var table = getTableFromCell(cell);
7010
+ table.each(function (table) {
7011
+ var targets = $_5b7h1hlqjfuw8qci.forMenu(selections, table, cell);
7012
+ execute(table, targets).each(function (rng) {
7013
+ editor.selection.setRng(rng);
7014
+ editor.focus();
7015
+ cellSelection.clear(table);
7016
+ });
7017
+ });
7018
+ };
7019
+ var copyRowSelection = function (execute) {
7020
+ var cell = getSelectionStartCell();
7021
+ var table = getTableFromCell(cell);
7022
+ return table.bind(function (table) {
7023
+ var doc = $_xbeoqkkjfuw8q73.fromDom(editor.getDoc());
7024
+ var targets = $_5b7h1hlqjfuw8qci.forMenu(selections, table, cell);
7025
+ var generators = $_5ohg1eljjfuw8qb4.cellOperations($_20nfr6k7jfuw8q4g.noop, doc, Option.none());
7026
+ return $_8a78aqntjfuw8qsp.copyRows(table, targets, generators);
7027
+ });
7028
+ };
7029
+ var pasteOnSelection = function (execute) {
7030
+ clipboardRows.get().each(function (rows) {
7031
+ var clonedRows = $_tyr3yk5jfuw8q47.map(rows, function (row) {
7032
+ return $_ddvp06lkjfuw8qbt.deep(row);
7033
+ });
7034
+ var cell = getSelectionStartCell();
7035
+ var table = getTableFromCell(cell);
7036
+ table.bind(function (table) {
7037
+ var doc = $_xbeoqkkjfuw8q73.fromDom(editor.getDoc());
7038
+ var generators = $_5ohg1eljjfuw8qb4.paste(doc);
7039
+ var targets = $_5b7h1hlqjfuw8qci.pasteRows(selections, table, cell, clonedRows, generators);
7040
+ execute(table, targets).each(function (rng) {
7041
+ editor.selection.setRng(rng);
7042
+ editor.focus();
7043
+ cellSelection.clear(table);
7044
+ });
7045
+ });
7046
+ });
7047
+ };
7048
+ each$3({
7049
+ mceTableSplitCells: function () {
7050
+ actOnSelection(actions.unmergeCells);
7051
+ },
7052
+ mceTableMergeCells: function () {
7053
+ actOnSelection(actions.mergeCells);
7054
+ },
7055
+ mceTableInsertRowBefore: function () {
7056
+ actOnSelection(actions.insertRowsBefore);
7057
+ },
7058
+ mceTableInsertRowAfter: function () {
7059
+ actOnSelection(actions.insertRowsAfter);
7060
+ },
7061
+ mceTableInsertColBefore: function () {
7062
+ actOnSelection(actions.insertColumnsBefore);
7063
+ },
7064
+ mceTableInsertColAfter: function () {
7065
+ actOnSelection(actions.insertColumnsAfter);
7066
+ },
7067
+ mceTableDeleteCol: function () {
7068
+ actOnSelection(actions.deleteColumn);
7069
+ },
7070
+ mceTableDeleteRow: function () {
7071
+ actOnSelection(actions.deleteRow);
7072
+ },
7073
+ mceTableCutRow: function (grid) {
7074
+ clipboardRows.set(copyRowSelection());
7075
+ actOnSelection(actions.deleteRow);
7076
+ },
7077
+ mceTableCopyRow: function (grid) {
7078
+ clipboardRows.set(copyRowSelection());
7079
+ },
7080
+ mceTablePasteRowBefore: function (grid) {
7081
+ pasteOnSelection(actions.pasteRowsBefore);
7082
+ },
7083
+ mceTablePasteRowAfter: function (grid) {
7084
+ pasteOnSelection(actions.pasteRowsAfter);
7085
+ },
7086
+ mceTableDelete: eraseTable
7087
+ }, function (func, name) {
7088
+ editor.addCommand(name, func);
7089
+ });
7090
+ each$3({
7091
+ mceInsertTable: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor),
7092
+ mceTableProps: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor, true),
7093
+ mceTableRowProps: $_20nfr6k7jfuw8q4g.curry($_cshv4qnyjfuw8qtf.open, editor),
7094
+ mceTableCellProps: $_20nfr6k7jfuw8q4g.curry($_48j9iinvjfuw8qsu.open, editor)
7095
+ }, function (func, name) {
7096
+ editor.addCommand(name, function (ui, val) {
7097
+ func(val);
7098
+ });
7099
+ });
7100
+ };
7101
+ var $_srry6nsjfuw8qs8 = { registerCommands: registerCommands };
7102
+
7103
+ var only$1 = function (element) {
7104
+ var parent = Option.from(element.dom().documentElement).map($_xbeoqkkjfuw8q73.fromDom).getOr(element);
7105
+ return {
7106
+ parent: $_20nfr6k7jfuw8q4g.constant(parent),
7107
+ view: $_20nfr6k7jfuw8q4g.constant(element),
7108
+ origin: $_20nfr6k7jfuw8q4g.constant(r(0, 0))
7109
+ };
7110
+ };
7111
+ var detached = function (editable, chrome) {
7112
+ var origin = $_20nfr6k7jfuw8q4g.curry($_hsvzlmijfuw8qj4.absolute, chrome);
7113
+ return {
7114
+ parent: $_20nfr6k7jfuw8q4g.constant(chrome),
7115
+ view: $_20nfr6k7jfuw8q4g.constant(editable),
7116
+ origin: origin
7117
+ };
7118
+ };
7119
+ var body$1 = function (editable, chrome) {
7120
+ return {
7121
+ parent: $_20nfr6k7jfuw8q4g.constant(chrome),
7122
+ view: $_20nfr6k7jfuw8q4g.constant(editable),
7123
+ origin: $_20nfr6k7jfuw8q4g.constant(r(0, 0))
7124
+ };
7125
+ };
7126
+ var $_e4gwgeo6jfuw8qvi = {
7127
+ only: only$1,
7128
+ detached: detached,
7129
+ body: body$1
7130
+ };
7131
+
7132
+ function Event (fields) {
7133
+ var struct = $_5now9kbjfuw8q5e.immutable.apply(null, fields);
7134
+ var handlers = [];
7135
+ var bind = function (handler) {
7136
+ if (handler === undefined) {
7137
+ throw 'Event bind error: undefined handler';
7138
+ }
7139
+ handlers.push(handler);
7140
+ };
7141
+ var unbind = function (handler) {
7142
+ handlers = $_tyr3yk5jfuw8q47.filter(handlers, function (h) {
7143
+ return h !== handler;
7144
+ });
7145
+ };
7146
+ var trigger = function () {
7147
+ var event = struct.apply(null, arguments);
7148
+ $_tyr3yk5jfuw8q47.each(handlers, function (handler) {
7149
+ handler(event);
7150
+ });
7151
+ };
7152
+ return {
7153
+ bind: bind,
7154
+ unbind: unbind,
7155
+ trigger: trigger
7156
+ };
7157
+ }
7158
+
7159
+ var create = function (typeDefs) {
7160
+ var registry = $_11yiupkajfuw8q5c.map(typeDefs, function (event) {
7161
+ return {
7162
+ bind: event.bind,
7163
+ unbind: event.unbind
7164
+ };
7165
+ });
7166
+ var trigger = $_11yiupkajfuw8q5c.map(typeDefs, function (event) {
7167
+ return event.trigger;
7168
+ });
7169
+ return {
7170
+ registry: registry,
7171
+ trigger: trigger
7172
+ };
7173
+ };
7174
+ var $_1fbhhho9jfuw8qw4 = { create: create };
7175
+
7176
+ var mode = $_7z97w5mpjfuw8qkk.exactly([
7177
+ 'compare',
7178
+ 'extract',
7179
+ 'mutate',
7180
+ 'sink'
7181
+ ]);
7182
+ var sink = $_7z97w5mpjfuw8qkk.exactly([
7183
+ 'element',
7184
+ 'start',
7185
+ 'stop',
7186
+ 'destroy'
7187
+ ]);
7188
+ var api$3 = $_7z97w5mpjfuw8qkk.exactly([
7189
+ 'forceDrop',
7190
+ 'drop',
7191
+ 'move',
7192
+ 'delayDrop'
7193
+ ]);
7194
+ var $_aqs1mcodjfuw8qxk = {
7195
+ mode: mode,
7196
+ sink: sink,
7197
+ api: api$3
7198
+ };
7199
+
7200
+ var styles$1 = $_63w6atn5jfuw8qot.css('ephox-dragster');
7201
+ var $_41gm3bofjfuw8qxz = { resolve: styles$1.resolve };
7202
+
7203
+ function Blocker (options) {
7204
+ var settings = $_91sgzmujfuw8qm5.merge({ 'layerClass': $_41gm3bofjfuw8qxz.resolve('blocker') }, options);
7205
+ var div = $_xbeoqkkjfuw8q73.fromTag('div');
7206
+ $_3q82t2l5jfuw8q93.set(div, 'role', 'presentation');
7207
+ $_bfod2hlejfuw8qac.setAll(div, {
7208
+ position: 'fixed',
7209
+ left: '0px',
7210
+ top: '0px',
7211
+ width: '100%',
7212
+ height: '100%'
7213
+ });
7214
+ $_fmcseon6jfuw8qou.add(div, $_41gm3bofjfuw8qxz.resolve('blocker'));
7215
+ $_fmcseon6jfuw8qou.add(div, settings.layerClass);
7216
+ var element = function () {
7217
+ return div;
7218
+ };
7219
+ var destroy = function () {
7220
+ $_fl1deelhjfuw8qax.remove(div);
7221
+ };
7222
+ return {
7223
+ element: element,
7224
+ destroy: destroy
7225
+ };
7226
+ }
7227
+
7228
+ var mkEvent = function (target, x, y, stop, prevent, kill, raw) {
7229
+ return {
7230
+ 'target': $_20nfr6k7jfuw8q4g.constant(target),
7231
+ 'x': $_20nfr6k7jfuw8q4g.constant(x),
7232
+ 'y': $_20nfr6k7jfuw8q4g.constant(y),
7233
+ 'stop': stop,
7234
+ 'prevent': prevent,
7235
+ 'kill': kill,
7236
+ 'raw': $_20nfr6k7jfuw8q4g.constant(raw)
7237
+ };
7238
+ };
7239
+ var handle = function (filter, handler) {
7240
+ return function (rawEvent) {
7241
+ if (!filter(rawEvent))
7242
+ return;
7243
+ var target = $_xbeoqkkjfuw8q73.fromDom(rawEvent.target);
7244
+ var stop = function () {
7245
+ rawEvent.stopPropagation();
7246
+ };
7247
+ var prevent = function () {
7248
+ rawEvent.preventDefault();
7249
+ };
7250
+ var kill = $_20nfr6k7jfuw8q4g.compose(prevent, stop);
7251
+ var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);
7252
+ handler(evt);
7253
+ };
7254
+ };
7255
+ var binder = function (element, event, filter, handler, useCapture) {
7256
+ var wrapped = handle(filter, handler);
7257
+ element.dom().addEventListener(event, wrapped, useCapture);
7258
+ return { unbind: $_20nfr6k7jfuw8q4g.curry(unbind, element, event, wrapped, useCapture) };
7259
+ };
7260
+ var bind$1 = function (element, event, filter, handler) {
7261
+ return binder(element, event, filter, handler, false);
7262
+ };
7263
+ var capture = function (element, event, filter, handler) {
7264
+ return binder(element, event, filter, handler, true);
7265
+ };
7266
+ var unbind = function (element, event, handler, useCapture) {
7267
+ element.dom().removeEventListener(event, handler, useCapture);
7268
+ };
7269
+ var $_fal932ohjfuw8qy6 = {
7270
+ bind: bind$1,
7271
+ capture: capture
7272
+ };
7273
+
7274
+ var filter$1 = $_20nfr6k7jfuw8q4g.constant(true);
7275
+ var bind$2 = function (element, event, handler) {
7276
+ return $_fal932ohjfuw8qy6.bind(element, event, filter$1, handler);
7277
+ };
7278
+ var capture$1 = function (element, event, handler) {
7279
+ return $_fal932ohjfuw8qy6.capture(element, event, filter$1, handler);
7280
+ };
7281
+ var $_6fxiitogjfuw8qy3 = {
7282
+ bind: bind$2,
7283
+ capture: capture$1
7284
+ };
7285
+
7286
+ var compare = function (old, nu) {
7287
+ return r(nu.left() - old.left(), nu.top() - old.top());
7288
+ };
7289
+ var extract$1 = function (event) {
7290
+ return Option.some(r(event.x(), event.y()));
7291
+ };
7292
+ var mutate$1 = function (mutation, info) {
7293
+ mutation.mutate(info.left(), info.top());
7294
+ };
7295
+ var sink$1 = function (dragApi, settings) {
7296
+ var blocker = Blocker(settings);
7297
+ var mdown = $_6fxiitogjfuw8qy3.bind(blocker.element(), 'mousedown', dragApi.forceDrop);
7298
+ var mup = $_6fxiitogjfuw8qy3.bind(blocker.element(), 'mouseup', dragApi.drop);
7299
+ var mmove = $_6fxiitogjfuw8qy3.bind(blocker.element(), 'mousemove', dragApi.move);
7300
+ var mout = $_6fxiitogjfuw8qy3.bind(blocker.element(), 'mouseout', dragApi.delayDrop);
7301
+ var destroy = function () {
7302
+ blocker.destroy();
7303
+ mup.unbind();
7304
+ mmove.unbind();
7305
+ mout.unbind();
7306
+ mdown.unbind();
7307
+ };
7308
+ var start = function (parent) {
7309
+ $_fatuxylgjfuw8qav.append(parent, blocker.element());
7310
+ };
7311
+ var stop = function () {
7312
+ $_fl1deelhjfuw8qax.remove(blocker.element());
7313
+ };
7314
+ return $_aqs1mcodjfuw8qxk.sink({
7315
+ element: blocker.element,
7316
+ start: start,
7317
+ stop: stop,
7318
+ destroy: destroy
7319
+ });
7320
+ };
7321
+ var MouseDrag = $_aqs1mcodjfuw8qxk.mode({
7322
+ compare: compare,
7323
+ extract: extract$1,
7324
+ sink: sink$1,
7325
+ mutate: mutate$1
7326
+ });
7327
+
7328
+ function InDrag () {
7329
+ var previous = Option.none();
7330
+ var reset = function () {
7331
+ previous = Option.none();
7332
+ };
7333
+ var update = function (mode, nu) {
7334
+ var result = previous.map(function (old) {
7335
+ return mode.compare(old, nu);
7336
+ });
7337
+ previous = Option.some(nu);
7338
+ return result;
7339
+ };
7340
+ var onEvent = function (event, mode) {
7341
+ var dataOption = mode.extract(event);
7342
+ dataOption.each(function (data) {
7343
+ var offset = update(mode, data);
7344
+ offset.each(function (d) {
7345
+ events.trigger.move(d);
7346
+ });
7347
+ });
7348
+ };
7349
+ var events = $_1fbhhho9jfuw8qw4.create({ move: Event(['info']) });
7350
+ return {
7351
+ onEvent: onEvent,
7352
+ reset: reset,
7353
+ events: events.registry
7354
+ };
7355
+ }
7356
+
7357
+ function NoDrag (anchor) {
7358
+ var onEvent = function (event, mode) {
7359
+ };
7360
+ return {
7361
+ onEvent: onEvent,
7362
+ reset: $_20nfr6k7jfuw8q4g.noop
7363
+ };
7364
+ }
7365
+
7366
+ function Movement () {
7367
+ var noDragState = NoDrag();
7368
+ var inDragState = InDrag();
7369
+ var dragState = noDragState;
7370
+ var on = function () {
7371
+ dragState.reset();
7372
+ dragState = inDragState;
7373
+ };
7374
+ var off = function () {
7375
+ dragState.reset();
7376
+ dragState = noDragState;
7377
+ };
7378
+ var onEvent = function (event, mode) {
7379
+ dragState.onEvent(event, mode);
7380
+ };
7381
+ var isOn = function () {
7382
+ return dragState === inDragState;
7383
+ };
7384
+ return {
7385
+ on: on,
7386
+ off: off,
7387
+ isOn: isOn,
7388
+ onEvent: onEvent,
7389
+ events: inDragState.events
7390
+ };
7391
+ }
7392
+
7393
+ var adaptable = function (fn, rate) {
7394
+ var timer = null;
7395
+ var args = null;
7396
+ var cancel = function () {
7397
+ if (timer !== null) {
7398
+ clearTimeout(timer);
7399
+ timer = null;
7400
+ args = null;
7401
+ }
7402
+ };
7403
+ var throttle = function () {
7404
+ args = arguments;
7405
+ if (timer === null) {
7406
+ timer = setTimeout(function () {
7407
+ fn.apply(null, args);
7408
+ timer = null;
7409
+ args = null;
7410
+ }, rate);
7411
+ }
7412
+ };
7413
+ return {
7414
+ cancel: cancel,
7415
+ throttle: throttle
7416
+ };
7417
+ };
7418
+ var first$4 = function (fn, rate) {
7419
+ var timer = null;
7420
+ var cancel = function () {
7421
+ if (timer !== null) {
7422
+ clearTimeout(timer);
7423
+ timer = null;
7424
+ }
7425
+ };
7426
+ var throttle = function () {
7427
+ var args = arguments;
7428
+ if (timer === null) {
7429
+ timer = setTimeout(function () {
7430
+ fn.apply(null, args);
7431
+ timer = null;
7432
+ args = null;
7433
+ }, rate);
7434
+ }
7435
+ };
7436
+ return {
7437
+ cancel: cancel,
7438
+ throttle: throttle
7439
+ };
7440
+ };
7441
+ var last$3 = function (fn, rate) {
7442
+ var timer = null;
7443
+ var cancel = function () {
7444
+ if (timer !== null) {
7445
+ clearTimeout(timer);
7446
+ timer = null;
7447
+ }
7448
+ };
7449
+ var throttle = function () {
7450
+ var args = arguments;
7451
+ if (timer !== null)
7452
+ clearTimeout(timer);
7453
+ timer = setTimeout(function () {
7454
+ fn.apply(null, args);
7455
+ timer = null;
7456
+ args = null;
7457
+ }, rate);
7458
+ };
7459
+ return {
7460
+ cancel: cancel,
7461
+ throttle: throttle
7462
+ };
7463
+ };
7464
+ var $_4fpdigomjfuw8qyv = {
7465
+ adaptable: adaptable,
7466
+ first: first$4,
7467
+ last: last$3
7468
+ };
7469
+
7470
+ var setup = function (mutation, mode, settings) {
7471
+ var active = false;
7472
+ var events = $_1fbhhho9jfuw8qw4.create({
7473
+ start: Event([]),
7474
+ stop: Event([])
7475
+ });
7476
+ var movement = Movement();
7477
+ var drop = function () {
7478
+ sink.stop();
7479
+ if (movement.isOn()) {
7480
+ movement.off();
7481
+ events.trigger.stop();
7482
+ }
7483
+ };
7484
+ var throttledDrop = $_4fpdigomjfuw8qyv.last(drop, 200);
7485
+ var go = function (parent) {
7486
+ sink.start(parent);
7487
+ movement.on();
7488
+ events.trigger.start();
7489
+ };
7490
+ var mousemove = function (event, ui) {
7491
+ throttledDrop.cancel();
7492
+ movement.onEvent(event, mode);
7493
+ };
7494
+ movement.events.move.bind(function (event) {
7495
+ mode.mutate(mutation, event.info());
7496
+ });
7497
+ var on = function () {
7498
+ active = true;
7499
+ };
7500
+ var off = function () {
7501
+ active = false;
7502
+ };
7503
+ var runIfActive = function (f) {
7504
+ return function () {
7505
+ var args = Array.prototype.slice.call(arguments, 0);
7506
+ if (active) {
7507
+ return f.apply(null, args);
7508
+ }
7509
+ };
7510
+ };
7511
+ var sink = mode.sink($_aqs1mcodjfuw8qxk.api({
7512
+ forceDrop: drop,
7513
+ drop: runIfActive(drop),
7514
+ move: runIfActive(mousemove),
7515
+ delayDrop: runIfActive(throttledDrop.throttle)
7516
+ }), settings);
7517
+ var destroy = function () {
7518
+ sink.destroy();
7519
+ };
7520
+ return {
7521
+ element: sink.element,
7522
+ go: go,
7523
+ on: on,
7524
+ off: off,
7525
+ destroy: destroy,
7526
+ events: events.registry
7527
+ };
7528
+ };
7529
+ var $_bv42lfoijfuw8qyb = { setup: setup };
7530
+
7531
+ var transform$1 = function (mutation, options) {
7532
+ var settings = options !== undefined ? options : {};
7533
+ var mode = settings.mode !== undefined ? settings.mode : MouseDrag;
7534
+ return $_bv42lfoijfuw8qyb.setup(mutation, mode, options);
7535
+ };
7536
+ var $_a1giepobjfuw8qx7 = { transform: transform$1 };
7537
+
7538
+ function Mutation () {
7539
+ var events = $_1fbhhho9jfuw8qw4.create({
7540
+ 'drag': Event([
7541
+ 'xDelta',
7542
+ 'yDelta'
7543
+ ])
7544
+ });
7545
+ var mutate = function (x, y) {
7546
+ events.trigger.drag(x, y);
7547
+ };
7548
+ return {
7549
+ mutate: mutate,
7550
+ events: events.registry
7551
+ };
7552
+ }
7553
+
7554
+ function BarMutation () {
7555
+ var events = $_1fbhhho9jfuw8qw4.create({
7556
+ drag: Event([
7557
+ 'xDelta',
7558
+ 'yDelta',
7559
+ 'target'
7560
+ ])
7561
+ });
7562
+ var target = Option.none();
7563
+ var delegate = Mutation();
7564
+ delegate.events.drag.bind(function (event) {
7565
+ target.each(function (t) {
7566
+ events.trigger.drag(event.xDelta(), event.yDelta(), t);
7567
+ });
7568
+ });
7569
+ var assign = function (t) {
7570
+ target = Option.some(t);
7571
+ };
7572
+ var get = function () {
7573
+ return target;
7574
+ };
7575
+ return {
7576
+ assign: assign,
7577
+ get: get,
7578
+ mutate: delegate.mutate,
7579
+ events: events.registry
7580
+ };
7581
+ }
7582
+
7583
+ var any = function (selector) {
7584
+ return $_8wdrbmlajfuw8q9m.first(selector).isSome();
7585
+ };
7586
+ var ancestor$2 = function (scope, selector, isRoot) {
7587
+ return $_8wdrbmlajfuw8q9m.ancestor(scope, selector, isRoot).isSome();
7588
+ };
7589
+ var sibling$2 = function (scope, selector) {
7590
+ return $_8wdrbmlajfuw8q9m.sibling(scope, selector).isSome();
7591
+ };
7592
+ var child$3 = function (scope, selector) {
7593
+ return $_8wdrbmlajfuw8q9m.child(scope, selector).isSome();
7594
+ };
7595
+ var descendant$2 = function (scope, selector) {
7596
+ return $_8wdrbmlajfuw8q9m.descendant(scope, selector).isSome();
7597
+ };
7598
+ var closest$2 = function (scope, selector, isRoot) {
7599
+ return $_8wdrbmlajfuw8q9m.closest(scope, selector, isRoot).isSome();
7600
+ };
7601
+ var $_44mfk0opjfuw8qze = {
7602
+ any: any,
7603
+ ancestor: ancestor$2,
7604
+ sibling: sibling$2,
7605
+ child: child$3,
7606
+ descendant: descendant$2,
7607
+ closest: closest$2
7608
+ };
7609
+
7610
+ var resizeBarDragging = $_f6r94sn4jfuw8qoq.resolve('resizer-bar-dragging');
7611
+ function BarManager (wire, direction, hdirection) {
7612
+ var mutation = BarMutation();
7613
+ var resizing = $_a1giepobjfuw8qx7.transform(mutation, {});
7614
+ var hoverTable = Option.none();
7615
+ var getResizer = function (element, type) {
7616
+ return Option.from($_3q82t2l5jfuw8q93.get(element, type));
7617
+ };
7618
+ mutation.events.drag.bind(function (event) {
7619
+ getResizer(event.target(), 'data-row').each(function (_dataRow) {
7620
+ var currentRow = $_63qtcvnkjfuw8qqu.getInt(event.target(), 'top');
7621
+ $_bfod2hlejfuw8qac.set(event.target(), 'top', currentRow + event.yDelta() + 'px');
7622
+ });
7623
+ getResizer(event.target(), 'data-column').each(function (_dataCol) {
7624
+ var currentCol = $_63qtcvnkjfuw8qqu.getInt(event.target(), 'left');
7625
+ $_bfod2hlejfuw8qac.set(event.target(), 'left', currentCol + event.xDelta() + 'px');
7626
+ });
7627
+ });
7628
+ var getDelta = function (target, direction) {
7629
+ var newX = $_63qtcvnkjfuw8qqu.getInt(target, direction);
7630
+ var oldX = parseInt($_3q82t2l5jfuw8q93.get(target, 'data-initial-' + direction), 10);
7631
+ return newX - oldX;
7632
+ };
7633
+ resizing.events.stop.bind(function () {
7634
+ mutation.get().each(function (target) {
7635
+ hoverTable.each(function (table) {
7636
+ getResizer(target, 'data-row').each(function (row) {
7637
+ var delta = getDelta(target, 'top');
7638
+ $_3q82t2l5jfuw8q93.remove(target, 'data-initial-top');
7639
+ events.trigger.adjustHeight(table, delta, parseInt(row, 10));
7640
+ });
7641
+ getResizer(target, 'data-column').each(function (column) {
7642
+ var delta = getDelta(target, 'left');
7643
+ $_3q82t2l5jfuw8q93.remove(target, 'data-initial-left');
7644
+ events.trigger.adjustWidth(table, delta, parseInt(column, 10));
7645
+ });
7646
+ $_jc1w5n0jfuw8qng.refresh(wire, table, hdirection, direction);
7647
+ });
7648
+ });
7649
+ });
7650
+ var handler = function (target, direction) {
7651
+ events.trigger.startAdjust();
7652
+ mutation.assign(target);
7653
+ $_3q82t2l5jfuw8q93.set(target, 'data-initial-' + direction, parseInt($_bfod2hlejfuw8qac.get(target, direction), 10));
7654
+ $_fmcseon6jfuw8qou.add(target, resizeBarDragging);
7655
+ $_bfod2hlejfuw8qac.set(target, 'opacity', '0.2');
7656
+ resizing.go(wire.parent());
7657
+ };
7658
+ var mousedown = $_6fxiitogjfuw8qy3.bind(wire.parent(), 'mousedown', function (event) {
7659
+ if ($_jc1w5n0jfuw8qng.isRowBar(event.target()))
7660
+ handler(event.target(), 'top');
7661
+ if ($_jc1w5n0jfuw8qng.isColBar(event.target()))
7662
+ handler(event.target(), 'left');
7663
+ });
7664
+ var isRoot = function (e) {
7665
+ return $_e8rn66kojfuw8q7n.eq(e, wire.view());
7666
+ };
7667
+ var mouseover = $_6fxiitogjfuw8qy3.bind(wire.view(), 'mouseover', function (event) {
7668
+ if ($_a8gk30l6jfuw8q9c.name(event.target()) === 'table' || $_44mfk0opjfuw8qze.closest(event.target(), 'table', isRoot)) {
7669
+ hoverTable = $_a8gk30l6jfuw8q9c.name(event.target()) === 'table' ? Option.some(event.target()) : $_8wdrbmlajfuw8q9m.ancestor(event.target(), 'table', isRoot);
7670
+ hoverTable.each(function (ht) {
7671
+ $_jc1w5n0jfuw8qng.refresh(wire, ht, hdirection, direction);
7672
+ });
7673
+ } else if ($_atd1tul9jfuw8q9i.inBody(event.target())) {
7674
+ $_jc1w5n0jfuw8qng.destroy(wire);
7675
+ }
7676
+ });
7677
+ var destroy = function () {
7678
+ mousedown.unbind();
7679
+ mouseover.unbind();
7680
+ resizing.destroy();
7681
+ $_jc1w5n0jfuw8qng.destroy(wire);
7682
+ };
7683
+ var refresh = function (tbl) {
7684
+ $_jc1w5n0jfuw8qng.refresh(wire, tbl, hdirection, direction);
7685
+ };
7686
+ var events = $_1fbhhho9jfuw8qw4.create({
7687
+ adjustHeight: Event([
7688
+ 'table',
7689
+ 'delta',
7690
+ 'row'
7691
+ ]),
7692
+ adjustWidth: Event([
7693
+ 'table',
7694
+ 'delta',
7695
+ 'column'
7696
+ ]),
7697
+ startAdjust: Event([])
7698
+ });
7699
+ return {
7700
+ destroy: destroy,
7701
+ refresh: refresh,
7702
+ on: resizing.on,
7703
+ off: resizing.off,
7704
+ hideBars: $_20nfr6k7jfuw8q4g.curry($_jc1w5n0jfuw8qng.hide, wire),
7705
+ showBars: $_20nfr6k7jfuw8q4g.curry($_jc1w5n0jfuw8qng.show, wire),
7706
+ events: events.registry
7707
+ };
7708
+ }
7709
+
7710
+ function TableResize (wire, vdirection) {
7711
+ var hdirection = $_16z2iamhjfuw8qir.height;
7712
+ var manager = BarManager(wire, vdirection, hdirection);
7713
+ var events = $_1fbhhho9jfuw8qw4.create({
7714
+ beforeResize: Event(['table']),
7715
+ afterResize: Event(['table']),
7716
+ startDrag: Event([])
7717
+ });
7718
+ manager.events.adjustHeight.bind(function (event) {
7719
+ events.trigger.beforeResize(event.table());
7720
+ var delta = hdirection.delta(event.delta(), event.table());
7721
+ $_cwciisngjfuw8qq6.adjustHeight(event.table(), delta, event.row(), hdirection);
7722
+ events.trigger.afterResize(event.table());
7723
+ });
7724
+ manager.events.startAdjust.bind(function (event) {
7725
+ events.trigger.startDrag();
7726
+ });
7727
+ manager.events.adjustWidth.bind(function (event) {
7728
+ events.trigger.beforeResize(event.table());
7729
+ var delta = vdirection.delta(event.delta(), event.table());
7730
+ $_cwciisngjfuw8qq6.adjustWidth(event.table(), delta, event.column(), vdirection);
7731
+ events.trigger.afterResize(event.table());
7732
+ });
7733
+ return {
7734
+ on: manager.on,
7735
+ off: manager.off,
7736
+ hideBars: manager.hideBars,
7737
+ showBars: manager.showBars,
7738
+ destroy: manager.destroy,
7739
+ events: events.registry
7740
+ };
7741
+ }
7742
+
7743
+ var createContainer = function () {
7744
+ var container = $_xbeoqkkjfuw8q73.fromTag('div');
7745
+ $_bfod2hlejfuw8qac.setAll(container, {
7746
+ position: 'static',
7747
+ height: '0',
7748
+ width: '0',
7749
+ padding: '0',
7750
+ margin: '0',
7751
+ border: '0'
7752
+ });
7753
+ $_fatuxylgjfuw8qav.append($_atd1tul9jfuw8q9i.body(), container);
7754
+ return container;
7755
+ };
7756
+ var get$8 = function (editor, container) {
7757
+ return editor.inline ? $_e4gwgeo6jfuw8qvi.body($_5xkhf2nnjfuw8qrq.getBody(editor), createContainer()) : $_e4gwgeo6jfuw8qvi.only($_xbeoqkkjfuw8q73.fromDom(editor.getDoc()));
7758
+ };
7759
+ var remove$6 = function (editor, wire) {
7760
+ if (editor.inline) {
7761
+ $_fl1deelhjfuw8qax.remove(wire.parent());
7762
+ }
7763
+ };
7764
+ var $_fdmzdaoqjfuw8qzh = {
7765
+ get: get$8,
7766
+ remove: remove$6
7767
+ };
7768
+
7769
+ var ResizeHandler = function (editor) {
7770
+ var selectionRng = Option.none();
7771
+ var resize = Option.none();
7772
+ var wire = Option.none();
7773
+ var percentageBasedSizeRegex = /(\d+(\.\d+)?)%/;
7774
+ var startW, startRawW;
7775
+ var isTable = function (elm) {
7776
+ return elm.nodeName === 'TABLE';
7777
+ };
7778
+ var getRawWidth = function (elm) {
7779
+ return editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');
7780
+ };
7781
+ var lazyResize = function () {
7782
+ return resize;
7783
+ };
7784
+ var lazyWire = function () {
7785
+ return wire.getOr($_e4gwgeo6jfuw8qvi.only($_xbeoqkkjfuw8q73.fromDom(editor.getBody())));
7786
+ };
7787
+ var destroy = function () {
7788
+ resize.each(function (sz) {
7789
+ sz.destroy();
7790
+ });
7791
+ wire.each(function (w) {
7792
+ $_fdmzdaoqjfuw8qzh.remove(editor, w);
7793
+ });
7794
+ };
7795
+ editor.on('init', function () {
7796
+ var direction = TableDirection($_4xd1udnojfuw8qrw.directionAt);
7797
+ var rawWire = $_fdmzdaoqjfuw8qzh.get(editor);
7798
+ wire = Option.some(rawWire);
7799
+ if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {
7800
+ var sz = TableResize(rawWire, direction);
7801
+ sz.on();
7802
+ sz.events.startDrag.bind(function (event) {
7803
+ selectionRng = Option.some(editor.selection.getRng());
7804
+ });
7805
+ sz.events.afterResize.bind(function (event) {
7806
+ var table = event.table();
7807
+ var dataStyleCells = $_6c9d0hl7jfuw8q9d.descendants(table, 'td[data-mce-style],th[data-mce-style]');
7808
+ $_tyr3yk5jfuw8q47.each(dataStyleCells, function (cell) {
7809
+ $_3q82t2l5jfuw8q93.remove(cell, 'data-mce-style');
7810
+ });
7811
+ selectionRng.each(function (rng) {
7812
+ editor.selection.setRng(rng);
7813
+ editor.focus();
7814
+ });
7815
+ editor.undoManager.add();
7816
+ });
7817
+ resize = Option.some(sz);
7818
+ }
7819
+ });
7820
+ editor.on('ObjectResizeStart', function (e) {
7821
+ var targetElm = e.target;
7822
+ if (isTable(targetElm)) {
7823
+ startW = e.width;
7824
+ startRawW = getRawWidth(targetElm);
7825
+ }
7826
+ });
7827
+ editor.on('ObjectResized', function (e) {
7828
+ var targetElm = e.target;
7829
+ if (isTable(targetElm)) {
7830
+ var table = targetElm;
7831
+ if (percentageBasedSizeRegex.test(startRawW)) {
7832
+ var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);
7833
+ var targetPercentW = e.width * percentW / startW;
7834
+ editor.dom.setStyle(table, 'width', targetPercentW + '%');
7835
+ } else {
7836
+ var newCellSizes_1 = [];
7837
+ global$2.each(table.rows, function (row) {
7838
+ global$2.each(row.cells, function (cell) {
7839
+ var width = editor.dom.getStyle(cell, 'width', true);
7840
+ newCellSizes_1.push({
7841
+ cell: cell,
7842
+ width: width
7843
+ });
7844
+ });
7845
+ });
7846
+ global$2.each(newCellSizes_1, function (newCellSize) {
7847
+ editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);
7848
+ editor.dom.setAttrib(newCellSize.cell, 'width', null);
7849
+ });
7850
+ }
7851
+ }
7852
+ });
7853
+ return {
7854
+ lazyResize: lazyResize,
7855
+ lazyWire: lazyWire,
7856
+ destroy: destroy
7857
+ };
7858
+ };
7859
+
7860
+ var none$2 = function (current) {
7861
+ return folder$1(function (n, f, m, l) {
7862
+ return n(current);
7863
+ });
7864
+ };
7865
+ var first$5 = function (current) {
7866
+ return folder$1(function (n, f, m, l) {
7867
+ return f(current);
7868
+ });
7869
+ };
7870
+ var middle$1 = function (current, target) {
7871
+ return folder$1(function (n, f, m, l) {
7872
+ return m(current, target);
7873
+ });
7874
+ };
7875
+ var last$4 = function (current) {
7876
+ return folder$1(function (n, f, m, l) {
7877
+ return l(current);
7878
+ });
7879
+ };
7880
+ var folder$1 = function (fold) {
7881
+ return { fold: fold };
7882
+ };
7883
+ var $_wsunjotjfuw8r0k = {
7884
+ none: none$2,
7885
+ first: first$5,
7886
+ middle: middle$1,
7887
+ last: last$4
7888
+ };
7889
+
7890
+ var detect$4 = function (current, isRoot) {
7891
+ return $_aqhz9okhjfuw8q5y.table(current, isRoot).bind(function (table) {
7892
+ var all = $_aqhz9okhjfuw8q5y.cells(table);
7893
+ var index = $_tyr3yk5jfuw8q47.findIndex(all, function (x) {
7894
+ return $_e8rn66kojfuw8q7n.eq(current, x);
7895
+ });
7896
+ return index.map(function (ind) {
7897
+ return {
7898
+ index: $_20nfr6k7jfuw8q4g.constant(ind),
7899
+ all: $_20nfr6k7jfuw8q4g.constant(all)
7900
+ };
7901
+ });
7902
+ });
7903
+ };
7904
+ var next = function (current, isRoot) {
7905
+ var detection = detect$4(current, isRoot);
7906
+ return detection.fold(function () {
7907
+ return $_wsunjotjfuw8r0k.none(current);
7908
+ }, function (info) {
7909
+ return info.index() + 1 < info.all().length ? $_wsunjotjfuw8r0k.middle(current, info.all()[info.index() + 1]) : $_wsunjotjfuw8r0k.last(current);
7910
+ });
7911
+ };
7912
+ var prev = function (current, isRoot) {
7913
+ var detection = detect$4(current, isRoot);
7914
+ return detection.fold(function () {
7915
+ return $_wsunjotjfuw8r0k.none();
7916
+ }, function (info) {
7917
+ return info.index() - 1 >= 0 ? $_wsunjotjfuw8r0k.middle(current, info.all()[info.index() - 1]) : $_wsunjotjfuw8r0k.first(current);
7918
+ });
7919
+ };
7920
+ var $_947ovkosjfuw8r0c = {
7921
+ next: next,
7922
+ prev: prev
7923
+ };
7924
+
7925
+ var adt = $_7sbzam7jfuw8qgu.generate([
7926
+ { 'before': ['element'] },
7927
+ {
7928
+ 'on': [
7929
+ 'element',
7930
+ 'offset'
7931
+ ]
7932
+ },
7933
+ { after: ['element'] }
7934
+ ]);
7935
+ var cata$1 = function (subject, onBefore, onOn, onAfter) {
7936
+ return subject.fold(onBefore, onOn, onAfter);
7937
+ };
7938
+ var getStart = function (situ) {
7939
+ return situ.fold($_20nfr6k7jfuw8q4g.identity, $_20nfr6k7jfuw8q4g.identity, $_20nfr6k7jfuw8q4g.identity);
7940
+ };
7941
+ var $_cuk0n0ovjfuw8r0r = {
7942
+ before: adt.before,
7943
+ on: adt.on,
7944
+ after: adt.after,
7945
+ cata: cata$1,
7946
+ getStart: getStart
7947
+ };
7948
+
7949
+ var type$2 = $_7sbzam7jfuw8qgu.generate([
7950
+ { domRange: ['rng'] },
7951
+ {
7952
+ relative: [
7953
+ 'startSitu',
7954
+ 'finishSitu'
7955
+ ]
7956
+ },
7957
+ {
7958
+ exact: [
7959
+ 'start',
7960
+ 'soffset',
7961
+ 'finish',
7962
+ 'foffset'
7963
+ ]
7964
+ }
7965
+ ]);
7966
+ var range$2 = $_5now9kbjfuw8q5e.immutable('start', 'soffset', 'finish', 'foffset');
7967
+ var exactFromRange = function (simRange) {
7968
+ return type$2.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());
7969
+ };
7970
+ var getStart$1 = function (selection) {
7971
+ return selection.match({
7972
+ domRange: function (rng) {
7973
+ return $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
7974
+ },
7975
+ relative: function (startSitu, finishSitu) {
7976
+ return $_cuk0n0ovjfuw8r0r.getStart(startSitu);
7977
+ },
7978
+ exact: function (start, soffset, finish, foffset) {
7979
+ return start;
7980
+ }
7981
+ });
7982
+ };
7983
+ var getWin = function (selection) {
7984
+ var start = getStart$1(selection);
7985
+ return $_s8scrkmjfuw8q7a.defaultView(start);
7986
+ };
7987
+ var $_bv1jwpoujfuw8r0m = {
7988
+ domRange: type$2.domRange,
7989
+ relative: type$2.relative,
7990
+ exact: type$2.exact,
7991
+ exactFromRange: exactFromRange,
7992
+ range: range$2,
7993
+ getWin: getWin
7994
+ };
7995
+
7996
+ var makeRange = function (start, soffset, finish, foffset) {
7997
+ var doc = $_s8scrkmjfuw8q7a.owner(start);
7998
+ var rng = doc.dom().createRange();
7999
+ rng.setStart(start.dom(), soffset);
8000
+ rng.setEnd(finish.dom(), foffset);
8001
+ return rng;
8002
+ };
8003
+ var commonAncestorContainer = function (start, soffset, finish, foffset) {
8004
+ var r = makeRange(start, soffset, finish, foffset);
8005
+ return $_xbeoqkkjfuw8q73.fromDom(r.commonAncestorContainer);
8006
+ };
8007
+ var after$2 = function (start, soffset, finish, foffset) {
8008
+ var r = makeRange(start, soffset, finish, foffset);
8009
+ var same = $_e8rn66kojfuw8q7n.eq(start, finish) && soffset === foffset;
8010
+ return r.collapsed && !same;
8011
+ };
8012
+ var $_5xef0moxjfuw8r17 = {
8013
+ after: after$2,
8014
+ commonAncestorContainer: commonAncestorContainer
8015
+ };
8016
+
8017
+ var fromElements = function (elements, scope) {
8018
+ var doc = scope || document;
8019
+ var fragment = doc.createDocumentFragment();
8020
+ $_tyr3yk5jfuw8q47.each(elements, function (element) {
8021
+ fragment.appendChild(element.dom());
8022
+ });
8023
+ return $_xbeoqkkjfuw8q73.fromDom(fragment);
8024
+ };
8025
+ var $_8a834noyjfuw8r19 = { fromElements: fromElements };
8026
+
8027
+ var selectNodeContents = function (win, element) {
8028
+ var rng = win.document.createRange();
8029
+ selectNodeContentsUsing(rng, element);
8030
+ return rng;
8031
+ };
8032
+ var selectNodeContentsUsing = function (rng, element) {
8033
+ rng.selectNodeContents(element.dom());
8034
+ };
8035
+ var isWithin$1 = function (outerRange, innerRange) {
8036
+ return innerRange.compareBoundaryPoints(outerRange.END_TO_START, outerRange) < 1 && innerRange.compareBoundaryPoints(outerRange.START_TO_END, outerRange) > -1;
8037
+ };
8038
+ var create$1 = function (win) {
8039
+ return win.document.createRange();
8040
+ };
8041
+ var setStart = function (rng, situ) {
8042
+ situ.fold(function (e) {
8043
+ rng.setStartBefore(e.dom());
8044
+ }, function (e, o) {
8045
+ rng.setStart(e.dom(), o);
8046
+ }, function (e) {
8047
+ rng.setStartAfter(e.dom());
8048
+ });
8049
+ };
8050
+ var setFinish = function (rng, situ) {
8051
+ situ.fold(function (e) {
8052
+ rng.setEndBefore(e.dom());
8053
+ }, function (e, o) {
8054
+ rng.setEnd(e.dom(), o);
8055
+ }, function (e) {
8056
+ rng.setEndAfter(e.dom());
8057
+ });
8058
+ };
8059
+ var replaceWith = function (rng, fragment) {
8060
+ deleteContents(rng);
8061
+ rng.insertNode(fragment.dom());
8062
+ };
8063
+ var relativeToNative = function (win, startSitu, finishSitu) {
8064
+ var range = win.document.createRange();
8065
+ setStart(range, startSitu);
8066
+ setFinish(range, finishSitu);
8067
+ return range;
8068
+ };
8069
+ var exactToNative = function (win, start, soffset, finish, foffset) {
8070
+ var rng = win.document.createRange();
8071
+ rng.setStart(start.dom(), soffset);
8072
+ rng.setEnd(finish.dom(), foffset);
8073
+ return rng;
8074
+ };
8075
+ var deleteContents = function (rng) {
8076
+ rng.deleteContents();
8077
+ };
8078
+ var cloneFragment = function (rng) {
8079
+ var fragment = rng.cloneContents();
8080
+ return $_xbeoqkkjfuw8q73.fromDom(fragment);
8081
+ };
8082
+ var toRect = function (rect) {
8083
+ return {
8084
+ left: $_20nfr6k7jfuw8q4g.constant(rect.left),
8085
+ top: $_20nfr6k7jfuw8q4g.constant(rect.top),
8086
+ right: $_20nfr6k7jfuw8q4g.constant(rect.right),
8087
+ bottom: $_20nfr6k7jfuw8q4g.constant(rect.bottom),
8088
+ width: $_20nfr6k7jfuw8q4g.constant(rect.width),
8089
+ height: $_20nfr6k7jfuw8q4g.constant(rect.height)
8090
+ };
8091
+ };
8092
+ var getFirstRect = function (rng) {
8093
+ var rects = rng.getClientRects();
8094
+ var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();
8095
+ return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();
8096
+ };
8097
+ var getBounds$1 = function (rng) {
8098
+ var rect = rng.getBoundingClientRect();
8099
+ return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();
8100
+ };
8101
+ var toString = function (rng) {
8102
+ return rng.toString();
8103
+ };
8104
+ var $_dkhwcmozjfuw8r1d = {
8105
+ create: create$1,
8106
+ replaceWith: replaceWith,
8107
+ selectNodeContents: selectNodeContents,
8108
+ selectNodeContentsUsing: selectNodeContentsUsing,
8109
+ relativeToNative: relativeToNative,
8110
+ exactToNative: exactToNative,
8111
+ deleteContents: deleteContents,
8112
+ cloneFragment: cloneFragment,
8113
+ getFirstRect: getFirstRect,
8114
+ getBounds: getBounds$1,
8115
+ isWithin: isWithin$1,
8116
+ toString: toString
8117
+ };
8118
+
8119
+ var adt$1 = $_7sbzam7jfuw8qgu.generate([
8120
+ {
8121
+ ltr: [
8122
+ 'start',
8123
+ 'soffset',
8124
+ 'finish',
8125
+ 'foffset'
8126
+ ]
8127
+ },
8128
+ {
8129
+ rtl: [
8130
+ 'start',
8131
+ 'soffset',
8132
+ 'finish',
8133
+ 'foffset'
8134
+ ]
8135
+ }
8136
+ ]);
8137
+ var fromRange = function (win, type, range) {
8138
+ return type($_xbeoqkkjfuw8q73.fromDom(range.startContainer), range.startOffset, $_xbeoqkkjfuw8q73.fromDom(range.endContainer), range.endOffset);
8139
+ };
8140
+ var getRanges = function (win, selection) {
8141
+ return selection.match({
8142
+ domRange: function (rng) {
8143
+ return {
8144
+ ltr: $_20nfr6k7jfuw8q4g.constant(rng),
8145
+ rtl: Option.none
8146
+ };
8147
+ },
8148
+ relative: function (startSitu, finishSitu) {
8149
+ return {
8150
+ ltr: $_cfqymdkujfuw8q85.cached(function () {
8151
+ return $_dkhwcmozjfuw8r1d.relativeToNative(win, startSitu, finishSitu);
8152
+ }),
8153
+ rtl: $_cfqymdkujfuw8q85.cached(function () {
8154
+ return Option.some($_dkhwcmozjfuw8r1d.relativeToNative(win, finishSitu, startSitu));
8155
+ })
8156
+ };
8157
+ },
8158
+ exact: function (start, soffset, finish, foffset) {
8159
+ return {
8160
+ ltr: $_cfqymdkujfuw8q85.cached(function () {
8161
+ return $_dkhwcmozjfuw8r1d.exactToNative(win, start, soffset, finish, foffset);
8162
+ }),
8163
+ rtl: $_cfqymdkujfuw8q85.cached(function () {
8164
+ return Option.some($_dkhwcmozjfuw8r1d.exactToNative(win, finish, foffset, start, soffset));
8165
+ })
8166
+ };
8167
+ }
8168
+ });
8169
+ };
8170
+ var doDiagnose = function (win, ranges) {
8171
+ var rng = ranges.ltr();
8172
+ if (rng.collapsed) {
8173
+ var reversed = ranges.rtl().filter(function (rev) {
8174
+ return rev.collapsed === false;
8175
+ });
8176
+ return reversed.map(function (rev) {
8177
+ return adt$1.rtl($_xbeoqkkjfuw8q73.fromDom(rev.endContainer), rev.endOffset, $_xbeoqkkjfuw8q73.fromDom(rev.startContainer), rev.startOffset);
8178
+ }).getOrThunk(function () {
8179
+ return fromRange(win, adt$1.ltr, rng);
8180
+ });
8181
+ } else {
8182
+ return fromRange(win, adt$1.ltr, rng);
8183
+ }
8184
+ };
8185
+ var diagnose = function (win, selection) {
8186
+ var ranges = getRanges(win, selection);
8187
+ return doDiagnose(win, ranges);
8188
+ };
8189
+ var asLtrRange = function (win, selection) {
8190
+ var diagnosis = diagnose(win, selection);
8191
+ return diagnosis.match({
8192
+ ltr: function (start, soffset, finish, foffset) {
8193
+ var rng = win.document.createRange();
8194
+ rng.setStart(start.dom(), soffset);
8195
+ rng.setEnd(finish.dom(), foffset);
8196
+ return rng;
8197
+ },
8198
+ rtl: function (start, soffset, finish, foffset) {
8199
+ var rng = win.document.createRange();
8200
+ rng.setStart(finish.dom(), foffset);
8201
+ rng.setEnd(start.dom(), soffset);
8202
+ return rng;
8203
+ }
8204
+ });
8205
+ };
8206
+ var $_c9xxrpp0jfuw8r1k = {
8207
+ ltr: adt$1.ltr,
8208
+ rtl: adt$1.rtl,
8209
+ diagnose: diagnose,
8210
+ asLtrRange: asLtrRange
8211
+ };
8212
+
8213
+ var searchForPoint = function (rectForOffset, x, y, maxX, length) {
8214
+ if (length === 0)
8215
+ return 0;
8216
+ else if (x === maxX)
8217
+ return length - 1;
8218
+ var xDelta = maxX;
8219
+ for (var i = 1; i < length; i++) {
8220
+ var rect = rectForOffset(i);
8221
+ var curDeltaX = Math.abs(x - rect.left);
8222
+ if (y > rect.bottom) {
8223
+ } else if (y < rect.top || curDeltaX > xDelta) {
8224
+ return i - 1;
8225
+ } else {
8226
+ xDelta = curDeltaX;
8227
+ }
8228
+ }
8229
+ return 0;
8230
+ };
8231
+ var inRect = function (rect, x, y) {
8232
+ return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
8233
+ };
8234
+ var $_4j2zpup3jfuw8r2b = {
8235
+ inRect: inRect,
8236
+ searchForPoint: searchForPoint
8237
+ };
8238
+
8239
+ var locateOffset = function (doc, textnode, x, y, rect) {
8240
+ var rangeForOffset = function (offset) {
8241
+ var r = doc.dom().createRange();
8242
+ r.setStart(textnode.dom(), offset);
8243
+ r.collapse(true);
8244
+ return r;
8245
+ };
8246
+ var rectForOffset = function (offset) {
8247
+ var r = rangeForOffset(offset);
8248
+ return r.getBoundingClientRect();
8249
+ };
8250
+ var length = $_6j8y7blnjfuw8qc3.get(textnode).length;
8251
+ var offset = $_4j2zpup3jfuw8r2b.searchForPoint(rectForOffset, x, y, rect.right, length);
8252
+ return rangeForOffset(offset);
8253
+ };
8254
+ var locate = function (doc, node, x, y) {
8255
+ var r = doc.dom().createRange();
8256
+ r.selectNode(node.dom());
8257
+ var rects = r.getClientRects();
8258
+ var foundRect = $_cul8qomvjfuw8qm7.findMap(rects, function (rect) {
8259
+ return $_4j2zpup3jfuw8r2b.inRect(rect, x, y) ? Option.some(rect) : Option.none();
8260
+ });
8261
+ return foundRect.map(function (rect) {
8262
+ return locateOffset(doc, node, x, y, rect);
8263
+ });
8264
+ };
8265
+ var $_11d3zhp4jfuw8r2c = { locate: locate };
8266
+
8267
+ var searchInChildren = function (doc, node, x, y) {
8268
+ var r = doc.dom().createRange();
8269
+ var nodes = $_s8scrkmjfuw8q7a.children(node);
8270
+ return $_cul8qomvjfuw8qm7.findMap(nodes, function (n) {
8271
+ r.selectNode(n.dom());
8272
+ return $_4j2zpup3jfuw8r2b.inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();
8273
+ });
8274
+ };
8275
+ var locateNode = function (doc, node, x, y) {
8276
+ var locator = $_a8gk30l6jfuw8q9c.isText(node) ? $_11d3zhp4jfuw8r2c.locate : searchInChildren;
8277
+ return locator(doc, node, x, y);
8278
+ };
8279
+ var locate$1 = function (doc, node, x, y) {
8280
+ var r = doc.dom().createRange();
8281
+ r.selectNode(node.dom());
8282
+ var rect = r.getBoundingClientRect();
8283
+ var boundedX = Math.max(rect.left, Math.min(rect.right, x));
8284
+ var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));
8285
+ return locateNode(doc, node, boundedX, boundedY);
8286
+ };
8287
+ var $_6f632yp2jfuw8r25 = { locate: locate$1 };
8288
+
8289
+ var COLLAPSE_TO_LEFT = true;
8290
+ var COLLAPSE_TO_RIGHT = false;
8291
+ var getCollapseDirection = function (rect, x) {
8292
+ return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;
8293
+ };
8294
+ var createCollapsedNode = function (doc, target, collapseDirection) {
8295
+ var r = doc.dom().createRange();
8296
+ r.selectNode(target.dom());
8297
+ r.collapse(collapseDirection);
8298
+ return r;
8299
+ };
8300
+ var locateInElement = function (doc, node, x) {
8301
+ var cursorRange = doc.dom().createRange();
8302
+ cursorRange.selectNode(node.dom());
8303
+ var rect = cursorRange.getBoundingClientRect();
8304
+ var collapseDirection = getCollapseDirection(rect, x);
8305
+ var f = collapseDirection === COLLAPSE_TO_LEFT ? $_ejrzj4lljfuw8qbw.first : $_ejrzj4lljfuw8qbw.last;
8306
+ return f(node).map(function (target) {
8307
+ return createCollapsedNode(doc, target, collapseDirection);
8308
+ });
8309
+ };
8310
+ var locateInEmpty = function (doc, node, x) {
8311
+ var rect = node.dom().getBoundingClientRect();
8312
+ var collapseDirection = getCollapseDirection(rect, x);
8313
+ return Option.some(createCollapsedNode(doc, node, collapseDirection));
8314
+ };
8315
+ var search = function (doc, node, x) {
8316
+ var f = $_s8scrkmjfuw8q7a.children(node).length === 0 ? locateInEmpty : locateInElement;
8317
+ return f(doc, node, x);
8318
+ };
8319
+ var $_azsqu2p5jfuw8r2i = { search: search };
8320
+
8321
+ var caretPositionFromPoint = function (doc, x, y) {
8322
+ return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {
8323
+ if (pos.offsetNode === null)
8324
+ return Option.none();
8325
+ var r = doc.dom().createRange();
8326
+ r.setStart(pos.offsetNode, pos.offset);
8327
+ r.collapse();
8328
+ return Option.some(r);
8329
+ });
8330
+ };
8331
+ var caretRangeFromPoint = function (doc, x, y) {
8332
+ return Option.from(doc.dom().caretRangeFromPoint(x, y));
8333
+ };
8334
+ var searchTextNodes = function (doc, node, x, y) {
8335
+ var r = doc.dom().createRange();
8336
+ r.selectNode(node.dom());
8337
+ var rect = r.getBoundingClientRect();
8338
+ var boundedX = Math.max(rect.left, Math.min(rect.right, x));
8339
+ var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));
8340
+ return $_6f632yp2jfuw8r25.locate(doc, node, boundedX, boundedY);
8341
+ };
8342
+ var searchFromPoint = function (doc, x, y) {
8343
+ return $_xbeoqkkjfuw8q73.fromPoint(doc, x, y).bind(function (elem) {
8344
+ var fallback = function () {
8345
+ return $_azsqu2p5jfuw8r2i.search(doc, elem, x);
8346
+ };
8347
+ return $_s8scrkmjfuw8q7a.children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);
8348
+ });
8349
+ };
8350
+ var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;
8351
+ var fromPoint$1 = function (win, x, y) {
8352
+ var doc = $_xbeoqkkjfuw8q73.fromDom(win.document);
8353
+ return availableSearch(doc, x, y).map(function (rng) {
8354
+ return $_bv1jwpoujfuw8r0m.range($_xbeoqkkjfuw8q73.fromDom(rng.startContainer), rng.startOffset, $_xbeoqkkjfuw8q73.fromDom(rng.endContainer), rng.endOffset);
8355
+ });
8356
+ };
8357
+ var $_lw04hp1jfuw8r1v = { fromPoint: fromPoint$1 };
8358
+
8359
+ var withinContainer = function (win, ancestor, outerRange, selector) {
8360
+ var innerRange = $_dkhwcmozjfuw8r1d.create(win);
8361
+ var self = $_enn9uikjjfuw8q6w.is(ancestor, selector) ? [ancestor] : [];
8362
+ var elements = self.concat($_6c9d0hl7jfuw8q9d.descendants(ancestor, selector));
8363
+ return $_tyr3yk5jfuw8q47.filter(elements, function (elem) {
8364
+ $_dkhwcmozjfuw8r1d.selectNodeContentsUsing(innerRange, elem);
8365
+ return $_dkhwcmozjfuw8r1d.isWithin(outerRange, innerRange);
8366
+ });
8367
+ };
8368
+ var find$3 = function (win, selection, selector) {
8369
+ var outerRange = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8370
+ var ancestor = $_xbeoqkkjfuw8q73.fromDom(outerRange.commonAncestorContainer);
8371
+ return $_a8gk30l6jfuw8q9c.isElement(ancestor) ? withinContainer(win, ancestor, outerRange, selector) : [];
8372
+ };
8373
+ var $_7efy22p6jfuw8r2m = { find: find$3 };
8374
+
8375
+ var beforeSpecial = function (element, offset) {
8376
+ var name = $_a8gk30l6jfuw8q9c.name(element);
8377
+ if ('input' === name)
8378
+ return $_cuk0n0ovjfuw8r0r.after(element);
8379
+ else if (!$_tyr3yk5jfuw8q47.contains([
8380
+ 'br',
8381
+ 'img'
8382
+ ], name))
8383
+ return $_cuk0n0ovjfuw8r0r.on(element, offset);
8384
+ else
8385
+ return offset === 0 ? $_cuk0n0ovjfuw8r0r.before(element) : $_cuk0n0ovjfuw8r0r.after(element);
8386
+ };
8387
+ var preprocessRelative = function (startSitu, finishSitu) {
8388
+ var start = startSitu.fold($_cuk0n0ovjfuw8r0r.before, beforeSpecial, $_cuk0n0ovjfuw8r0r.after);
8389
+ var finish = finishSitu.fold($_cuk0n0ovjfuw8r0r.before, beforeSpecial, $_cuk0n0ovjfuw8r0r.after);
8390
+ return $_bv1jwpoujfuw8r0m.relative(start, finish);
8391
+ };
8392
+ var preprocessExact = function (start, soffset, finish, foffset) {
8393
+ var startSitu = beforeSpecial(start, soffset);
8394
+ var finishSitu = beforeSpecial(finish, foffset);
8395
+ return $_bv1jwpoujfuw8r0m.relative(startSitu, finishSitu);
8396
+ };
8397
+ var preprocess = function (selection) {
8398
+ return selection.match({
8399
+ domRange: function (rng) {
8400
+ var start = $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
8401
+ var finish = $_xbeoqkkjfuw8q73.fromDom(rng.endContainer);
8402
+ return preprocessExact(start, rng.startOffset, finish, rng.endOffset);
8403
+ },
8404
+ relative: preprocessRelative,
8405
+ exact: preprocessExact
8406
+ });
8407
+ };
8408
+ var $_cjts8ap7jfuw8r2q = {
8409
+ beforeSpecial: beforeSpecial,
8410
+ preprocess: preprocess,
8411
+ preprocessRelative: preprocessRelative,
8412
+ preprocessExact: preprocessExact
8413
+ };
8414
+
8415
+ var doSetNativeRange = function (win, rng) {
8416
+ Option.from(win.getSelection()).each(function (selection) {
8417
+ selection.removeAllRanges();
8418
+ selection.addRange(rng);
8419
+ });
8420
+ };
8421
+ var doSetRange = function (win, start, soffset, finish, foffset) {
8422
+ var rng = $_dkhwcmozjfuw8r1d.exactToNative(win, start, soffset, finish, foffset);
8423
+ doSetNativeRange(win, rng);
8424
+ };
8425
+ var findWithin = function (win, selection, selector) {
8426
+ return $_7efy22p6jfuw8r2m.find(win, selection, selector);
8427
+ };
8428
+ var setRangeFromRelative = function (win, relative) {
8429
+ return $_c9xxrpp0jfuw8r1k.diagnose(win, relative).match({
8430
+ ltr: function (start, soffset, finish, foffset) {
8431
+ doSetRange(win, start, soffset, finish, foffset);
8432
+ },
8433
+ rtl: function (start, soffset, finish, foffset) {
8434
+ var selection = win.getSelection();
8435
+ if (selection.setBaseAndExtent) {
8436
+ selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);
8437
+ } else if (selection.extend) {
8438
+ selection.collapse(start.dom(), soffset);
8439
+ selection.extend(finish.dom(), foffset);
8440
+ } else {
8441
+ doSetRange(win, finish, foffset, start, soffset);
8442
+ }
8443
+ }
8444
+ });
8445
+ };
8446
+ var setExact = function (win, start, soffset, finish, foffset) {
8447
+ var relative = $_cjts8ap7jfuw8r2q.preprocessExact(start, soffset, finish, foffset);
8448
+ setRangeFromRelative(win, relative);
8449
+ };
8450
+ var setRelative = function (win, startSitu, finishSitu) {
8451
+ var relative = $_cjts8ap7jfuw8r2q.preprocessRelative(startSitu, finishSitu);
8452
+ setRangeFromRelative(win, relative);
8453
+ };
8454
+ var toNative = function (selection) {
8455
+ var win = $_bv1jwpoujfuw8r0m.getWin(selection).dom();
8456
+ var getDomRange = function (start, soffset, finish, foffset) {
8457
+ return $_dkhwcmozjfuw8r1d.exactToNative(win, start, soffset, finish, foffset);
8458
+ };
8459
+ var filtered = $_cjts8ap7jfuw8r2q.preprocess(selection);
8460
+ return $_c9xxrpp0jfuw8r1k.diagnose(win, filtered).match({
8461
+ ltr: getDomRange,
8462
+ rtl: getDomRange
8463
+ });
8464
+ };
8465
+ var readRange = function (selection) {
8466
+ if (selection.rangeCount > 0) {
8467
+ var firstRng = selection.getRangeAt(0);
8468
+ var lastRng = selection.getRangeAt(selection.rangeCount - 1);
8469
+ return Option.some($_bv1jwpoujfuw8r0m.range($_xbeoqkkjfuw8q73.fromDom(firstRng.startContainer), firstRng.startOffset, $_xbeoqkkjfuw8q73.fromDom(lastRng.endContainer), lastRng.endOffset));
8470
+ } else {
8471
+ return Option.none();
8472
+ }
8473
+ };
8474
+ var doGetExact = function (selection) {
8475
+ var anchorNode = $_xbeoqkkjfuw8q73.fromDom(selection.anchorNode);
8476
+ var focusNode = $_xbeoqkkjfuw8q73.fromDom(selection.focusNode);
8477
+ return $_5xef0moxjfuw8r17.after(anchorNode, selection.anchorOffset, focusNode, selection.focusOffset) ? Option.some($_bv1jwpoujfuw8r0m.range($_xbeoqkkjfuw8q73.fromDom(selection.anchorNode), selection.anchorOffset, $_xbeoqkkjfuw8q73.fromDom(selection.focusNode), selection.focusOffset)) : readRange(selection);
8478
+ };
8479
+ var setToElement = function (win, element) {
8480
+ var rng = $_dkhwcmozjfuw8r1d.selectNodeContents(win, element);
8481
+ doSetNativeRange(win, rng);
8482
+ };
8483
+ var forElement = function (win, element) {
8484
+ var rng = $_dkhwcmozjfuw8r1d.selectNodeContents(win, element);
8485
+ return $_bv1jwpoujfuw8r0m.range($_xbeoqkkjfuw8q73.fromDom(rng.startContainer), rng.startOffset, $_xbeoqkkjfuw8q73.fromDom(rng.endContainer), rng.endOffset);
8486
+ };
8487
+ var getExact = function (win) {
8488
+ var selection = win.getSelection();
8489
+ return selection.rangeCount > 0 ? doGetExact(selection) : Option.none();
8490
+ };
8491
+ var get$9 = function (win) {
8492
+ return getExact(win).map(function (range) {
8493
+ return $_bv1jwpoujfuw8r0m.exact(range.start(), range.soffset(), range.finish(), range.foffset());
8494
+ });
8495
+ };
8496
+ var getFirstRect$1 = function (win, selection) {
8497
+ var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8498
+ return $_dkhwcmozjfuw8r1d.getFirstRect(rng);
8499
+ };
8500
+ var getBounds$2 = function (win, selection) {
8501
+ var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8502
+ return $_dkhwcmozjfuw8r1d.getBounds(rng);
8503
+ };
8504
+ var getAtPoint = function (win, x, y) {
8505
+ return $_lw04hp1jfuw8r1v.fromPoint(win, x, y);
8506
+ };
8507
+ var getAsString = function (win, selection) {
8508
+ var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8509
+ return $_dkhwcmozjfuw8r1d.toString(rng);
8510
+ };
8511
+ var clear$1 = function (win) {
8512
+ var selection = win.getSelection();
8513
+ selection.removeAllRanges();
8514
+ };
8515
+ var clone$2 = function (win, selection) {
8516
+ var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8517
+ return $_dkhwcmozjfuw8r1d.cloneFragment(rng);
8518
+ };
8519
+ var replace$1 = function (win, selection, elements) {
8520
+ var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8521
+ var fragment = $_8a834noyjfuw8r19.fromElements(elements, win.document);
8522
+ $_dkhwcmozjfuw8r1d.replaceWith(rng, fragment);
8523
+ };
8524
+ var deleteAt = function (win, selection) {
8525
+ var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8526
+ $_dkhwcmozjfuw8r1d.deleteContents(rng);
8527
+ };
8528
+ var isCollapsed = function (start, soffset, finish, foffset) {
8529
+ return $_e8rn66kojfuw8q7n.eq(start, finish) && soffset === foffset;
8530
+ };
8531
+ var $_3gcdhqowjfuw8r11 = {
8532
+ setExact: setExact,
8533
+ getExact: getExact,
8534
+ get: get$9,
8535
+ setRelative: setRelative,
8536
+ toNative: toNative,
8537
+ setToElement: setToElement,
8538
+ clear: clear$1,
8539
+ clone: clone$2,
8540
+ replace: replace$1,
8541
+ deleteAt: deleteAt,
8542
+ forElement: forElement,
8543
+ getFirstRect: getFirstRect$1,
8544
+ getBounds: getBounds$2,
8545
+ getAtPoint: getAtPoint,
8546
+ findWithin: findWithin,
8547
+ getAsString: getAsString,
8548
+ isCollapsed: isCollapsed
8549
+ };
8550
+
8551
+ var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');
8552
+
8553
+ var forward = function (editor, isRoot, cell, lazyWire) {
8554
+ return go(editor, isRoot, $_947ovkosjfuw8r0c.next(cell), lazyWire);
8555
+ };
8556
+ var backward = function (editor, isRoot, cell, lazyWire) {
8557
+ return go(editor, isRoot, $_947ovkosjfuw8r0c.prev(cell), lazyWire);
8558
+ };
8559
+ var getCellFirstCursorPosition = function (editor, cell) {
8560
+ var selection = $_bv1jwpoujfuw8r0m.exact(cell, 0, cell, 0);
8561
+ return $_3gcdhqowjfuw8r11.toNative(selection);
8562
+ };
8563
+ var getNewRowCursorPosition = function (editor, table) {
8564
+ var rows = $_6c9d0hl7jfuw8q9d.descendants(table, 'tr');
8565
+ return $_tyr3yk5jfuw8q47.last(rows).bind(function (last) {
8566
+ return $_8wdrbmlajfuw8q9m.descendant(last, 'td,th').map(function (first) {
8567
+ return getCellFirstCursorPosition(editor, first);
8568
+ });
8569
+ });
8570
+ };
8571
+ var go = function (editor, isRoot, cell, actions, lazyWire) {
8572
+ return cell.fold(Option.none, Option.none, function (current, next) {
8573
+ return $_ejrzj4lljfuw8qbw.first(next).map(function (cell) {
8574
+ return getCellFirstCursorPosition(editor, cell);
8575
+ });
8576
+ }, function (current) {
8577
+ return $_aqhz9okhjfuw8q5y.table(current, isRoot).bind(function (table) {
8578
+ var targets = $_5b7h1hlqjfuw8qci.noMenu(current);
8579
+ editor.undoManager.transact(function () {
8580
+ actions.insertRowsAfter(table, targets);
8581
+ });
8582
+ return getNewRowCursorPosition(editor, table);
8583
+ });
8584
+ });
8585
+ };
8586
+ var rootElements = [
8587
+ 'table',
8588
+ 'li',
8589
+ 'dl'
8590
+ ];
8591
+ var handle$1 = function (event, editor, actions, lazyWire) {
8592
+ if (event.keyCode === global$4.TAB) {
8593
+ var body_1 = $_5xkhf2nnjfuw8qrq.getBody(editor);
8594
+ var isRoot_1 = function (element) {
8595
+ var name = $_a8gk30l6jfuw8q9c.name(element);
8596
+ return $_e8rn66kojfuw8q7n.eq(element, body_1) || $_tyr3yk5jfuw8q47.contains(rootElements, name);
8597
+ };
8598
+ var rng = editor.selection.getRng();
8599
+ if (rng.collapsed) {
8600
+ var start = $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
8601
+ $_aqhz9okhjfuw8q5y.cell(start, isRoot_1).each(function (cell) {
8602
+ event.preventDefault();
8603
+ var navigation = event.shiftKey ? backward : forward;
8604
+ var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);
8605
+ rng.each(function (range) {
8606
+ editor.selection.setRng(range);
8607
+ });
8608
+ });
8609
+ }
8610
+ }
8611
+ };
8612
+ var $_djb8ceorjfuw8qzt = { handle: handle$1 };
8613
+
8614
+ var response = $_5now9kbjfuw8q5e.immutable('selection', 'kill');
8615
+ var $_b7ap4hpbjfuw8r3x = { response: response };
8616
+
8617
+ var isKey = function (key) {
8618
+ return function (keycode) {
8619
+ return keycode === key;
8620
+ };
8621
+ };
8622
+ var isUp = isKey(38);
8623
+ var isDown = isKey(40);
8624
+ var isNavigation = function (keycode) {
8625
+ return keycode >= 37 && keycode <= 40;
8626
+ };
8627
+ var $_9n04otpcjfuw8r40 = {
8628
+ ltr: {
8629
+ isBackward: isKey(37),
8630
+ isForward: isKey(39)
8631
+ },
8632
+ rtl: {
8633
+ isBackward: isKey(39),
8634
+ isForward: isKey(37)
8635
+ },
8636
+ isUp: isUp,
8637
+ isDown: isDown,
8638
+ isNavigation: isNavigation
8639
+ };
8640
+
8641
+ var convertToRange = function (win, selection) {
8642
+ var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, selection);
8643
+ return {
8644
+ start: $_20nfr6k7jfuw8q4g.constant($_xbeoqkkjfuw8q73.fromDom(rng.startContainer)),
8645
+ soffset: $_20nfr6k7jfuw8q4g.constant(rng.startOffset),
8646
+ finish: $_20nfr6k7jfuw8q4g.constant($_xbeoqkkjfuw8q73.fromDom(rng.endContainer)),
8647
+ foffset: $_20nfr6k7jfuw8q4g.constant(rng.endOffset)
8648
+ };
8649
+ };
8650
+ var makeSitus = function (start, soffset, finish, foffset) {
8651
+ return {
8652
+ start: $_20nfr6k7jfuw8q4g.constant($_cuk0n0ovjfuw8r0r.on(start, soffset)),
8653
+ finish: $_20nfr6k7jfuw8q4g.constant($_cuk0n0ovjfuw8r0r.on(finish, foffset))
8654
+ };
8655
+ };
8656
+ var $_81eh29pejfuw8r4k = {
8657
+ convertToRange: convertToRange,
8658
+ makeSitus: makeSitus
8659
+ };
8660
+
8661
+ var isSafari = $_fqgee0ktjfuw8q83.detect().browser.isSafari();
8662
+ var get$10 = function (_doc) {
8663
+ var doc = _doc !== undefined ? _doc.dom() : document;
8664
+ var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;
8665
+ var y = doc.body.scrollTop || doc.documentElement.scrollTop;
8666
+ return r(x, y);
8667
+ };
8668
+ var to = function (x, y, _doc) {
8669
+ var doc = _doc !== undefined ? _doc.dom() : document;
8670
+ var win = doc.defaultView;
8671
+ win.scrollTo(x, y);
8672
+ };
8673
+ var by = function (x, y, _doc) {
8674
+ var doc = _doc !== undefined ? _doc.dom() : document;
8675
+ var win = doc.defaultView;
8676
+ win.scrollBy(x, y);
8677
+ };
8678
+ var setToElement$1 = function (win, element) {
8679
+ var pos = $_hsvzlmijfuw8qj4.absolute(element);
8680
+ var doc = $_xbeoqkkjfuw8q73.fromDom(win.document);
8681
+ to(pos.left(), pos.top(), doc);
8682
+ };
8683
+ var preserve$1 = function (doc, f) {
8684
+ var before = get$10(doc);
8685
+ f();
8686
+ var after = get$10(doc);
8687
+ if (before.top() !== after.top() || before.left() !== after.left()) {
8688
+ to(before.left(), before.top(), doc);
8689
+ }
8690
+ };
8691
+ var capture$2 = function (doc) {
8692
+ var previous = Option.none();
8693
+ var save = function () {
8694
+ previous = Option.some(get$10(doc));
8695
+ };
8696
+ var restore = function () {
8697
+ previous.each(function (p) {
8698
+ to(p.left(), p.top(), doc);
8699
+ });
8700
+ };
8701
+ save();
8702
+ return {
8703
+ save: save,
8704
+ restore: restore
8705
+ };
8706
+ };
8707
+ var intoView = function (element, alignToTop) {
8708
+ if (isSafari && $_g6mvnrk8jfuw8q4k.isFunction(element.dom().scrollIntoViewIfNeeded)) {
8709
+ element.dom().scrollIntoViewIfNeeded(false);
8710
+ } else {
8711
+ element.dom().scrollIntoView(alignToTop);
8712
+ }
8713
+ };
8714
+ var intoViewIfNeeded = function (element, container) {
8715
+ var containerBox = container.dom().getBoundingClientRect();
8716
+ var elementBox = element.dom().getBoundingClientRect();
8717
+ if (elementBox.top < containerBox.top) {
8718
+ intoView(element, true);
8719
+ } else if (elementBox.bottom > containerBox.bottom) {
8720
+ intoView(element, false);
8721
+ }
8722
+ };
8723
+ var scrollBarWidth = function () {
8724
+ var scrollDiv = $_xbeoqkkjfuw8q73.fromHtml('<div style="width: 100px; height: 100px; overflow: scroll; position: absolute; top: -9999px;"></div>');
8725
+ $_fatuxylgjfuw8qav.after($_atd1tul9jfuw8q9i.body(), scrollDiv);
8726
+ var w = scrollDiv.dom().offsetWidth - scrollDiv.dom().clientWidth;
8727
+ $_fl1deelhjfuw8qax.remove(scrollDiv);
8728
+ return w;
8729
+ };
8730
+ var $_xvhf9pfjfuw8r51 = {
8731
+ get: get$10,
8732
+ to: to,
8733
+ by: by,
8734
+ preserve: preserve$1,
8735
+ capture: capture$2,
8736
+ intoView: intoView,
8737
+ intoViewIfNeeded: intoViewIfNeeded,
8738
+ setToElement: setToElement$1,
8739
+ scrollBarWidth: scrollBarWidth
8740
+ };
8741
+
8742
+ function WindowBridge (win) {
8743
+ var elementFromPoint = function (x, y) {
8744
+ return Option.from(win.document.elementFromPoint(x, y)).map($_xbeoqkkjfuw8q73.fromDom);
8745
+ };
8746
+ var getRect = function (element) {
8747
+ return element.dom().getBoundingClientRect();
8748
+ };
8749
+ var getRangedRect = function (start, soffset, finish, foffset) {
8750
+ var sel = $_bv1jwpoujfuw8r0m.exact(start, soffset, finish, foffset);
8751
+ return $_3gcdhqowjfuw8r11.getFirstRect(win, sel).map(function (structRect) {
8752
+ return $_11yiupkajfuw8q5c.map(structRect, $_20nfr6k7jfuw8q4g.apply);
8753
+ });
8754
+ };
8755
+ var getSelection = function () {
8756
+ return $_3gcdhqowjfuw8r11.get(win).map(function (exactAdt) {
8757
+ return $_81eh29pejfuw8r4k.convertToRange(win, exactAdt);
8758
+ });
8759
+ };
8760
+ var fromSitus = function (situs) {
8761
+ var relative = $_bv1jwpoujfuw8r0m.relative(situs.start(), situs.finish());
8762
+ return $_81eh29pejfuw8r4k.convertToRange(win, relative);
8763
+ };
8764
+ var situsFromPoint = function (x, y) {
8765
+ return $_3gcdhqowjfuw8r11.getAtPoint(win, x, y).map(function (exact) {
8766
+ return {
8767
+ start: $_20nfr6k7jfuw8q4g.constant($_cuk0n0ovjfuw8r0r.on(exact.start(), exact.soffset())),
8768
+ finish: $_20nfr6k7jfuw8q4g.constant($_cuk0n0ovjfuw8r0r.on(exact.finish(), exact.foffset()))
8769
+ };
8770
+ });
8771
+ };
8772
+ var clearSelection = function () {
8773
+ $_3gcdhqowjfuw8r11.clear(win);
8774
+ };
8775
+ var selectContents = function (element) {
8776
+ $_3gcdhqowjfuw8r11.setToElement(win, element);
8777
+ };
8778
+ var setSelection = function (sel) {
8779
+ $_3gcdhqowjfuw8r11.setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());
8780
+ };
8781
+ var setRelativeSelection = function (start, finish) {
8782
+ $_3gcdhqowjfuw8r11.setRelative(win, start, finish);
8783
+ };
8784
+ var getInnerHeight = function () {
8785
+ return win.innerHeight;
8786
+ };
8787
+ var getScrollY = function () {
8788
+ var pos = $_xvhf9pfjfuw8r51.get($_xbeoqkkjfuw8q73.fromDom(win.document));
8789
+ return pos.top();
8790
+ };
8791
+ var scrollBy = function (x, y) {
8792
+ $_xvhf9pfjfuw8r51.by(x, y, $_xbeoqkkjfuw8q73.fromDom(win.document));
8793
+ };
8794
+ return {
8795
+ elementFromPoint: elementFromPoint,
8796
+ getRect: getRect,
8797
+ getRangedRect: getRangedRect,
8798
+ getSelection: getSelection,
8799
+ fromSitus: fromSitus,
8800
+ situsFromPoint: situsFromPoint,
8801
+ clearSelection: clearSelection,
8802
+ setSelection: setSelection,
8803
+ setRelativeSelection: setRelativeSelection,
8804
+ selectContents: selectContents,
8805
+ getInnerHeight: getInnerHeight,
8806
+ getScrollY: getScrollY,
8807
+ scrollBy: scrollBy
8808
+ };
8809
+ }
8810
+
8811
+ var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {
8812
+ if (!($_e8rn66kojfuw8q7n.eq(start, finish) && soffset === foffset)) {
8813
+ return $_8wdrbmlajfuw8q9m.closest(start, 'td,th', isRoot).bind(function (s) {
8814
+ return $_8wdrbmlajfuw8q9m.closest(finish, 'td,th', isRoot).bind(function (f) {
8815
+ return detect$5(container, isRoot, s, f, selectRange);
8816
+ });
8817
+ });
8818
+ } else {
8819
+ return Option.none();
8820
+ }
8821
+ };
8822
+ var detect$5 = function (container, isRoot, start, finish, selectRange) {
8823
+ if (!$_e8rn66kojfuw8q7n.eq(start, finish)) {
8824
+ return $_dpd405ltjfuw8qd8.identify(start, finish, isRoot).bind(function (cellSel) {
8825
+ var boxes = cellSel.boxes().getOr([]);
8826
+ if (boxes.length > 0) {
8827
+ selectRange(container, boxes, cellSel.start(), cellSel.finish());
8828
+ return Option.some($_b7ap4hpbjfuw8r3x.response(Option.some($_81eh29pejfuw8r4k.makeSitus(start, 0, start, $_6vfowrlmjfuw8qbz.getEnd(start))), true));
8829
+ } else {
8830
+ return Option.none();
8831
+ }
8832
+ });
8833
+ } else {
8834
+ return Option.none();
8835
+ }
8836
+ };
8837
+ var update = function (rows, columns, container, selected, annotations) {
8838
+ var updateSelection = function (newSels) {
8839
+ annotations.clear(container);
8840
+ annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());
8841
+ return newSels.boxes();
8842
+ };
8843
+ return $_dpd405ltjfuw8qd8.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);
8844
+ };
8845
+ var $_7ulhzpgjfuw8r5b = {
8846
+ sync: sync,
8847
+ detect: detect$5,
8848
+ update: update
8849
+ };
8850
+
8851
+ var nu$3 = $_5now9kbjfuw8q5e.immutableBag([
8852
+ 'left',
8853
+ 'top',
8854
+ 'right',
8855
+ 'bottom'
8856
+ ], []);
8857
+ var moveDown = function (caret, amount) {
8858
+ return nu$3({
8859
+ left: caret.left(),
8860
+ top: caret.top() + amount,
8861
+ right: caret.right(),
8862
+ bottom: caret.bottom() + amount
8863
+ });
8864
+ };
8865
+ var moveUp = function (caret, amount) {
8866
+ return nu$3({
8867
+ left: caret.left(),
8868
+ top: caret.top() - amount,
8869
+ right: caret.right(),
8870
+ bottom: caret.bottom() - amount
8871
+ });
8872
+ };
8873
+ var moveBottomTo = function (caret, bottom) {
8874
+ var height = caret.bottom() - caret.top();
8875
+ return nu$3({
8876
+ left: caret.left(),
8877
+ top: bottom - height,
8878
+ right: caret.right(),
8879
+ bottom: bottom
8880
+ });
8881
+ };
8882
+ var moveTopTo = function (caret, top) {
8883
+ var height = caret.bottom() - caret.top();
8884
+ return nu$3({
8885
+ left: caret.left(),
8886
+ top: top,
8887
+ right: caret.right(),
8888
+ bottom: top + height
8889
+ });
8890
+ };
8891
+ var translate = function (caret, xDelta, yDelta) {
8892
+ return nu$3({
8893
+ left: caret.left() + xDelta,
8894
+ top: caret.top() + yDelta,
8895
+ right: caret.right() + xDelta,
8896
+ bottom: caret.bottom() + yDelta
8897
+ });
8898
+ };
8899
+ var getTop$1 = function (caret) {
8900
+ return caret.top();
8901
+ };
8902
+ var getBottom = function (caret) {
8903
+ return caret.bottom();
8904
+ };
8905
+ var toString$1 = function (caret) {
8906
+ return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';
8907
+ };
8908
+ var $_37xezepjjfuw8r6q = {
8909
+ nu: nu$3,
8910
+ moveUp: moveUp,
8911
+ moveDown: moveDown,
8912
+ moveBottomTo: moveBottomTo,
8913
+ moveTopTo: moveTopTo,
8914
+ getTop: getTop$1,
8915
+ getBottom: getBottom,
8916
+ translate: translate,
8917
+ toString: toString$1
8918
+ };
8919
+
8920
+ var getPartialBox = function (bridge, element, offset) {
8921
+ if (offset >= 0 && offset < $_6vfowrlmjfuw8qbz.getEnd(element))
8922
+ return bridge.getRangedRect(element, offset, element, offset + 1);
8923
+ else if (offset > 0)
8924
+ return bridge.getRangedRect(element, offset - 1, element, offset);
8925
+ return Option.none();
8926
+ };
8927
+ var toCaret = function (rect) {
8928
+ return $_37xezepjjfuw8r6q.nu({
8929
+ left: rect.left,
8930
+ top: rect.top,
8931
+ right: rect.right,
8932
+ bottom: rect.bottom
8933
+ });
8934
+ };
8935
+ var getElemBox = function (bridge, element) {
8936
+ return Option.some(bridge.getRect(element));
8937
+ };
8938
+ var getBoxAt = function (bridge, element, offset) {
8939
+ if ($_a8gk30l6jfuw8q9c.isElement(element))
8940
+ return getElemBox(bridge, element).map(toCaret);
8941
+ else if ($_a8gk30l6jfuw8q9c.isText(element))
8942
+ return getPartialBox(bridge, element, offset).map(toCaret);
8943
+ else
8944
+ return Option.none();
8945
+ };
8946
+ var getEntireBox = function (bridge, element) {
8947
+ if ($_a8gk30l6jfuw8q9c.isElement(element))
8948
+ return getElemBox(bridge, element).map(toCaret);
8949
+ else if ($_a8gk30l6jfuw8q9c.isText(element))
8950
+ return bridge.getRangedRect(element, 0, element, $_6vfowrlmjfuw8qbz.getEnd(element)).map(toCaret);
8951
+ else
8952
+ return Option.none();
8953
+ };
8954
+ var $_8xl6tpkjfuw8r6u = {
8955
+ getBoxAt: getBoxAt,
8956
+ getEntireBox: getEntireBox
8957
+ };
8958
+
8959
+ var traverse = $_5now9kbjfuw8q5e.immutable('item', 'mode');
8960
+ var backtrack = function (universe, item, direction, _transition) {
8961
+ var transition = _transition !== undefined ? _transition : sidestep;
8962
+ return universe.property().parent(item).map(function (p) {
8963
+ return traverse(p, transition);
8964
+ });
8965
+ };
8966
+ var sidestep = function (universe, item, direction, _transition) {
8967
+ var transition = _transition !== undefined ? _transition : advance;
8968
+ return direction.sibling(universe, item).map(function (p) {
8969
+ return traverse(p, transition);
8970
+ });
8971
+ };
8972
+ var advance = function (universe, item, direction, _transition) {
8973
+ var transition = _transition !== undefined ? _transition : advance;
8974
+ var children = universe.property().children(item);
8975
+ var result = direction.first(children);
8976
+ return result.map(function (r) {
8977
+ return traverse(r, transition);
8978
+ });
8979
+ };
8980
+ var successors = [
8981
+ {
8982
+ current: backtrack,
8983
+ next: sidestep,
8984
+ fallback: Option.none()
8985
+ },
8986
+ {
8987
+ current: sidestep,
8988
+ next: advance,
8989
+ fallback: Option.some(backtrack)
8990
+ },
8991
+ {
8992
+ current: advance,
8993
+ next: advance,
8994
+ fallback: Option.some(sidestep)
8995
+ }
8996
+ ];
8997
+ var go$1 = function (universe, item, mode, direction, rules) {
8998
+ var rules = rules !== undefined ? rules : successors;
8999
+ var ruleOpt = $_tyr3yk5jfuw8q47.find(rules, function (succ) {
9000
+ return succ.current === mode;
9001
+ });
9002
+ return ruleOpt.bind(function (rule) {
9003
+ return rule.current(universe, item, direction, rule.next).orThunk(function () {
9004
+ return rule.fallback.bind(function (fb) {
9005
+ return go$1(universe, item, fb, direction);
9006
+ });
9007
+ });
9008
+ });
9009
+ };
9010
+ var $_12nww3ppjfuw8r7x = {
9011
+ backtrack: backtrack,
9012
+ sidestep: sidestep,
9013
+ advance: advance,
9014
+ go: go$1
9015
+ };
9016
+
9017
+ var left$1 = function () {
9018
+ var sibling = function (universe, item) {
9019
+ return universe.query().prevSibling(item);
9020
+ };
9021
+ var first = function (children) {
9022
+ return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();
9023
+ };
9024
+ return {
9025
+ sibling: sibling,
9026
+ first: first
9027
+ };
9028
+ };
9029
+ var right$1 = function () {
9030
+ var sibling = function (universe, item) {
9031
+ return universe.query().nextSibling(item);
9032
+ };
9033
+ var first = function (children) {
9034
+ return children.length > 0 ? Option.some(children[0]) : Option.none();
9035
+ };
9036
+ return {
9037
+ sibling: sibling,
9038
+ first: first
9039
+ };
9040
+ };
9041
+ var $_135xakpqjfuw8r85 = {
9042
+ left: left$1,
9043
+ right: right$1
9044
+ };
9045
+
9046
+ var hone = function (universe, item, predicate, mode, direction, isRoot) {
9047
+ var next = $_12nww3ppjfuw8r7x.go(universe, item, mode, direction);
9048
+ return next.bind(function (n) {
9049
+ if (isRoot(n.item()))
9050
+ return Option.none();
9051
+ else
9052
+ return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);
9053
+ });
9054
+ };
9055
+ var left$2 = function (universe, item, predicate, isRoot) {
9056
+ return hone(universe, item, predicate, $_12nww3ppjfuw8r7x.sidestep, $_135xakpqjfuw8r85.left(), isRoot);
9057
+ };
9058
+ var right$2 = function (universe, item, predicate, isRoot) {
9059
+ return hone(universe, item, predicate, $_12nww3ppjfuw8r7x.sidestep, $_135xakpqjfuw8r85.right(), isRoot);
9060
+ };
9061
+ var $_6b0zg3pojfuw8r7t = {
9062
+ left: left$2,
9063
+ right: right$2
9064
+ };
9065
+
9066
+ var isLeaf = function (universe, element) {
9067
+ return universe.property().children(element).length === 0;
9068
+ };
9069
+ var before$2 = function (universe, item, isRoot) {
9070
+ return seekLeft(universe, item, $_20nfr6k7jfuw8q4g.curry(isLeaf, universe), isRoot);
9071
+ };
9072
+ var after$3 = function (universe, item, isRoot) {
9073
+ return seekRight(universe, item, $_20nfr6k7jfuw8q4g.curry(isLeaf, universe), isRoot);
9074
+ };
9075
+ var seekLeft = function (universe, item, predicate, isRoot) {
9076
+ return $_6b0zg3pojfuw8r7t.left(universe, item, predicate, isRoot);
9077
+ };
9078
+ var seekRight = function (universe, item, predicate, isRoot) {
9079
+ return $_6b0zg3pojfuw8r7t.right(universe, item, predicate, isRoot);
9080
+ };
9081
+ var walkers = function () {
9082
+ return {
9083
+ left: $_135xakpqjfuw8r85.left,
9084
+ right: $_135xakpqjfuw8r85.right
9085
+ };
9086
+ };
9087
+ var walk = function (universe, item, mode, direction, _rules) {
9088
+ return $_12nww3ppjfuw8r7x.go(universe, item, mode, direction, _rules);
9089
+ };
9090
+ var $_fivsmpnjfuw8r7p = {
9091
+ before: before$2,
9092
+ after: after$3,
9093
+ seekLeft: seekLeft,
9094
+ seekRight: seekRight,
9095
+ walkers: walkers,
9096
+ walk: walk,
9097
+ backtrack: $_12nww3ppjfuw8r7x.backtrack,
9098
+ sidestep: $_12nww3ppjfuw8r7x.sidestep,
9099
+ advance: $_12nww3ppjfuw8r7x.advance
9100
+ };
9101
+
9102
+ var universe$2 = DomUniverse();
9103
+ var gather = function (element, prune, transform) {
9104
+ return $_fivsmpnjfuw8r7p.gather(universe$2, element, prune, transform);
9105
+ };
9106
+ var before$3 = function (element, isRoot) {
9107
+ return $_fivsmpnjfuw8r7p.before(universe$2, element, isRoot);
9108
+ };
9109
+ var after$4 = function (element, isRoot) {
9110
+ return $_fivsmpnjfuw8r7p.after(universe$2, element, isRoot);
9111
+ };
9112
+ var seekLeft$1 = function (element, predicate, isRoot) {
9113
+ return $_fivsmpnjfuw8r7p.seekLeft(universe$2, element, predicate, isRoot);
9114
+ };
9115
+ var seekRight$1 = function (element, predicate, isRoot) {
9116
+ return $_fivsmpnjfuw8r7p.seekRight(universe$2, element, predicate, isRoot);
9117
+ };
9118
+ var walkers$1 = function () {
9119
+ return $_fivsmpnjfuw8r7p.walkers();
9120
+ };
9121
+ var walk$1 = function (item, mode, direction, _rules) {
9122
+ return $_fivsmpnjfuw8r7p.walk(universe$2, item, mode, direction, _rules);
9123
+ };
9124
+ var $_fgafb6pmjfuw8r7l = {
9125
+ gather: gather,
9126
+ before: before$3,
9127
+ after: after$4,
9128
+ seekLeft: seekLeft$1,
9129
+ seekRight: seekRight$1,
9130
+ walkers: walkers$1,
9131
+ walk: walk$1
9132
+ };
9133
+
9134
+ var JUMP_SIZE = 5;
9135
+ var NUM_RETRIES = 100;
9136
+ var adt$2 = $_7sbzam7jfuw8qgu.generate([
9137
+ { 'none': [] },
9138
+ { 'retry': ['caret'] }
9139
+ ]);
9140
+ var isOutside = function (caret, box) {
9141
+ return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();
9142
+ };
9143
+ var inOutsideBlock = function (bridge, element, caret) {
9144
+ return $_11ympzlbjfuw8q9n.closest(element, $_d9tdqtmrjfuw8ql9.isBlock).fold($_20nfr6k7jfuw8q4g.constant(false), function (cell) {
9145
+ return $_8xl6tpkjfuw8r6u.getEntireBox(bridge, cell).exists(function (box) {
9146
+ return isOutside(caret, box);
9147
+ });
9148
+ });
9149
+ };
9150
+ var adjustDown = function (bridge, element, guessBox, original, caret) {
9151
+ var lowerCaret = $_37xezepjjfuw8r6q.moveDown(caret, JUMP_SIZE);
9152
+ if (Math.abs(guessBox.bottom() - original.bottom()) < 1)
9153
+ return adt$2.retry(lowerCaret);
9154
+ else if (guessBox.top() > caret.bottom())
9155
+ return adt$2.retry(lowerCaret);
9156
+ else if (guessBox.top() === caret.bottom())
9157
+ return adt$2.retry($_37xezepjjfuw8r6q.moveDown(caret, 1));
9158
+ else
9159
+ return inOutsideBlock(bridge, element, caret) ? adt$2.retry($_37xezepjjfuw8r6q.translate(lowerCaret, JUMP_SIZE, 0)) : adt$2.none();
9160
+ };
9161
+ var adjustUp = function (bridge, element, guessBox, original, caret) {
9162
+ var higherCaret = $_37xezepjjfuw8r6q.moveUp(caret, JUMP_SIZE);
9163
+ if (Math.abs(guessBox.top() - original.top()) < 1)
9164
+ return adt$2.retry(higherCaret);
9165
+ else if (guessBox.bottom() < caret.top())
9166
+ return adt$2.retry(higherCaret);
9167
+ else if (guessBox.bottom() === caret.top())
9168
+ return adt$2.retry($_37xezepjjfuw8r6q.moveUp(caret, 1));
9169
+ else
9170
+ return inOutsideBlock(bridge, element, caret) ? adt$2.retry($_37xezepjjfuw8r6q.translate(higherCaret, JUMP_SIZE, 0)) : adt$2.none();
9171
+ };
9172
+ var upMovement = {
9173
+ point: $_37xezepjjfuw8r6q.getTop,
9174
+ adjuster: adjustUp,
9175
+ move: $_37xezepjjfuw8r6q.moveUp,
9176
+ gather: $_fgafb6pmjfuw8r7l.before
9177
+ };
9178
+ var downMovement = {
9179
+ point: $_37xezepjjfuw8r6q.getBottom,
9180
+ adjuster: adjustDown,
9181
+ move: $_37xezepjjfuw8r6q.moveDown,
9182
+ gather: $_fgafb6pmjfuw8r7l.after
9183
+ };
9184
+ var isAtTable = function (bridge, x, y) {
9185
+ return bridge.elementFromPoint(x, y).filter(function (elm) {
9186
+ return $_a8gk30l6jfuw8q9c.name(elm) === 'table';
9187
+ }).isSome();
9188
+ };
9189
+ var adjustForTable = function (bridge, movement, original, caret, numRetries) {
9190
+ return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);
9191
+ };
9192
+ var adjustTil = function (bridge, movement, original, caret, numRetries) {
9193
+ if (numRetries === 0)
9194
+ return Option.some(caret);
9195
+ if (isAtTable(bridge, caret.left(), movement.point(caret)))
9196
+ return adjustForTable(bridge, movement, original, caret, numRetries - 1);
9197
+ return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {
9198
+ return guess.start().fold(Option.none, function (element, offset) {
9199
+ return $_8xl6tpkjfuw8r6u.getEntireBox(bridge, element, offset).bind(function (guessBox) {
9200
+ return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {
9201
+ return adjustTil(bridge, movement, original, newCaret, numRetries - 1);
9202
+ });
9203
+ }).orThunk(function () {
9204
+ return Option.some(caret);
9205
+ });
9206
+ }, Option.none);
9207
+ });
9208
+ };
9209
+ var ieTryDown = function (bridge, caret) {
9210
+ return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);
9211
+ };
9212
+ var ieTryUp = function (bridge, caret) {
9213
+ return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);
9214
+ };
9215
+ var checkScroll = function (movement, adjusted, bridge) {
9216
+ if (movement.point(adjusted) > bridge.getInnerHeight())
9217
+ return Option.some(movement.point(adjusted) - bridge.getInnerHeight());
9218
+ else if (movement.point(adjusted) < 0)
9219
+ return Option.some(-movement.point(adjusted));
9220
+ else
9221
+ return Option.none();
9222
+ };
9223
+ var retry = function (movement, bridge, caret) {
9224
+ var moved = movement.move(caret, JUMP_SIZE);
9225
+ var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);
9226
+ return checkScroll(movement, adjusted, bridge).fold(function () {
9227
+ return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));
9228
+ }, function (delta) {
9229
+ bridge.scrollBy(0, delta);
9230
+ return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);
9231
+ });
9232
+ };
9233
+ var $_efciv1pljfuw8r73 = {
9234
+ tryUp: $_20nfr6k7jfuw8q4g.curry(retry, upMovement),
9235
+ tryDown: $_20nfr6k7jfuw8q4g.curry(retry, downMovement),
9236
+ ieTryUp: ieTryUp,
9237
+ ieTryDown: ieTryDown,
9238
+ getJumpSize: $_20nfr6k7jfuw8q4g.constant(JUMP_SIZE)
9239
+ };
9240
+
9241
+ var adt$3 = $_7sbzam7jfuw8qgu.generate([
9242
+ { 'none': ['message'] },
9243
+ { 'success': [] },
9244
+ { 'failedUp': ['cell'] },
9245
+ { 'failedDown': ['cell'] }
9246
+ ]);
9247
+ var isOverlapping = function (bridge, before, after) {
9248
+ var beforeBounds = bridge.getRect(before);
9249
+ var afterBounds = bridge.getRect(after);
9250
+ return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;
9251
+ };
9252
+ var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {
9253
+ return $_8wdrbmlajfuw8q9m.closest(after, 'td,th', isRoot).bind(function (afterCell) {
9254
+ return $_8wdrbmlajfuw8q9m.closest(before, 'td,th', isRoot).map(function (beforeCell) {
9255
+ if (!$_e8rn66kojfuw8q7n.eq(afterCell, beforeCell)) {
9256
+ return $_583a2nlujfuw8qdw.sharedOne(isRow, [
9257
+ afterCell,
9258
+ beforeCell
9259
+ ]).fold(function () {
9260
+ return isOverlapping(bridge, beforeCell, afterCell) ? adt$3.success() : failure(beforeCell);
9261
+ }, function (sharedRow) {
9262
+ return failure(beforeCell);
9263
+ });
9264
+ } else {
9265
+ return $_e8rn66kojfuw8q7n.eq(after, afterCell) && $_6vfowrlmjfuw8qbz.getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$3.none('in same cell');
9266
+ }
9267
+ });
9268
+ }).getOr(adt$3.none('default'));
9269
+ };
9270
+ var isRow = function (elem) {
9271
+ return $_8wdrbmlajfuw8q9m.closest(elem, 'tr');
9272
+ };
9273
+ var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {
9274
+ return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);
9275
+ };
9276
+ var $_25fydhprjfuw8r89 = {
9277
+ verify: verify,
9278
+ cata: cata$2,
9279
+ adt: adt$3
9280
+ };
9281
+
9282
+ var point = $_5now9kbjfuw8q5e.immutable('element', 'offset');
9283
+ var delta = $_5now9kbjfuw8q5e.immutable('element', 'deltaOffset');
9284
+ var range$3 = $_5now9kbjfuw8q5e.immutable('element', 'start', 'finish');
9285
+ var points = $_5now9kbjfuw8q5e.immutable('begin', 'end');
9286
+ var text = $_5now9kbjfuw8q5e.immutable('element', 'text');
9287
+ var $_1kct4uptjfuw8r98 = {
9288
+ point: point,
9289
+ delta: delta,
9290
+ range: range$3,
9291
+ points: points,
9292
+ text: text
9293
+ };
9294
+
9295
+ var inAncestor = $_5now9kbjfuw8q5e.immutable('ancestor', 'descendants', 'element', 'index');
9296
+ var inParent = $_5now9kbjfuw8q5e.immutable('parent', 'children', 'element', 'index');
9297
+ var childOf = function (element, ancestor) {
9298
+ return $_11ympzlbjfuw8q9n.closest(element, function (elem) {
9299
+ return $_s8scrkmjfuw8q7a.parent(elem).exists(function (parent) {
9300
+ return $_e8rn66kojfuw8q7n.eq(parent, ancestor);
9301
+ });
9302
+ });
9303
+ };
9304
+ var indexInParent = function (element) {
9305
+ return $_s8scrkmjfuw8q7a.parent(element).bind(function (parent) {
9306
+ var children = $_s8scrkmjfuw8q7a.children(parent);
9307
+ return indexOf$1(children, element).map(function (index) {
9308
+ return inParent(parent, children, element, index);
9309
+ });
9310
+ });
9311
+ };
9312
+ var indexOf$1 = function (elements, element) {
9313
+ return $_tyr3yk5jfuw8q47.findIndex(elements, $_20nfr6k7jfuw8q4g.curry($_e8rn66kojfuw8q7n.eq, element));
9314
+ };
9315
+ var selectorsInParent = function (element, selector) {
9316
+ return $_s8scrkmjfuw8q7a.parent(element).bind(function (parent) {
9317
+ var children = $_6c9d0hl7jfuw8q9d.children(parent, selector);
9318
+ return indexOf$1(children, element).map(function (index) {
9319
+ return inParent(parent, children, element, index);
9320
+ });
9321
+ });
9322
+ };
9323
+ var descendantsInAncestor = function (element, ancestorSelector, descendantSelector) {
9324
+ return $_8wdrbmlajfuw8q9m.closest(element, ancestorSelector).bind(function (ancestor) {
9325
+ var descendants = $_6c9d0hl7jfuw8q9d.descendants(ancestor, descendantSelector);
9326
+ return indexOf$1(descendants, element).map(function (index) {
9327
+ return inAncestor(ancestor, descendants, element, index);
9328
+ });
9329
+ });
9330
+ };
9331
+ var $_cz3gbvpujfuw8r9c = {
9332
+ childOf: childOf,
9333
+ indexOf: indexOf$1,
9334
+ indexInParent: indexInParent,
9335
+ selectorsInParent: selectorsInParent,
9336
+ descendantsInAncestor: descendantsInAncestor
9337
+ };
9338
+
9339
+ var isBr = function (elem) {
9340
+ return $_a8gk30l6jfuw8q9c.name(elem) === 'br';
9341
+ };
9342
+ var gatherer = function (cand, gather, isRoot) {
9343
+ return gather(cand, isRoot).bind(function (target) {
9344
+ return $_a8gk30l6jfuw8q9c.isText(target) && $_6j8y7blnjfuw8qc3.get(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);
9345
+ });
9346
+ };
9347
+ var handleBr = function (isRoot, element, direction) {
9348
+ return direction.traverse(element).orThunk(function () {
9349
+ return gatherer(element, direction.gather, isRoot);
9350
+ }).map(direction.relative);
9351
+ };
9352
+ var findBr = function (element, offset) {
9353
+ return $_s8scrkmjfuw8q7a.child(element, offset).filter(isBr).orThunk(function () {
9354
+ return $_s8scrkmjfuw8q7a.child(element, offset - 1).filter(isBr);
9355
+ });
9356
+ };
9357
+ var handleParent = function (isRoot, element, offset, direction) {
9358
+ return findBr(element, offset).bind(function (br) {
9359
+ return direction.traverse(br).fold(function () {
9360
+ return gatherer(br, direction.gather, isRoot).map(direction.relative);
9361
+ }, function (adjacent) {
9362
+ return $_cz3gbvpujfuw8r9c.indexInParent(adjacent).map(function (info) {
9363
+ return $_cuk0n0ovjfuw8r0r.on(info.parent(), info.index());
9364
+ });
9365
+ });
9366
+ });
9367
+ };
9368
+ var tryBr = function (isRoot, element, offset, direction) {
9369
+ var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);
9370
+ return target.map(function (tgt) {
9371
+ return {
9372
+ start: $_20nfr6k7jfuw8q4g.constant(tgt),
9373
+ finish: $_20nfr6k7jfuw8q4g.constant(tgt)
9374
+ };
9375
+ });
9376
+ };
9377
+ var process = function (analysis) {
9378
+ return $_25fydhprjfuw8r89.cata(analysis, function (message) {
9379
+ return Option.none();
9380
+ }, function () {
9381
+ return Option.none();
9382
+ }, function (cell) {
9383
+ return Option.some($_1kct4uptjfuw8r98.point(cell, 0));
9384
+ }, function (cell) {
9385
+ return Option.some($_1kct4uptjfuw8r98.point(cell, $_6vfowrlmjfuw8qbz.getEnd(cell)));
9386
+ });
9387
+ };
9388
+ var $_62az2spsjfuw8r8p = {
9389
+ tryBr: tryBr,
9390
+ process: process
9391
+ };
9392
+
9393
+ var MAX_RETRIES = 20;
9394
+ var platform$1 = $_fqgee0ktjfuw8q83.detect();
9395
+ var findSpot = function (bridge, isRoot, direction) {
9396
+ return bridge.getSelection().bind(function (sel) {
9397
+ return $_62az2spsjfuw8r8p.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {
9398
+ return Option.some($_1kct4uptjfuw8r98.point(sel.finish(), sel.foffset()));
9399
+ }, function (brNeighbour) {
9400
+ var range = bridge.fromSitus(brNeighbour);
9401
+ var analysis = $_25fydhprjfuw8r89.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);
9402
+ return $_62az2spsjfuw8r8p.process(analysis);
9403
+ });
9404
+ });
9405
+ };
9406
+ var scan = function (bridge, isRoot, element, offset, direction, numRetries) {
9407
+ if (numRetries === 0)
9408
+ return Option.none();
9409
+ return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {
9410
+ var range = bridge.fromSitus(situs);
9411
+ var analysis = $_25fydhprjfuw8r89.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);
9412
+ return $_25fydhprjfuw8r89.cata(analysis, function () {
9413
+ return Option.none();
9414
+ }, function () {
9415
+ return Option.some(situs);
9416
+ }, function (cell) {
9417
+ if ($_e8rn66kojfuw8q7n.eq(element, cell) && offset === 0)
9418
+ return tryAgain(bridge, element, offset, $_37xezepjjfuw8r6q.moveUp, direction);
9419
+ else
9420
+ return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);
9421
+ }, function (cell) {
9422
+ if ($_e8rn66kojfuw8q7n.eq(element, cell) && offset === $_6vfowrlmjfuw8qbz.getEnd(cell))
9423
+ return tryAgain(bridge, element, offset, $_37xezepjjfuw8r6q.moveDown, direction);
9424
+ else
9425
+ return scan(bridge, isRoot, cell, $_6vfowrlmjfuw8qbz.getEnd(cell), direction, numRetries - 1);
9426
+ });
9427
+ });
9428
+ };
9429
+ var tryAgain = function (bridge, element, offset, move, direction) {
9430
+ return $_8xl6tpkjfuw8r6u.getBoxAt(bridge, element, offset).bind(function (box) {
9431
+ return tryAt(bridge, direction, move(box, $_efciv1pljfuw8r73.getJumpSize()));
9432
+ });
9433
+ };
9434
+ var tryAt = function (bridge, direction, box) {
9435
+ if (platform$1.browser.isChrome() || platform$1.browser.isSafari() || platform$1.browser.isFirefox() || platform$1.browser.isEdge())
9436
+ return direction.otherRetry(bridge, box);
9437
+ else if (platform$1.browser.isIE())
9438
+ return direction.ieRetry(bridge, box);
9439
+ else
9440
+ return Option.none();
9441
+ };
9442
+ var tryCursor = function (bridge, isRoot, element, offset, direction) {
9443
+ return $_8xl6tpkjfuw8r6u.getBoxAt(bridge, element, offset).bind(function (box) {
9444
+ return tryAt(bridge, direction, box);
9445
+ });
9446
+ };
9447
+ var handle$2 = function (bridge, isRoot, direction) {
9448
+ return findSpot(bridge, isRoot, direction).bind(function (spot) {
9449
+ return scan(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);
9450
+ });
9451
+ };
9452
+ var $_fxzqelpijfuw8r6a = { handle: handle$2 };
9453
+
9454
+ var any$1 = function (predicate) {
9455
+ return $_11ympzlbjfuw8q9n.first(predicate).isSome();
9456
+ };
9457
+ var ancestor$3 = function (scope, predicate, isRoot) {
9458
+ return $_11ympzlbjfuw8q9n.ancestor(scope, predicate, isRoot).isSome();
9459
+ };
9460
+ var closest$3 = function (scope, predicate, isRoot) {
9461
+ return $_11ympzlbjfuw8q9n.closest(scope, predicate, isRoot).isSome();
9462
+ };
9463
+ var sibling$3 = function (scope, predicate) {
9464
+ return $_11ympzlbjfuw8q9n.sibling(scope, predicate).isSome();
9465
+ };
9466
+ var child$4 = function (scope, predicate) {
9467
+ return $_11ympzlbjfuw8q9n.child(scope, predicate).isSome();
9468
+ };
9469
+ var descendant$3 = function (scope, predicate) {
9470
+ return $_11ympzlbjfuw8q9n.descendant(scope, predicate).isSome();
9471
+ };
9472
+ var $_cs6t5xpvjfuw8r9l = {
9473
+ any: any$1,
9474
+ ancestor: ancestor$3,
9475
+ closest: closest$3,
9476
+ sibling: sibling$3,
9477
+ child: child$4,
9478
+ descendant: descendant$3
9479
+ };
9480
+
9481
+ var detection = $_fqgee0ktjfuw8q83.detect();
9482
+ var inSameTable = function (elem, table) {
9483
+ return $_cs6t5xpvjfuw8r9l.ancestor(elem, function (e) {
9484
+ return $_s8scrkmjfuw8q7a.parent(e).exists(function (p) {
9485
+ return $_e8rn66kojfuw8q7n.eq(p, table);
9486
+ });
9487
+ });
9488
+ };
9489
+ var simulate = function (bridge, isRoot, direction, initial, anchor) {
9490
+ return $_8wdrbmlajfuw8q9m.closest(initial, 'td,th', isRoot).bind(function (start) {
9491
+ return $_8wdrbmlajfuw8q9m.closest(start, 'table', isRoot).bind(function (table) {
9492
+ if (!inSameTable(anchor, table))
9493
+ return Option.none();
9494
+ return $_fxzqelpijfuw8r6a.handle(bridge, isRoot, direction).bind(function (range) {
9495
+ return $_8wdrbmlajfuw8q9m.closest(range.finish(), 'td,th', isRoot).map(function (finish) {
9496
+ return {
9497
+ start: $_20nfr6k7jfuw8q4g.constant(start),
9498
+ finish: $_20nfr6k7jfuw8q4g.constant(finish),
9499
+ range: $_20nfr6k7jfuw8q4g.constant(range)
9500
+ };
9501
+ });
9502
+ });
9503
+ });
9504
+ });
9505
+ };
9506
+ var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {
9507
+ if (detection.browser.isIE()) {
9508
+ return Option.none();
9509
+ } else {
9510
+ return precheck(initial, isRoot).orThunk(function () {
9511
+ return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {
9512
+ var range = info.range();
9513
+ return $_b7ap4hpbjfuw8r3x.response(Option.some($_81eh29pejfuw8r4k.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);
9514
+ });
9515
+ });
9516
+ }
9517
+ };
9518
+ var firstUpCheck = function (initial, isRoot) {
9519
+ return $_8wdrbmlajfuw8q9m.closest(initial, 'tr', isRoot).bind(function (startRow) {
9520
+ return $_8wdrbmlajfuw8q9m.closest(startRow, 'table', isRoot).bind(function (table) {
9521
+ var rows = $_6c9d0hl7jfuw8q9d.descendants(table, 'tr');
9522
+ if ($_e8rn66kojfuw8q7n.eq(startRow, rows[0])) {
9523
+ return $_fgafb6pmjfuw8r7l.seekLeft(table, function (element) {
9524
+ return $_ejrzj4lljfuw8qbw.last(element).isSome();
9525
+ }, isRoot).map(function (last) {
9526
+ var lastOffset = $_6vfowrlmjfuw8qbz.getEnd(last);
9527
+ return $_b7ap4hpbjfuw8r3x.response(Option.some($_81eh29pejfuw8r4k.makeSitus(last, lastOffset, last, lastOffset)), true);
9528
+ });
9529
+ } else {
9530
+ return Option.none();
9531
+ }
9532
+ });
9533
+ });
9534
+ };
9535
+ var lastDownCheck = function (initial, isRoot) {
9536
+ return $_8wdrbmlajfuw8q9m.closest(initial, 'tr', isRoot).bind(function (startRow) {
9537
+ return $_8wdrbmlajfuw8q9m.closest(startRow, 'table', isRoot).bind(function (table) {
9538
+ var rows = $_6c9d0hl7jfuw8q9d.descendants(table, 'tr');
9539
+ if ($_e8rn66kojfuw8q7n.eq(startRow, rows[rows.length - 1])) {
9540
+ return $_fgafb6pmjfuw8r7l.seekRight(table, function (element) {
9541
+ return $_ejrzj4lljfuw8qbw.first(element).isSome();
9542
+ }, isRoot).map(function (first) {
9543
+ return $_b7ap4hpbjfuw8r3x.response(Option.some($_81eh29pejfuw8r4k.makeSitus(first, 0, first, 0)), true);
9544
+ });
9545
+ } else {
9546
+ return Option.none();
9547
+ }
9548
+ });
9549
+ });
9550
+ };
9551
+ var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {
9552
+ return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {
9553
+ return $_7ulhzpgjfuw8r5b.detect(container, isRoot, info.start(), info.finish(), selectRange);
9554
+ });
9555
+ };
9556
+ var $_4f08xvphjfuw8r5l = {
9557
+ navigate: navigate,
9558
+ select: select,
9559
+ firstUpCheck: firstUpCheck,
9560
+ lastDownCheck: lastDownCheck
9561
+ };
9562
+
9563
+ var findCell = function (target, isRoot) {
9564
+ return $_8wdrbmlajfuw8q9m.closest(target, 'td,th', isRoot);
9565
+ };
9566
+ function MouseSelection (bridge, container, isRoot, annotations) {
9567
+ var cursor = Option.none();
9568
+ var clearState = function () {
9569
+ cursor = Option.none();
9570
+ };
9571
+ var mousedown = function (event) {
9572
+ annotations.clear(container);
9573
+ cursor = findCell(event.target(), isRoot);
9574
+ };
9575
+ var mouseover = function (event) {
9576
+ cursor.each(function (start) {
9577
+ annotations.clear(container);
9578
+ findCell(event.target(), isRoot).each(function (finish) {
9579
+ $_dpd405ltjfuw8qd8.identify(start, finish, isRoot).each(function (cellSel) {
9580
+ var boxes = cellSel.boxes().getOr([]);
9581
+ if (boxes.length > 1 || boxes.length === 1 && !$_e8rn66kojfuw8q7n.eq(start, finish)) {
9582
+ annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());
9583
+ bridge.selectContents(finish);
9584
+ }
9585
+ });
9586
+ });
9587
+ });
9588
+ };
9589
+ var mouseup = function () {
9590
+ cursor.each(clearState);
9591
+ };
9592
+ return {
9593
+ mousedown: mousedown,
9594
+ mouseover: mouseover,
9595
+ mouseup: mouseup
9596
+ };
9597
+ }
9598
+
9599
+ var $_9alrp8pxjfuw8r9w = {
9600
+ down: {
9601
+ traverse: $_s8scrkmjfuw8q7a.nextSibling,
9602
+ gather: $_fgafb6pmjfuw8r7l.after,
9603
+ relative: $_cuk0n0ovjfuw8r0r.before,
9604
+ otherRetry: $_efciv1pljfuw8r73.tryDown,
9605
+ ieRetry: $_efciv1pljfuw8r73.ieTryDown,
9606
+ failure: $_25fydhprjfuw8r89.adt.failedDown
9607
+ },
9608
+ up: {
9609
+ traverse: $_s8scrkmjfuw8q7a.prevSibling,
9610
+ gather: $_fgafb6pmjfuw8r7l.before,
9611
+ relative: $_cuk0n0ovjfuw8r0r.before,
9612
+ otherRetry: $_efciv1pljfuw8r73.tryUp,
9613
+ ieRetry: $_efciv1pljfuw8r73.ieTryUp,
9614
+ failure: $_25fydhprjfuw8r89.adt.failedUp
9615
+ }
9616
+ };
9617
+
9618
+ var rc = $_5now9kbjfuw8q5e.immutable('rows', 'cols');
9619
+ var mouse = function (win, container, isRoot, annotations) {
9620
+ var bridge = WindowBridge(win);
9621
+ var handlers = MouseSelection(bridge, container, isRoot, annotations);
9622
+ return {
9623
+ mousedown: handlers.mousedown,
9624
+ mouseover: handlers.mouseover,
9625
+ mouseup: handlers.mouseup
9626
+ };
9627
+ };
9628
+ var keyboard = function (win, container, isRoot, annotations) {
9629
+ var bridge = WindowBridge(win);
9630
+ var clearToNavigate = function () {
9631
+ annotations.clear(container);
9632
+ return Option.none();
9633
+ };
9634
+ var keydown = function (event, start, soffset, finish, foffset, direction) {
9635
+ var keycode = event.raw().which;
9636
+ var shiftKey = event.raw().shiftKey === true;
9637
+ var handler = $_dpd405ltjfuw8qd8.retrieve(container, annotations.selectedSelector()).fold(function () {
9638
+ if ($_9n04otpcjfuw8r40.isDown(keycode) && shiftKey) {
9639
+ return $_20nfr6k7jfuw8q4g.curry($_4f08xvphjfuw8r5l.select, bridge, container, isRoot, $_9alrp8pxjfuw8r9w.down, finish, start, annotations.selectRange);
9640
+ } else if ($_9n04otpcjfuw8r40.isUp(keycode) && shiftKey) {
9641
+ return $_20nfr6k7jfuw8q4g.curry($_4f08xvphjfuw8r5l.select, bridge, container, isRoot, $_9alrp8pxjfuw8r9w.up, finish, start, annotations.selectRange);
9642
+ } else if ($_9n04otpcjfuw8r40.isDown(keycode)) {
9643
+ return $_20nfr6k7jfuw8q4g.curry($_4f08xvphjfuw8r5l.navigate, bridge, isRoot, $_9alrp8pxjfuw8r9w.down, finish, start, $_4f08xvphjfuw8r5l.lastDownCheck);
9644
+ } else if ($_9n04otpcjfuw8r40.isUp(keycode)) {
9645
+ return $_20nfr6k7jfuw8q4g.curry($_4f08xvphjfuw8r5l.navigate, bridge, isRoot, $_9alrp8pxjfuw8r9w.up, finish, start, $_4f08xvphjfuw8r5l.firstUpCheck);
9646
+ } else {
9647
+ return Option.none;
9648
+ }
9649
+ }, function (selected) {
9650
+ var update = function (attempts) {
9651
+ return function () {
9652
+ var navigation = $_cul8qomvjfuw8qm7.findMap(attempts, function (delta) {
9653
+ return $_7ulhzpgjfuw8r5b.update(delta.rows(), delta.cols(), container, selected, annotations);
9654
+ });
9655
+ return navigation.fold(function () {
9656
+ return $_dpd405ltjfuw8qd8.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {
9657
+ var relative = $_9n04otpcjfuw8r40.isDown(keycode) || direction.isForward(keycode) ? $_cuk0n0ovjfuw8r0r.after : $_cuk0n0ovjfuw8r0r.before;
9658
+ bridge.setRelativeSelection($_cuk0n0ovjfuw8r0r.on(edges.first(), 0), relative(edges.table()));
9659
+ annotations.clear(container);
9660
+ return $_b7ap4hpbjfuw8r3x.response(Option.none(), true);
9661
+ });
9662
+ }, function (_) {
9663
+ return Option.some($_b7ap4hpbjfuw8r3x.response(Option.none(), true));
9664
+ });
9665
+ };
9666
+ };
9667
+ if ($_9n04otpcjfuw8r40.isDown(keycode) && shiftKey)
9668
+ return update([rc(+1, 0)]);
9669
+ else if ($_9n04otpcjfuw8r40.isUp(keycode) && shiftKey)
9670
+ return update([rc(-1, 0)]);
9671
+ else if (direction.isBackward(keycode) && shiftKey)
9672
+ return update([
9673
+ rc(0, -1),
9674
+ rc(-1, 0)
9675
+ ]);
9676
+ else if (direction.isForward(keycode) && shiftKey)
9677
+ return update([
9678
+ rc(0, +1),
9679
+ rc(+1, 0)
9680
+ ]);
9681
+ else if ($_9n04otpcjfuw8r40.isNavigation(keycode) && shiftKey === false)
9682
+ return clearToNavigate;
9683
+ else
9684
+ return Option.none;
9685
+ });
9686
+ return handler();
9687
+ };
9688
+ var keyup = function (event, start, soffset, finish, foffset) {
9689
+ return $_dpd405ltjfuw8qd8.retrieve(container, annotations.selectedSelector()).fold(function () {
9690
+ var keycode = event.raw().which;
9691
+ var shiftKey = event.raw().shiftKey === true;
9692
+ if (shiftKey === false)
9693
+ return Option.none();
9694
+ if ($_9n04otpcjfuw8r40.isNavigation(keycode))
9695
+ return $_7ulhzpgjfuw8r5b.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);
9696
+ else
9697
+ return Option.none();
9698
+ }, Option.none);
9699
+ };
9700
+ return {
9701
+ keydown: keydown,
9702
+ keyup: keyup
9703
+ };
9704
+ };
9705
+ var $_ev8thhpajfuw8r3k = {
9706
+ mouse: mouse,
9707
+ keyboard: keyboard
9708
+ };
9709
+
9710
+ var add$3 = function (element, classes) {
9711
+ $_tyr3yk5jfuw8q47.each(classes, function (x) {
9712
+ $_fmcseon6jfuw8qou.add(element, x);
9713
+ });
9714
+ };
9715
+ var remove$7 = function (element, classes) {
9716
+ $_tyr3yk5jfuw8q47.each(classes, function (x) {
9717
+ $_fmcseon6jfuw8qou.remove(element, x);
9718
+ });
9719
+ };
9720
+ var toggle$2 = function (element, classes) {
9721
+ $_tyr3yk5jfuw8q47.each(classes, function (x) {
9722
+ $_fmcseon6jfuw8qou.toggle(element, x);
9723
+ });
9724
+ };
9725
+ var hasAll = function (element, classes) {
9726
+ return $_tyr3yk5jfuw8q47.forall(classes, function (clazz) {
9727
+ return $_fmcseon6jfuw8qou.has(element, clazz);
9728
+ });
9729
+ };
9730
+ var hasAny = function (element, classes) {
9731
+ return $_tyr3yk5jfuw8q47.exists(classes, function (clazz) {
9732
+ return $_fmcseon6jfuw8qou.has(element, clazz);
9733
+ });
9734
+ };
9735
+ var getNative = function (element) {
9736
+ var classList = element.dom().classList;
9737
+ var r = new Array(classList.length);
9738
+ for (var i = 0; i < classList.length; i++) {
9739
+ r[i] = classList.item(i);
9740
+ }
9741
+ return r;
9742
+ };
9743
+ var get$11 = function (element) {
9744
+ return $_f4rpvun8jfuw8qox.supports(element) ? getNative(element) : $_f4rpvun8jfuw8qox.get(element);
9745
+ };
9746
+ var $_6cu9bpq0jfuw8ram = {
9747
+ add: add$3,
9748
+ remove: remove$7,
9749
+ toggle: toggle$2,
9750
+ hasAll: hasAll,
9751
+ hasAny: hasAny,
9752
+ get: get$11
9753
+ };
9754
+
9755
+ var addClass = function (clazz) {
9756
+ return function (element) {
9757
+ $_fmcseon6jfuw8qou.add(element, clazz);
9758
+ };
9759
+ };
9760
+ var removeClass = function (clazz) {
9761
+ return function (element) {
9762
+ $_fmcseon6jfuw8qou.remove(element, clazz);
9763
+ };
9764
+ };
9765
+ var removeClasses = function (classes) {
9766
+ return function (element) {
9767
+ $_6cu9bpq0jfuw8ram.remove(element, classes);
9768
+ };
9769
+ };
9770
+ var hasClass = function (clazz) {
9771
+ return function (element) {
9772
+ return $_fmcseon6jfuw8qou.has(element, clazz);
9773
+ };
9774
+ };
9775
+ var $_5za372pzjfuw8rak = {
9776
+ addClass: addClass,
9777
+ removeClass: removeClass,
9778
+ removeClasses: removeClasses,
9779
+ hasClass: hasClass
9780
+ };
9781
+
9782
+ var byClass = function (ephemera) {
9783
+ var addSelectionClass = $_5za372pzjfuw8rak.addClass(ephemera.selected());
9784
+ var removeSelectionClasses = $_5za372pzjfuw8rak.removeClasses([
9785
+ ephemera.selected(),
9786
+ ephemera.lastSelected(),
9787
+ ephemera.firstSelected()
9788
+ ]);
9789
+ var clear = function (container) {
9790
+ var sels = $_6c9d0hl7jfuw8q9d.descendants(container, ephemera.selectedSelector());
9791
+ $_tyr3yk5jfuw8q47.each(sels, removeSelectionClasses);
9792
+ };
9793
+ var selectRange = function (container, cells, start, finish) {
9794
+ clear(container);
9795
+ $_tyr3yk5jfuw8q47.each(cells, addSelectionClass);
9796
+ $_fmcseon6jfuw8qou.add(start, ephemera.firstSelected());
9797
+ $_fmcseon6jfuw8qou.add(finish, ephemera.lastSelected());
9798
+ };
9799
+ return {
9800
+ clear: clear,
9801
+ selectRange: selectRange,
9802
+ selectedSelector: ephemera.selectedSelector,
9803
+ firstSelectedSelector: ephemera.firstSelectedSelector,
9804
+ lastSelectedSelector: ephemera.lastSelectedSelector
9805
+ };
9806
+ };
9807
+ var byAttr = function (ephemera) {
9808
+ var removeSelectionAttributes = function (element) {
9809
+ $_3q82t2l5jfuw8q93.remove(element, ephemera.selected());
9810
+ $_3q82t2l5jfuw8q93.remove(element, ephemera.firstSelected());
9811
+ $_3q82t2l5jfuw8q93.remove(element, ephemera.lastSelected());
9812
+ };
9813
+ var addSelectionAttribute = function (element) {
9814
+ $_3q82t2l5jfuw8q93.set(element, ephemera.selected(), '1');
9815
+ };
9816
+ var clear = function (container) {
9817
+ var sels = $_6c9d0hl7jfuw8q9d.descendants(container, ephemera.selectedSelector());
9818
+ $_tyr3yk5jfuw8q47.each(sels, removeSelectionAttributes);
9819
+ };
9820
+ var selectRange = function (container, cells, start, finish) {
9821
+ clear(container);
9822
+ $_tyr3yk5jfuw8q47.each(cells, addSelectionAttribute);
9823
+ $_3q82t2l5jfuw8q93.set(start, ephemera.firstSelected(), '1');
9824
+ $_3q82t2l5jfuw8q93.set(finish, ephemera.lastSelected(), '1');
9825
+ };
9826
+ return {
9827
+ clear: clear,
9828
+ selectRange: selectRange,
9829
+ selectedSelector: ephemera.selectedSelector,
9830
+ firstSelectedSelector: ephemera.firstSelectedSelector,
9831
+ lastSelectedSelector: ephemera.lastSelectedSelector
9832
+ };
9833
+ };
9834
+ var $_21uhbjpyjfuw8ra4 = {
9835
+ byClass: byClass,
9836
+ byAttr: byAttr
9837
+ };
9838
+
9839
+ function CellSelection$1 (editor, lazyResize) {
9840
+ var handlerStruct = $_5now9kbjfuw8q5e.immutableBag([
9841
+ 'mousedown',
9842
+ 'mouseover',
9843
+ 'mouseup',
9844
+ 'keyup',
9845
+ 'keydown'
9846
+ ], []);
9847
+ var handlers = Option.none();
9848
+ var annotations = $_21uhbjpyjfuw8ra4.byAttr($_f8tr2nm5jfuw8qgp);
9849
+ editor.on('init', function (e) {
9850
+ var win = editor.getWin();
9851
+ var body = $_5xkhf2nnjfuw8qrq.getBody(editor);
9852
+ var isRoot = $_5xkhf2nnjfuw8qrq.getIsRoot(editor);
9853
+ var syncSelection = function () {
9854
+ var sel = editor.selection;
9855
+ var start = $_xbeoqkkjfuw8q73.fromDom(sel.getStart());
9856
+ var end = $_xbeoqkkjfuw8q73.fromDom(sel.getEnd());
9857
+ var startTable = $_aqhz9okhjfuw8q5y.table(start);
9858
+ var endTable = $_aqhz9okhjfuw8q5y.table(end);
9859
+ var sameTable = startTable.bind(function (tableStart) {
9860
+ return endTable.bind(function (tableEnd) {
9861
+ return $_e8rn66kojfuw8q7n.eq(tableStart, tableEnd) ? Option.some(true) : Option.none();
9862
+ });
9863
+ });
9864
+ sameTable.fold(function () {
9865
+ annotations.clear(body);
9866
+ }, $_20nfr6k7jfuw8q4g.noop);
9867
+ };
9868
+ var mouseHandlers = $_ev8thhpajfuw8r3k.mouse(win, body, isRoot, annotations);
9869
+ var keyHandlers = $_ev8thhpajfuw8r3k.keyboard(win, body, isRoot, annotations);
9870
+ var hasShiftKey = function (event) {
9871
+ return event.raw().shiftKey === true;
9872
+ };
9873
+ var handleResponse = function (event, response) {
9874
+ if (!hasShiftKey(event)) {
9875
+ return;
9876
+ }
9877
+ if (response.kill()) {
9878
+ event.kill();
9879
+ }
9880
+ response.selection().each(function (ns) {
9881
+ var relative = $_bv1jwpoujfuw8r0m.relative(ns.start(), ns.finish());
9882
+ var rng = $_c9xxrpp0jfuw8r1k.asLtrRange(win, relative);
9883
+ editor.selection.setRng(rng);
9884
+ });
9885
+ };
9886
+ var keyup = function (event) {
9887
+ var wrappedEvent = wrapEvent(event);
9888
+ if (wrappedEvent.raw().shiftKey && $_9n04otpcjfuw8r40.isNavigation(wrappedEvent.raw().which)) {
9889
+ var rng = editor.selection.getRng();
9890
+ var start = $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
9891
+ var end = $_xbeoqkkjfuw8q73.fromDom(rng.endContainer);
9892
+ keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {
9893
+ handleResponse(wrappedEvent, response);
9894
+ });
9895
+ }
9896
+ };
9897
+ var keydown = function (event) {
9898
+ var wrappedEvent = wrapEvent(event);
9899
+ lazyResize().each(function (resize) {
9900
+ resize.hideBars();
9901
+ });
9902
+ var rng = editor.selection.getRng();
9903
+ var startContainer = $_xbeoqkkjfuw8q73.fromDom(editor.selection.getStart());
9904
+ var start = $_xbeoqkkjfuw8q73.fromDom(rng.startContainer);
9905
+ var end = $_xbeoqkkjfuw8q73.fromDom(rng.endContainer);
9906
+ var direction = $_4xd1udnojfuw8qrw.directionAt(startContainer).isRtl() ? $_9n04otpcjfuw8r40.rtl : $_9n04otpcjfuw8r40.ltr;
9907
+ keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {
9908
+ handleResponse(wrappedEvent, response);
9909
+ });
9910
+ lazyResize().each(function (resize) {
9911
+ resize.showBars();
9912
+ });
9913
+ };
9914
+ var isMouseEvent = function (event) {
9915
+ return event.hasOwnProperty('x') && event.hasOwnProperty('y');
9916
+ };
9917
+ var wrapEvent = function (event) {
9918
+ var target = $_xbeoqkkjfuw8q73.fromDom(event.target);
9919
+ var stop = function () {
9920
+ event.stopPropagation();
9921
+ };
9922
+ var prevent = function () {
9923
+ event.preventDefault();
9924
+ };
9925
+ var kill = $_20nfr6k7jfuw8q4g.compose(prevent, stop);
9926
+ return {
9927
+ target: $_20nfr6k7jfuw8q4g.constant(target),
9928
+ x: $_20nfr6k7jfuw8q4g.constant(isMouseEvent(event) ? event.x : null),
9929
+ y: $_20nfr6k7jfuw8q4g.constant(isMouseEvent(event) ? event.y : null),
9930
+ stop: stop,
9931
+ prevent: prevent,
9932
+ kill: kill,
9933
+ raw: $_20nfr6k7jfuw8q4g.constant(event)
9934
+ };
9935
+ };
9936
+ var isLeftMouse = function (raw) {
9937
+ return raw.button === 0;
9938
+ };
9939
+ var isLeftButtonPressed = function (raw) {
9940
+ if (raw.buttons === undefined) {
9941
+ return true;
9942
+ }
9943
+ return (raw.buttons & 1) !== 0;
9944
+ };
9945
+ var mouseDown = function (e) {
9946
+ if (isLeftMouse(e)) {
9947
+ mouseHandlers.mousedown(wrapEvent(e));
9948
+ }
9949
+ };
9950
+ var mouseOver = function (e) {
9951
+ if (isLeftButtonPressed(e)) {
9952
+ mouseHandlers.mouseover(wrapEvent(e));
9953
+ }
9954
+ };
9955
+ var mouseUp = function (e) {
9956
+ if (isLeftMouse(e)) {
9957
+ mouseHandlers.mouseup(wrapEvent(e));
9958
+ }
9959
+ };
9960
+ editor.on('mousedown', mouseDown);
9961
+ editor.on('mouseover', mouseOver);
9962
+ editor.on('mouseup', mouseUp);
9963
+ editor.on('keyup', keyup);
9964
+ editor.on('keydown', keydown);
9965
+ editor.on('nodechange', syncSelection);
9966
+ handlers = Option.some(handlerStruct({
9967
+ mousedown: mouseDown,
9968
+ mouseover: mouseOver,
9969
+ mouseup: mouseUp,
9970
+ keyup: keyup,
9971
+ keydown: keydown
9972
+ }));
9973
+ });
9974
+ var destroy = function () {
9975
+ handlers.each(function (handlers) {
9976
+ });
9977
+ };
9978
+ return {
9979
+ clear: annotations.clear,
9980
+ destroy: destroy
9981
+ };
9982
+ }
9983
+
9984
+ var Selections = function (editor) {
9985
+ var get = function () {
9986
+ var body = $_5xkhf2nnjfuw8qrq.getBody(editor);
9987
+ return $_1mynollsjfuw8qcy.retrieve(body, $_f8tr2nm5jfuw8qgp.selectedSelector()).fold(function () {
9988
+ if (editor.selection.getStart() === undefined) {
9989
+ return $_cx0pwam6jfuw8qgr.none();
9990
+ } else {
9991
+ return $_cx0pwam6jfuw8qgr.single(editor.selection);
9992
+ }
9993
+ }, function (cells) {
9994
+ return $_cx0pwam6jfuw8qgr.multiple(cells);
9995
+ });
9996
+ };
9997
+ return { get: get };
9998
+ };
9999
+
10000
+ var each$4 = global$2.each;
10001
+ var addButtons = function (editor) {
10002
+ var menuItems = [];
10003
+ each$4('inserttable tableprops deletetable | cell row column'.split(' '), function (name) {
10004
+ if (name === '|') {
10005
+ menuItems.push({ text: '-' });
10006
+ } else {
10007
+ menuItems.push(editor.menuItems[name]);
10008
+ }
10009
+ });
10010
+ editor.addButton('table', {
10011
+ type: 'menubutton',
10012
+ title: 'Table',
10013
+ menu: menuItems
10014
+ });
10015
+ function cmd(command) {
10016
+ return function () {
10017
+ editor.execCommand(command);
10018
+ };
10019
+ }
10020
+ editor.addButton('tableprops', {
10021
+ title: 'Table properties',
10022
+ onclick: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor, true),
10023
+ icon: 'table'
10024
+ });
10025
+ editor.addButton('tabledelete', {
10026
+ title: 'Delete table',
10027
+ onclick: cmd('mceTableDelete')
10028
+ });
10029
+ editor.addButton('tablecellprops', {
10030
+ title: 'Cell properties',
10031
+ onclick: cmd('mceTableCellProps')
10032
+ });
10033
+ editor.addButton('tablemergecells', {
10034
+ title: 'Merge cells',
10035
+ onclick: cmd('mceTableMergeCells')
10036
+ });
10037
+ editor.addButton('tablesplitcells', {
10038
+ title: 'Split cell',
10039
+ onclick: cmd('mceTableSplitCells')
10040
+ });
10041
+ editor.addButton('tableinsertrowbefore', {
10042
+ title: 'Insert row before',
10043
+ onclick: cmd('mceTableInsertRowBefore')
10044
+ });
10045
+ editor.addButton('tableinsertrowafter', {
10046
+ title: 'Insert row after',
10047
+ onclick: cmd('mceTableInsertRowAfter')
10048
+ });
10049
+ editor.addButton('tabledeleterow', {
10050
+ title: 'Delete row',
10051
+ onclick: cmd('mceTableDeleteRow')
10052
+ });
10053
+ editor.addButton('tablerowprops', {
10054
+ title: 'Row properties',
10055
+ onclick: cmd('mceTableRowProps')
10056
+ });
10057
+ editor.addButton('tablecutrow', {
10058
+ title: 'Cut row',
10059
+ onclick: cmd('mceTableCutRow')
10060
+ });
10061
+ editor.addButton('tablecopyrow', {
10062
+ title: 'Copy row',
10063
+ onclick: cmd('mceTableCopyRow')
10064
+ });
10065
+ editor.addButton('tablepasterowbefore', {
10066
+ title: 'Paste row before',
10067
+ onclick: cmd('mceTablePasteRowBefore')
10068
+ });
10069
+ editor.addButton('tablepasterowafter', {
10070
+ title: 'Paste row after',
10071
+ onclick: cmd('mceTablePasteRowAfter')
10072
+ });
10073
+ editor.addButton('tableinsertcolbefore', {
10074
+ title: 'Insert column before',
10075
+ onclick: cmd('mceTableInsertColBefore')
10076
+ });
10077
+ editor.addButton('tableinsertcolafter', {
10078
+ title: 'Insert column after',
10079
+ onclick: cmd('mceTableInsertColAfter')
10080
+ });
10081
+ editor.addButton('tabledeletecol', {
10082
+ title: 'Delete column',
10083
+ onclick: cmd('mceTableDeleteCol')
10084
+ });
10085
+ };
10086
+ var addToolbars = function (editor) {
10087
+ var isTable = function (table) {
10088
+ var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table);
10089
+ return selectorMatched;
10090
+ };
10091
+ var toolbar = getToolbar(editor);
10092
+ if (toolbar.length > 0) {
10093
+ editor.addContextToolbar(isTable, toolbar.join(' '));
10094
+ }
10095
+ };
10096
+ var $_ga9kj7q2jfuw8rau = {
10097
+ addButtons: addButtons,
10098
+ addToolbars: addToolbars
10099
+ };
10100
+
10101
+ var addMenuItems = function (editor, selections) {
10102
+ var targets = Option.none();
10103
+ var tableCtrls = [];
10104
+ var cellCtrls = [];
10105
+ var mergeCtrls = [];
10106
+ var unmergeCtrls = [];
10107
+ var noTargetDisable = function (ctrl) {
10108
+ ctrl.disabled(true);
10109
+ };
10110
+ var ctrlEnable = function (ctrl) {
10111
+ ctrl.disabled(false);
10112
+ };
10113
+ var pushTable = function () {
10114
+ var self = this;
10115
+ tableCtrls.push(self);
10116
+ targets.fold(function () {
10117
+ noTargetDisable(self);
10118
+ }, function (targets) {
10119
+ ctrlEnable(self);
10120
+ });
10121
+ };
10122
+ var pushCell = function () {
10123
+ var self = this;
10124
+ cellCtrls.push(self);
10125
+ targets.fold(function () {
10126
+ noTargetDisable(self);
10127
+ }, function (targets) {
10128
+ ctrlEnable(self);
10129
+ });
10130
+ };
10131
+ var pushMerge = function () {
10132
+ var self = this;
10133
+ mergeCtrls.push(self);
10134
+ targets.fold(function () {
10135
+ noTargetDisable(self);
10136
+ }, function (targets) {
10137
+ self.disabled(targets.mergable().isNone());
10138
+ });
10139
+ };
10140
+ var pushUnmerge = function () {
10141
+ var self = this;
10142
+ unmergeCtrls.push(self);
10143
+ targets.fold(function () {
10144
+ noTargetDisable(self);
10145
+ }, function (targets) {
10146
+ self.disabled(targets.unmergable().isNone());
10147
+ });
10148
+ };
10149
+ var setDisabledCtrls = function () {
10150
+ targets.fold(function () {
10151
+ $_tyr3yk5jfuw8q47.each(tableCtrls, noTargetDisable);
10152
+ $_tyr3yk5jfuw8q47.each(cellCtrls, noTargetDisable);
10153
+ $_tyr3yk5jfuw8q47.each(mergeCtrls, noTargetDisable);
10154
+ $_tyr3yk5jfuw8q47.each(unmergeCtrls, noTargetDisable);
10155
+ }, function (targets) {
10156
+ $_tyr3yk5jfuw8q47.each(tableCtrls, ctrlEnable);
10157
+ $_tyr3yk5jfuw8q47.each(cellCtrls, ctrlEnable);
10158
+ $_tyr3yk5jfuw8q47.each(mergeCtrls, function (mergeCtrl) {
10159
+ mergeCtrl.disabled(targets.mergable().isNone());
10160
+ });
10161
+ $_tyr3yk5jfuw8q47.each(unmergeCtrls, function (unmergeCtrl) {
10162
+ unmergeCtrl.disabled(targets.unmergable().isNone());
10163
+ });
10164
+ });
10165
+ };
10166
+ editor.on('init', function () {
10167
+ editor.on('nodechange', function (e) {
10168
+ var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));
10169
+ targets = cellOpt.bind(function (cellDom) {
10170
+ var cell = $_xbeoqkkjfuw8q73.fromDom(cellDom);
10171
+ var table = $_aqhz9okhjfuw8q5y.table(cell);
10172
+ return table.map(function (table) {
10173
+ return $_5b7h1hlqjfuw8qci.forMenu(selections, table, cell);
10174
+ });
10175
+ });
10176
+ setDisabledCtrls();
10177
+ });
10178
+ });
10179
+ var generateTableGrid = function () {
10180
+ var html = '';
10181
+ html = '<table role="grid" class="mce-grid mce-grid-border" aria-readonly="true">';
10182
+ for (var y = 0; y < 10; y++) {
10183
+ html += '<tr>';
10184
+ for (var x = 0; x < 10; x++) {
10185
+ html += '<td role="gridcell" tabindex="-1"><a id="mcegrid' + (y * 10 + x) + '" href="#" ' + 'data-mce-x="' + x + '" data-mce-y="' + y + '"></a></td>';
10186
+ }
10187
+ html += '</tr>';
10188
+ }
10189
+ html += '</table>';
10190
+ html += '<div class="mce-text-center" role="presentation">1 x 1</div>';
10191
+ return html;
10192
+ };
10193
+ var selectGrid = function (editor, tx, ty, control) {
10194
+ var table = control.getEl().getElementsByTagName('table')[0];
10195
+ var x, y, focusCell, cell, active;
10196
+ var rtl = control.isRtl() || control.parent().rel === 'tl-tr';
10197
+ table.nextSibling.innerHTML = tx + 1 + ' x ' + (ty + 1);
10198
+ if (rtl) {
10199
+ tx = 9 - tx;
10200
+ }
10201
+ for (y = 0; y < 10; y++) {
10202
+ for (x = 0; x < 10; x++) {
10203
+ cell = table.rows[y].childNodes[x].firstChild;
10204
+ active = (rtl ? x >= tx : x <= tx) && y <= ty;
10205
+ editor.dom.toggleClass(cell, 'mce-active', active);
10206
+ if (active) {
10207
+ focusCell = cell;
10208
+ }
10209
+ }
10210
+ }
10211
+ return focusCell.parentNode;
10212
+ };
10213
+ var insertTable = hasTableGrid(editor) === false ? {
10214
+ text: 'Table',
10215
+ icon: 'table',
10216
+ context: 'table',
10217
+ onclick: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor)
10218
+ } : {
10219
+ text: 'Table',
10220
+ icon: 'table',
10221
+ context: 'table',
10222
+ ariaHideMenu: true,
10223
+ onclick: function (e) {
10224
+ if (e.aria) {
10225
+ this.parent().hideAll();
10226
+ e.stopImmediatePropagation();
10227
+ $_ad8brjnzjfuw8qtm.open(editor);
10228
+ }
10229
+ },
10230
+ onshow: function () {
10231
+ selectGrid(editor, 0, 0, this.menu.items()[0]);
10232
+ },
10233
+ onhide: function () {
10234
+ var elements = this.menu.items()[0].getEl().getElementsByTagName('a');
10235
+ editor.dom.removeClass(elements, 'mce-active');
10236
+ editor.dom.addClass(elements[0], 'mce-active');
10237
+ },
10238
+ menu: [{
10239
+ type: 'container',
10240
+ html: generateTableGrid(),
10241
+ onPostRender: function () {
10242
+ this.lastX = this.lastY = 0;
10243
+ },
10244
+ onmousemove: function (e) {
10245
+ var target = e.target;
10246
+ var x, y;
10247
+ if (target.tagName.toUpperCase() === 'A') {
10248
+ x = parseInt(target.getAttribute('data-mce-x'), 10);
10249
+ y = parseInt(target.getAttribute('data-mce-y'), 10);
10250
+ if (this.isRtl() || this.parent().rel === 'tl-tr') {
10251
+ x = 9 - x;
10252
+ }
10253
+ if (x !== this.lastX || y !== this.lastY) {
10254
+ selectGrid(editor, x, y, e.control);
10255
+ this.lastX = x;
10256
+ this.lastY = y;
10257
+ }
10258
+ }
10259
+ },
10260
+ onclick: function (e) {
10261
+ var self = this;
10262
+ if (e.target.tagName.toUpperCase() === 'A') {
10263
+ e.preventDefault();
10264
+ e.stopPropagation();
10265
+ self.parent().cancel();
10266
+ editor.undoManager.transact(function () {
10267
+ $_1mq3b3o1jfuw8qtu.insert(editor, self.lastX + 1, self.lastY + 1);
10268
+ });
10269
+ editor.addVisual();
10270
+ }
10271
+ }
10272
+ }]
10273
+ };
10274
+ function cmd(command) {
10275
+ return function () {
10276
+ editor.execCommand(command);
10277
+ };
10278
+ }
10279
+ var tableProperties = {
10280
+ text: 'Table properties',
10281
+ context: 'table',
10282
+ onPostRender: pushTable,
10283
+ onclick: $_20nfr6k7jfuw8q4g.curry($_ad8brjnzjfuw8qtm.open, editor, true)
10284
+ };
10285
+ var deleteTable = {
10286
+ text: 'Delete table',
10287
+ context: 'table',
10288
+ onPostRender: pushTable,
10289
+ cmd: 'mceTableDelete'
10290
+ };
10291
+ var row = {
10292
+ text: 'Row',
10293
+ context: 'table',
10294
+ menu: [
10295
+ {
10296
+ text: 'Insert row before',
10297
+ onclick: cmd('mceTableInsertRowBefore'),
10298
+ onPostRender: pushCell
10299
+ },
10300
+ {
10301
+ text: 'Insert row after',
10302
+ onclick: cmd('mceTableInsertRowAfter'),
10303
+ onPostRender: pushCell
10304
+ },
10305
+ {
10306
+ text: 'Delete row',
10307
+ onclick: cmd('mceTableDeleteRow'),
10308
+ onPostRender: pushCell
10309
+ },
10310
+ {
10311
+ text: 'Row properties',
10312
+ onclick: cmd('mceTableRowProps'),
10313
+ onPostRender: pushCell
10314
+ },
10315
+ { text: '-' },
10316
+ {
10317
+ text: 'Cut row',
10318
+ onclick: cmd('mceTableCutRow'),
10319
+ onPostRender: pushCell
10320
+ },
10321
+ {
10322
+ text: 'Copy row',
10323
+ onclick: cmd('mceTableCopyRow'),
10324
+ onPostRender: pushCell
10325
+ },
10326
+ {
10327
+ text: 'Paste row before',
10328
+ onclick: cmd('mceTablePasteRowBefore'),
10329
+ onPostRender: pushCell
10330
+ },
10331
+ {
10332
+ text: 'Paste row after',
10333
+ onclick: cmd('mceTablePasteRowAfter'),
10334
+ onPostRender: pushCell
10335
+ }
10336
+ ]
10337
+ };
10338
+ var column = {
10339
+ text: 'Column',
10340
+ context: 'table',
10341
+ menu: [
10342
+ {
10343
+ text: 'Insert column before',
10344
+ onclick: cmd('mceTableInsertColBefore'),
10345
+ onPostRender: pushCell
10346
+ },
10347
+ {
10348
+ text: 'Insert column after',
10349
+ onclick: cmd('mceTableInsertColAfter'),
10350
+ onPostRender: pushCell
10351
+ },
10352
+ {
10353
+ text: 'Delete column',
10354
+ onclick: cmd('mceTableDeleteCol'),
10355
+ onPostRender: pushCell
10356
+ }
10357
+ ]
10358
+ };
10359
+ var cell = {
10360
+ separator: 'before',
10361
+ text: 'Cell',
10362
+ context: 'table',
10363
+ menu: [
10364
+ {
10365
+ text: 'Cell properties',
10366
+ onclick: cmd('mceTableCellProps'),
10367
+ onPostRender: pushCell
10368
+ },
10369
+ {
10370
+ text: 'Merge cells',
10371
+ onclick: cmd('mceTableMergeCells'),
10372
+ onPostRender: pushMerge
10373
+ },
10374
+ {
10375
+ text: 'Split cell',
10376
+ onclick: cmd('mceTableSplitCells'),
10377
+ onPostRender: pushUnmerge
10378
+ }
10379
+ ]
10380
+ };
10381
+ editor.addMenuItem('inserttable', insertTable);
10382
+ editor.addMenuItem('tableprops', tableProperties);
10383
+ editor.addMenuItem('deletetable', deleteTable);
10384
+ editor.addMenuItem('row', row);
10385
+ editor.addMenuItem('column', column);
10386
+ editor.addMenuItem('cell', cell);
10387
+ };
10388
+ var $_e80bn7q3jfuw8raz = { addMenuItems: addMenuItems };
10389
+
10390
+ var getClipboardRows = function (clipboardRows) {
10391
+ return clipboardRows.get().fold(function () {
10392
+ return;
10393
+ }, function (rows) {
10394
+ return $_tyr3yk5jfuw8q47.map(rows, function (row) {
10395
+ return row.dom();
10396
+ });
10397
+ });
10398
+ };
10399
+ var setClipboardRows = function (rows, clipboardRows) {
10400
+ var sugarRows = $_tyr3yk5jfuw8q47.map(rows, $_xbeoqkkjfuw8q73.fromDom);
10401
+ clipboardRows.set(Option.from(sugarRows));
10402
+ };
10403
+ var getApi = function (editor, clipboardRows) {
10404
+ return {
10405
+ insertTable: function (columns, rows) {
10406
+ return $_1mq3b3o1jfuw8qtu.insert(editor, columns, rows);
10407
+ },
10408
+ setClipboardRows: function (rows) {
10409
+ return setClipboardRows(rows, clipboardRows);
10410
+ },
10411
+ getClipboardRows: function () {
10412
+ return getClipboardRows(clipboardRows);
10413
+ }
10414
+ };
10415
+ };
10416
+
10417
+ function Plugin(editor) {
10418
+ var resizeHandler = ResizeHandler(editor);
10419
+ var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize);
10420
+ var actions = TableActions(editor, resizeHandler.lazyWire);
10421
+ var selections = Selections(editor);
10422
+ var clipboardRows = Cell(Option.none());
10423
+ $_srry6nsjfuw8qs8.registerCommands(editor, actions, cellSelection, selections, clipboardRows);
10424
+ $_3y1hv8k4jfuw8q3l.registerEvents(editor, selections, actions, cellSelection);
10425
+ $_e80bn7q3jfuw8raz.addMenuItems(editor, selections);
10426
+ $_ga9kj7q2jfuw8rau.addButtons(editor);
10427
+ $_ga9kj7q2jfuw8rau.addToolbars(editor);
10428
+ editor.on('PreInit', function () {
10429
+ editor.serializer.addTempAttr($_f8tr2nm5jfuw8qgp.firstSelected());
10430
+ editor.serializer.addTempAttr($_f8tr2nm5jfuw8qgp.lastSelected());
10431
+ });
10432
+ if (hasTabNavigation(editor)) {
10433
+ editor.on('keydown', function (e) {
10434
+ $_djb8ceorjfuw8qzt.handle(e, editor, actions, resizeHandler.lazyWire);
10435
+ });
10436
+ }
10437
+ editor.on('remove', function () {
10438
+ resizeHandler.destroy();
10439
+ cellSelection.destroy();
10440
+ });
10441
+ return getApi(editor, clipboardRows);
10442
+ }
10443
+ global.add('table', Plugin);
10444
+ function Plugin$1 () {
10445
+ }
10446
+
10447
+ return Plugin$1;
10448
+
10449
+ }());
10450
+ })();
tinymce47-table/plugin.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(){"use strict";var e,t,n,r,o,i,u=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=function(e){return function(){return e}},y={noop:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t]},noarg:function(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n()}},compose:function(n,r){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n(r.apply(null,arguments))}},constant:a,identity:function(e){return e},tripleEquals:function(e,t){return e===t},curry:function(i){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var u=new Array(arguments.length-1),n=1;n<arguments.length;n++)u[n-1]=arguments[n];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];var o=u.concat(n);return i.apply(null,o)}},not:function(n){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return!n.apply(null,arguments)}},die:function(e){return function(){throw new Error(e)}},apply:function(e){return e()},call:function(e){e()},never:a(!1),always:a(!0)},c=y.never,l=y.always,s=function(){return f},f=(r={fold:function(e,t){return e()},is:c,isSome:c,isNone:l,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},or:n,orThunk:t,map:s,ap:s,each:function(){},bind:s,flatten:s,exists:c,forall:l,filter:s,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:y.constant("none()")},Object.freeze&&Object.freeze(r),r),d=function(n){var e=function(){return n},t=function(){return o},r=function(e){return e(n)},o={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:l,isNone:c,getOr:e,getOrThunk:e,getOrDie:e,or:t,orThunk:t,map:function(e){return d(e(n))},ap:function(e){return e.fold(s,function(e){return d(e(n))})},each:function(e){e(n)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(n)?o:f},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(c,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},x={some:d,none:s,from:function(e){return null===e||e===undefined?f:d(e)}},m=function(t){return function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===t}},g={isString:m("string"),isObject:m("object"),isArray:m("array"),isNull:m("null"),isBoolean:m("boolean"),isUndefined:m("undefined"),isFunction:m("function"),isNumber:m("number")},p=(o=Array.prototype.indexOf)===undefined?function(e,t){return R(e,t)}:function(e,t){return o.call(e,t)},h=function(e,t){return-1<p(e,t)},v=function(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o,e)}return r},b=function(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)},w=function(e,t){for(var n=e.length-1;0<=n;n--)t(e[n],n,e)},S=function(e,t){for(var n=[],r=0,o=e.length;r<o;r++){var i=e[r];t(i,r,e)&&n.push(i)}return n},C=function(e,t){for(var n=0,r=e.length;n<r;n++)if(t(e[n],n,e))return x.some(n);return x.none()},R=function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return n;return-1},T=Array.prototype.push,A=function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!Array.prototype.isPrototypeOf(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);T.apply(t,e[n])}return t},D=function(e,t){for(var n=0,r=e.length;n<r;++n)if(!0!==t(e[n],n,e))return!1;return!0},k=Array.prototype.slice,N=g.isFunction(Array.from)?Array.from:function(e){return k.call(e)},E={map:v,each:b,eachr:w,partition:function(e,t){for(var n=[],r=[],o=0,i=e.length;o<i;o++){var u=e[o];(t(u,o,e)?n:r).push(u)}return{pass:n,fail:r}},filter:S,groupBy:function(e,t){if(0===e.length)return[];for(var n=t(e[0]),r=[],o=[],i=0,u=e.length;i<u;i++){var a=e[i],c=t(a);c!==n&&(r.push(o),o=[]),n=c,o.push(a)}return 0!==o.length&&r.push(o),r},indexOf:function(e,t){var n=p(e,t);return-1===n?x.none():x.some(n)},foldr:function(e,t,n){return w(e,function(e){n=t(n,e)}),n},foldl:function(e,t,n){return b(e,function(e){n=t(n,e)}),n},find:function(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];if(t(o,n,e))return x.some(o)}return x.none()},findIndex:C,flatten:A,bind:function(e,t){var n=v(e,t);return A(n)},forall:D,exists:function(e,t){return C(e,t).isSome()},contains:h,equal:function(e,n){return e.length===n.length&&D(e,function(e,t){return e===n[t]})},reverse:function(e){var t=k.call(e,0);return t.reverse(),t},chunk:function(e,t){for(var n=[],r=0;r<e.length;r+=t){var o=e.slice(r,r+t);n.push(o)}return n},difference:function(e,t){return S(e,function(e){return!h(t,e)})},mapToObject:function(e,t){for(var n={},r=0,o=e.length;r<o;r++){var i=e[r];n[String(i)]=t(i,r)}return n},pure:function(e){return[e]},sort:function(e,t){var n=k.call(e,0);return n.sort(t),n},range:function(e,t){for(var n=[],r=0;r<e;r++)n.push(t(r));return n},head:function(e){return 0===e.length?x.none():x.some(e[0])},last:function(e){return 0===e.length?x.none():x.some(e[e.length-1])},from:N},O=(i=Object.keys)===undefined?function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n);return t}:i,B=function(e,t){for(var n=O(e),r=0,o=n.length;r<o;r++){var i=n[r];t(e[i],i,e)}},P=function(r,o){var i={};return B(r,function(e,t){var n=o(e,t,r);i[n.k]=n.v}),i},I=function(e,n){var r=[];return B(e,function(e,t){r.push(n(e,t))}),r},W=function(e){return I(e,function(e){return e})},M={bifilter:function(e,n){var r={},o={};return B(e,function(e,t){(n(e,t)?r:o)[t]=e}),{t:r,f:o}},each:B,map:function(e,r){return P(e,function(e,t,n){return{k:t,v:r(e,t,n)}})},mapToArray:I,tupleMap:P,find:function(e,t){for(var n=O(e),r=0,o=n.length;r<o;r++){var i=n[r],u=e[i];if(t(u,i,e))return x.some(u)}return x.none()},keys:O,values:W,size:function(e){return W(e).length}},L=function(e){return e.slice(0).sort()},q={sort:L,reqMessage:function(e,t){throw new Error("All required keys ("+L(e).join(", ")+") were not specified. Specified keys were: "+L(t).join(", ")+".")},unsuppMessage:function(e){throw new Error("Unsupported keys for object: "+L(e).join(", "))},validateStrArr:function(t,e){if(!g.isArray(e))throw new Error("The "+t+" fields must be an array. Was: "+e+".");E.each(e,function(e){if(!g.isString(e))throw new Error("The value "+e+" in the "+t+" fields was not a string.")})},invalidTypeMessage:function(e,t){throw new Error("All values need to be of type: "+t+". Keys ("+L(e).join(", ")+") were not.")},checkDupes:function(e){var n=L(e);E.find(n,function(e,t){return t<n.length-1&&e===n[t+1]}).each(function(e){throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+n.join(", ")+"].")})}},F={immutable:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];if(t.length!==n.length)throw new Error('Wrong number of arguments to struct. Expected "['+t.length+']", got '+n.length+" arguments");var r={};return E.each(t,function(e,t){r[e]=y.constant(n[t])}),r}},immutableBag:function(o,i){var u=o.concat(i);if(0===u.length)throw new Error("You must specify at least one required or optional field.");return q.validateStrArr("required",o),q.validateStrArr("optional",i),q.checkDupes(u),function(t){var n=M.keys(t);E.forall(o,function(e){return E.contains(n,e)})||q.reqMessage(o,n);var e=E.filter(n,function(e){return!E.contains(u,e)});0<e.length&&q.unsuppMessage(e);var r={};return E.each(o,function(e){r[e]=y.constant(t[e])}),E.each(i,function(e){r[e]=y.constant(Object.prototype.hasOwnProperty.call(t,e)?x.some(t[e]):x.none())}),r}}},j=F.immutable("width","height"),z=F.immutable("rows","columns"),_=F.immutable("row","column"),H=F.immutable("x","y"),V=F.immutable("element","rowspan","colspan"),U=F.immutable("element","rowspan","colspan","isNew"),G={dimensions:j,grid:z,address:_,coords:H,extended:F.immutable("element","rowspan","colspan","row","column"),detail:V,detailnew:U,rowdata:F.immutable("element","cells","section"),elementnew:F.immutable("element","isNew"),rowdatanew:F.immutable("element","cells","section","isNew"),rowcells:F.immutable("cells","section"),rowdetails:F.immutable("details","section"),bounds:F.immutable("startRow","startCol","finishRow","finishCol")},X=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:y.constant(e)}},Y={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",e),"HTML must have a single root node";return X(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return X(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return X(n)},fromDom:X,fromPoint:function(e,t,n){return x.from(e.dom().elementFromPoint(t,n)).map(X)}},K=8,$=9,J=1,Q=3,Z=J,ee=$,te=function(e){return e.nodeType!==Z&&e.nodeType!==ee||0===e.childElementCount},ne={all:function(e,t){var n=t===undefined?document:t.dom();return te(n)?[]:E.map(n.querySelectorAll(e),Y.fromDom)},is:function(e,t){var n=e.dom();if(n.nodeType!==Z)return!1;if(n.matches!==undefined)return n.matches(t);if(n.msMatchesSelector!==undefined)return n.msMatchesSelector(t);if(n.webkitMatchesSelector!==undefined)return n.webkitMatchesSelector(t);if(n.mozMatchesSelector!==undefined)return n.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},one:function(e,t){var n=t===undefined?document:t.dom();return te(n)?x.none():x.from(n.querySelector(e)).map(Y.fromDom)}},re=function(e,t){for(var n=[],r=function(e){return n.push(e),t(e)},o=t(e);(o=o.bind(r)).isSome(););return n},oe="undefined"!=typeof window?window:Function("return this;")(),ie=function(e,t){for(var n=t!==undefined&&null!==t?t:oe,r=0;r<e.length&&n!==undefined&&null!==n;++r)n=n[e[r]];return n},ue=function(e,t){var n=e.split(".");return ie(n,t)},ae=function(e,t){var n=ue(e,t);if(n===undefined||null===n)throw e+" not available on this browser";return n},ce=function(){return ae("Node")},le=function(e,t,n){return 0!=(e.compareDocumentPosition(t)&n)},se=function(e,t){return le(e,t,ce().DOCUMENT_POSITION_CONTAINED_BY)},fe=function(e){var t,n=!1;return function(){return n||(n=!0,t=e.apply(null,arguments)),t}},de=function(e,t){var n=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.test(t))return r}return undefined}(e,t);if(!n)return{major:0,minor:0};var r=function(e){return Number(t.replace(n,"$"+e))};return ge(r(1),r(2))},me=function(){return ge(0,0)},ge=function(e,t){return{major:e,minor:t}},pe={nu:ge,detect:function(e,t){var n=String(t).toLowerCase();return 0===e.length?me():de(e,n)},unknown:me},he="Firefox",ve=function(e,t){return function(){return t===e}},be=function(e){var t=e.current;return{current:t,version:e.version,isEdge:ve("Edge",t),isChrome:ve("Chrome",t),isIE:ve("IE",t),isOpera:ve("Opera",t),isFirefox:ve(he,t),isSafari:ve("Safari",t)}},we={unknown:function(){return be({current:undefined,version:pe.unknown()})},nu:be,edge:y.constant("Edge"),chrome:y.constant("Chrome"),ie:y.constant("IE"),opera:y.constant("Opera"),firefox:y.constant(he),safari:y.constant("Safari")},ye="Windows",xe="Android",Se="Solaris",Ce="FreeBSD",Re=function(e,t){return function(){return t===e}},Te=function(e){var t=e.current;return{current:t,version:e.version,isWindows:Re(ye,t),isiOS:Re("iOS",t),isAndroid:Re(xe,t),isOSX:Re("OSX",t),isLinux:Re("Linux",t),isSolaris:Re(Se,t),isFreeBSD:Re(Ce,t)}},Ae={unknown:function(){return Te({current:undefined,version:pe.unknown()})},nu:Te,windows:y.constant(ye),ios:y.constant("iOS"),android:y.constant(xe),linux:y.constant("Linux"),osx:y.constant("OSX"),solaris:y.constant(Se),freebsd:y.constant(Ce)},De=function(e,t){var n=String(t).toLowerCase();return E.find(e,function(e){return e.search(n)})},ke=function(e,n){return De(e,n).map(function(e){var t=pe.detect(e.versionRegexes,n);return{current:e.name,version:t}})},Ne=function(e,n){return De(e,n).map(function(e){var t=pe.detect(e.versionRegexes,n);return{current:e.name,version:t}})},Ee=function(e,t){return t+e},Oe=function(e,t){return e+t},Be=function(e,t){return e.substring(t)},Pe=function(e,t){return e.substring(0,e.length-t)},Ie=function(e){return""===e?x.none():x.some(e.substr(0,1))},We=function(e){return""===e?x.none():x.some(e.substring(1))},Me=function(e,t,n){return""===t||!(e.length<t.length)&&e.substr(n,n+t.length)===t},Le=function(e,t){return Me(e,t,0)},qe=function(e,t){return Me(e,t,e.length-t.length)},Fe={supplant:function(e,o){return e.replace(/\${([^{}]*)}/g,function(e,t){var n,r=o[t];return"string"==(n=typeof r)||"number"===n?r:e})},startsWith:Le,removeLeading:function(e,t){return Le(e,t)?Be(e,t.length):e},removeTrailing:function(e,t){return qe(e,t)?Pe(e,t.length):e},ensureLeading:function(e,t){return Le(e,t)?e:Ee(e,t)},ensureTrailing:function(e,t){return qe(e,t)?e:Oe(e,t)},endsWith:qe,contains:function(e,t){return-1!==e.indexOf(t)},trim:function(e){return e.replace(/^\s+|\s+$/g,"")},lTrim:function(e){return e.replace(/^\s+/g,"")},rTrim:function(e){return e.replace(/\s+$/g,"")},capitalize:function(e){return Ie(e).bind(function(t){return We(e).map(function(e){return t.toUpperCase()+e})}).getOr(e)}},je=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,ze=function(t){return function(e){return Fe.contains(e,t)}},_e=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return Fe.contains(e,"edge/")&&Fe.contains(e,"chrome")&&Fe.contains(e,"safari")&&Fe.contains(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,je],search:function(e){return Fe.contains(e,"chrome")&&!Fe.contains(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return Fe.contains(e,"msie")||Fe.contains(e,"trident")}},{name:"Opera",versionRegexes:[je,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:ze("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:ze("firefox")},{name:"Safari",versionRegexes:[je,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(Fe.contains(e,"safari")||Fe.contains(e,"mobile/"))&&Fe.contains(e,"applewebkit")}}],He=[{name:"Windows",search:ze("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return Fe.contains(e,"iphone")||Fe.contains(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:ze("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:ze("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:ze("linux"),versionRegexes:[]},{name:"Solaris",search:ze("sunos"),versionRegexes:[]},{name:"FreeBSD",search:ze("freebsd"),versionRegexes:[]}],Ve={browsers:y.constant(_e),oses:y.constant(He)},Ue=function(e){var t,n,r,o,i,u,a,c,l,s,f,d=Ve.browsers(),m=Ve.oses(),g=ke(d,e).fold(we.unknown,we.nu),p=Ne(m,e).fold(Ae.unknown,Ae.nu);return{browser:g,os:p,deviceType:(n=g,r=e,o=(t=p).isiOS()&&!0===/ipad/i.test(r),i=t.isiOS()&&!o,u=t.isAndroid()&&3===t.version.major,a=t.isAndroid()&&4===t.version.major,c=o||u||a&&!0===/mobile/i.test(r),l=t.isiOS()||t.isAndroid(),s=l&&!c,f=n.isSafari()&&t.isiOS()&&!1===/safari/i.test(r),{isiPad:y.constant(o),isiPhone:y.constant(i),isTablet:y.constant(c),isPhone:y.constant(s),isTouch:y.constant(l),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:y.constant(f)})}},Ge={detect:fe(function(){var e=navigator.userAgent;return Ue(e)})},Xe=function(e,t){return e.dom()===t.dom()},Ye=Ge.detect().browser.isIE()?function(e,t){return se(e.dom(),t.dom())}:function(e,t){var n=e.dom(),r=t.dom();return n!==r&&n.contains(r)},Ke={eq:Xe,isEqualNode:function(e,t){return e.dom().isEqualNode(t.dom())},member:function(e,t){return E.exists(t,y.curry(Xe,e))},contains:Ye,is:ne.is},$e=function(e){return Y.fromDom(e.dom().ownerDocument)},Je=function(e){var t=e.dom();return x.from(t.parentNode).map(Y.fromDom)},Qe=function(e){var t=e.dom();return x.from(t.previousSibling).map(Y.fromDom)},Ze=function(e){var t=e.dom();return x.from(t.nextSibling).map(Y.fromDom)},et=function(e){var t=e.dom();return E.map(t.childNodes,Y.fromDom)},tt=function(e,t){var n=e.dom().childNodes;return x.from(n[t]).map(Y.fromDom)},nt=F.immutable("element","offset"),rt={owner:$e,defaultView:function(e){var t=e.dom().ownerDocument.defaultView;return Y.fromDom(t)},documentElement:function(e){var t=$e(e);return Y.fromDom(t.dom().documentElement)},parent:Je,findIndex:function(n){return Je(n).bind(function(e){var t=et(e);return E.findIndex(t,function(e){return Ke.eq(n,e)})})},parents:function(e,t){for(var n=g.isFunction(t)?t:y.constant(!1),r=e.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,u=Y.fromDom(i);if(o.push(u),!0===n(u))break;r=i}return o},siblings:function(t){return Je(t).map(et).map(function(e){return E.filter(e,function(e){return!Ke.eq(t,e)})}).getOr([])},prevSibling:Qe,offsetParent:function(e){var t=e.dom();return x.from(t.offsetParent).map(Y.fromDom)},prevSiblings:function(e){return E.reverse(re(e,Qe))},nextSibling:Ze,nextSiblings:function(e){return re(e,Ze)},children:et,child:tt,firstChild:function(e){return tt(e,0)},lastChild:function(e){return tt(e,e.dom().childNodes.length-1)},childNodesCount:function(e){return e.dom().childNodes.length},hasChildNodes:function(e){return e.dom().hasChildNodes()},leaf:function(e,t){var n=et(e);return 0<n.length&&t<n.length?nt(n[t],0):nt(e,t)}},ot=function(e,t,n){return E.bind(rt.children(e),function(e){return ne.is(e,t)?n(e)?[e]:[]:ot(e,t,n)})},it={firstLayer:function(e,t){return ot(e,t,y.constant(!0))},filterFirstLayer:ot},ut=function(e){return e.dom().nodeName.toLowerCase()},at=function(e){return e.dom().nodeType},ct=function(t){return function(e){return at(e)===t}},lt=ct(J),st=ct(Q),ft=ct($),dt={name:ut,type:at,value:function(e){return e.dom().nodeValue},isElement:lt,isText:st,isDocument:ft,isComment:function(e){return at(e)===K||"#comment"===ut(e)}},mt=function(e,t,n){if(!(g.isString(n)||g.isBoolean(n)||g.isNumber(n)))throw console.error("Invalid call to Attr.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")},gt=function(e,t,n){mt(e.dom(),t,n)},pt=function(e,t){var n=e.dom().getAttribute(t);return null===n?undefined:n},ht=function(e,t){var n=e.dom();return!(!n||!n.hasAttribute)&&n.hasAttribute(t)},vt={clone:function(e){return E.foldl(e.dom().attributes,function(e,t){return e[t.name]=t.value,e},{})},set:gt,setAll:function(e,t){var n=e.dom();M.each(t,function(e,t){mt(n,t,e)})},get:pt,has:ht,remove:function(e,t){e.dom().removeAttribute(t)},hasNone:function(e){var t=e.dom().attributes;return t===undefined||null===t||0===t.length},transfer:function(o,i,e){dt.isElement(o)&&dt.isElement(i)&&E.each(e,function(e){var t,n,r;n=i,ht(t=o,r=e)&&!ht(n,r)&&gt(n,r,pt(t,r))})}},bt=fe(function(){return wt(Y.fromDom(document))}),wt=function(e){var t=e.dom().body;if(null===t||t===undefined)throw"Body is not available yet";return Y.fromDom(t)},yt={body:bt,getBody:wt,inBody:function(e){var t=dt.isText(e)?e.dom().parentNode:e.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}},xt=function(e,t){var n=[];return E.each(rt.children(e),function(e){t(e)&&(n=n.concat([e])),n=n.concat(xt(e,t))}),n},St={all:function(e){return xt(yt.body(),e)},ancestors:function(e,t,n){return E.filter(rt.parents(e,n),t)},siblings:function(e,t){return E.filter(rt.siblings(e),t)},children:function(e,t){return E.filter(rt.children(e),t)},descendants:xt},Ct={all:function(e){return ne.all(e)},ancestors:function(e,t,n){return St.ancestors(e,function(e){return ne.is(e,t)},n)},siblings:function(e,t){return St.siblings(e,function(e){return ne.is(e,t)})},children:function(e,t){return St.children(e,function(e){return ne.is(e,t)})},descendants:function(e,t){return ne.all(t,e)}};function Rt(e,t,n,r,o){return e(n,r)?x.some(n):g.isFunction(o)&&o(n)?x.none():t(n,r,o)}var Tt,At,Dt,kt,Nt,Et=function(e,t,n){for(var r=e.dom(),o=g.isFunction(n)?n:y.constant(!1);r.parentNode;){r=r.parentNode;var i=Y.fromDom(r);if(t(i))return x.some(i);if(o(i))break}return x.none()},Ot=function(e,t){return E.find(e.dom().childNodes,y.compose(t,Y.fromDom)).map(Y.fromDom)},Bt=function(e,r){var o=function(e){for(var t=0;t<e.childNodes.length;t++){if(r(Y.fromDom(e.childNodes[t])))return x.some(Y.fromDom(e.childNodes[t]));var n=o(e.childNodes[t]);if(n.isSome())return n}return x.none()};return o(e.dom())},Pt={first:function(e){return Bt(yt.body(),e)},ancestor:Et,closest:function(e,t,n){return Rt(function(e){return t(e)},Et,e,t,n)},sibling:function(t,n){var e=t.dom();return e.parentNode?Ot(Y.fromDom(e.parentNode),function(e){return!Ke.eq(t,e)&&n(e)}):x.none()},child:Ot,descendant:Bt},It=function(e,t,n){return Pt.ancestor(e,function(e){return ne.is(e,t)},n)},Wt={first:function(e){return ne.one(e)},ancestor:It,sibling:function(e,t){return Pt.sibling(e,function(e){return ne.is(e,t)})},child:function(e,t){return Pt.child(e,function(e){return ne.is(e,t)})},descendant:function(e,t){return ne.one(t,e)},closest:function(e,t,n){return Rt(ne.is,It,e,t,n)}},Mt=function(e,t,n){var r=n!==undefined?n:y.constant(!1);return r(t)?x.none():E.contains(e,dt.name(t))?x.some(t):Wt.ancestor(t,e.join(","),function(e){return ne.is(e,"table")||r(e)})},Lt=function(t,e){return rt.parent(e).map(function(e){return Ct.children(e,t)})},qt=y.curry(Lt,"th,td"),Ft=y.curry(Lt,"tr"),jt=function(e,t){return parseInt(vt.get(e,t),10)},zt={cell:function(e,t){return Mt(["td","th"],e,t)},firstCell:function(e){return Wt.descendant(e,"th,td")},cells:function(e){return it.firstLayer(e,"th,td")},neighbourCells:qt,table:function(e,t){return Wt.closest(e,"table",t)},row:function(e,t){return Mt(["tr"],e,t)},rows:function(e){return it.firstLayer(e,"tr")},notCell:function(e,t){return Mt(["caption","tr","tbody","tfoot","thead"],e,t)},neighbourRows:Ft,attr:jt,grid:function(e,t,n){var r=jt(e,t),o=jt(e,n);return G.grid(r,o)}},_t=function(e){var t=zt.rows(e);return E.map(t,function(e){var t=e,n=rt.parent(t).bind(function(e){var t=dt.name(e);return"tfoot"===t||"thead"===t||"tbody"===t?t:"tbody"}),r=E.map(zt.cells(e),function(e){var t=vt.has(e,"rowspan")?parseInt(vt.get(e,"rowspan"),10):1,n=vt.has(e,"colspan")?parseInt(vt.get(e,"colspan"),10):1;return G.detail(e,t,n)});return G.rowdata(t,r,n)})},Ht=function(e,n){return E.map(e,function(e){var t=E.map(zt.cells(e),function(e){var t=vt.has(e,"rowspan")?parseInt(vt.get(e,"rowspan"),10):1,n=vt.has(e,"colspan")?parseInt(vt.get(e,"colspan"),10):1;return G.detail(e,t,n)});return G.rowdata(e,t,n.section())})},Vt=function(e,t){return e+","+t},Ut=function(e,t){var n=E.bind(e.all(),function(e){return e.cells()});return E.filter(n,t)},Gt={generate:function(e){var s={},t=[],n=e.length,f=0;E.each(e,function(e,c){var l=[];E.each(e.cells(),function(e,t){for(var n=0;s[Vt(c,n)]!==undefined;)n++;for(var r=G.extended(e.element(),e.rowspan(),e.colspan(),c,n),o=0;o<e.colspan();o++)for(var i=0;i<e.rowspan();i++){var u=n+o,a=Vt(c+i,u);s[a]=r,f=Math.max(f,u+1)}l.push(r)}),t.push(G.rowdata(e.element(),l,e.section()))});var r=G.grid(n,f);return{grid:y.constant(r),access:y.constant(s),all:y.constant(t)}},getAt:function(e,t,n){var r=e.access()[Vt(t,n)];return r!==undefined?x.some(r):x.none()},findItem:function(e,t,n){var r=Ut(e,function(e){return n(t,e.element())});return 0<r.length?x.some(r[0]):x.none()},filterItems:Ut,justCells:function(e){var t=E.map(e.all(),function(e){return e.cells()});return E.flatten(t)}},Xt={isSupported:function(e){return e.style!==undefined}},Yt=function(e,t,n){if(!g.isString(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);Xt.isSupported(e)&&e.style.setProperty(t,n)},Kt=function(e,t){Xt.isSupported(e)&&e.style.removeProperty(t)},$t=function(e,t,n){var r=e.dom();Yt(r,t,n)},Jt=function(e,t){return Xt.isSupported(e)?e.style.getPropertyValue(t):""},Qt=function(e,t){var n=e.dom(),r=Jt(n,t);return x.from(r).filter(function(e){return 0<e.length})},Zt={copy:function(e,t){var n=e.dom(),r=t.dom();Xt.isSupported(n)&&Xt.isSupported(r)&&(r.style.cssText=n.style.cssText)},set:$t,preserve:function(e,t){var n=vt.get(e,"style"),r=t(e);return(n===undefined?vt.remove:vt.set)(e,"style",n),r},setAll:function(e,t){var n=e.dom();M.each(t,function(e,t){Yt(n,t,e)})},setOptions:function(e,t){var n=e.dom();M.each(t,function(e,t){e.fold(function(){Kt(n,t)},function(e){Yt(n,t,e)})})},remove:function(e,t){var n=e.dom();Kt(n,t),vt.has(e,"style")&&""===Fe.trim(vt.get(e,"style"))&&vt.remove(e,"style")},get:function(e,t){var n=e.dom(),r=window.getComputedStyle(n).getPropertyValue(t),o=""!==r||yt.inBody(e)?r:Jt(n,t);return null===o?undefined:o},getRaw:Qt,getAllRaw:function(e){var t={},n=e.dom();if(Xt.isSupported(n))for(var r=0;r<n.style.length;r++){var o=n.style.item(r);t[o]=n.style[o]}return t},isValidValue:function(e,t,n){var r=Y.fromTag(e);return $t(r,t,n),Qt(r,t).isSome()},reflow:function(e){return e.dom().offsetWidth},transfer:function(r,o,e){dt.isElement(r)&&dt.isElement(o)&&E.each(e,function(e){var t,n;t=o,Qt(r,n=e).each(function(e){Qt(t,n).isNone()&&$t(t,n,e)})})}},en=function(t,n){rt.parent(t).each(function(e){e.dom().insertBefore(n.dom(),t.dom())})},tn=function(e,t){e.dom().appendChild(t.dom())},nn={before:en,after:function(e,t){rt.nextSibling(e).fold(function(){rt.parent(e).each(function(e){tn(e,t)})},function(e){en(e,t)})},prepend:function(t,n){rt.firstChild(t).fold(function(){tn(t,n)},function(e){t.dom().insertBefore(n.dom(),e.dom())})},append:tn,appendAt:function(e,t,n){rt.child(e,n).fold(function(){tn(e,t)},function(e){en(e,t)})},wrap:function(e,t){en(e,t),tn(t,e)}},rn={before:function(t,e){E.each(e,function(e){nn.before(t,e)})},after:function(r,o){E.each(o,function(e,t){var n=0===t?r:o[t-1];nn.after(n,e)})},prepend:function(t,e){E.each(e.slice().reverse(),function(e){nn.prepend(t,e)})},append:function(t,e){E.each(e,function(e){nn.append(t,e)})}},on=function(e){var t=e.dom();null!==t.parentNode&&t.parentNode.removeChild(t)},un={empty:function(e){e.dom().textContent="",E.each(rt.children(e),function(e){on(e)})},remove:on,unwrap:function(e){var t=rt.children(e);0<t.length&&rn.before(e,t),on(e)}},an=F.immutable("minRow","minCol","maxRow","maxCol"),cn=function(e,t){var n,i,r,u,a,c,l,o,s,f,d=function(e){return ne.is(e.element(),t)},m=_t(e),g=Gt.generate(m),p=(i=d,r=(n=g).grid().columns(),u=n.grid().rows(),a=r,l=c=0,M.each(n.access(),function(e){if(i(e)){var t=e.row(),n=t+e.rowspan()-1,r=e.column(),o=r+e.colspan()-1;t<u?u=t:c<n&&(c=n),r<a?a=r:l<o&&(l=o)}}),an(u,a,c,l)),h="th:not("+t+"),td:not("+t+")",v=it.filterFirstLayer(e,"th,td",function(e){return ne.is(e,h)});return E.each(v,un.remove),function(e,t,n,r){for(var o,i,u,a=t.grid().columns(),c=t.grid().rows(),l=0;l<c;l++)for(var s=!1,f=0;f<a;f++)l<n.minRow()||l>n.maxRow()||f<n.minCol()||f>n.maxCol()||(Gt.getAt(t,l,f).filter(r).isNone()?(o=s,i=e[l].element(),u=Y.fromTag("td"),nn.append(u,Y.fromTag("br")),(o?nn.append:nn.prepend)(i,u)):s=!0)}(m,g,p,d),o=e,s=p,f=E.filter(it.firstLayer(o,"tr"),function(e){return 0===e.dom().childElementCount}),E.each(f,un.remove),s.minCol()!==s.maxCol()&&s.minRow()!==s.maxRow()||E.each(it.firstLayer(o,"th,td"),function(e){vt.remove(e,"rowspan"),vt.remove(e,"colspan")}),vt.remove(o,"width"),vt.remove(o,"height"),Zt.remove(o,"width"),Zt.remove(o,"height"),e},ln=function(e,t){return Y.fromDom(e.dom().cloneNode(t))},sn=function(e){return ln(e,!0)},fn=function(e,t){var n=Y.fromTag(t),r=vt.clone(e);return vt.setAll(n,r),n},dn=function(e){return ln(e,!1)},mn=sn,gn=function(e,t){var n=fn(e,t),r=rt.children(sn(e));return rn.append(n,r),n},pn=(Tt=dt.isText,At="text",Dt=function(e){return Tt(e)?x.from(e.dom().nodeValue):x.none()},kt=Ge.detect().browser,{get:function(e){if(!Tt(e))throw new Error("Can only get "+At+" value of a "+At+" node");return Nt(e).getOr("")},getOption:Nt=kt.isIE()&&10===kt.version.major?function(e){try{return Dt(e)}catch(t){return x.none()}}:Dt,set:function(e,t){if(!Tt(e))throw new Error("Can only set raw "+At+" value of a "+At+" node");e.dom().nodeValue=t}}),hn={get:function(e){return pn.get(e)},getOption:function(e){return pn.getOption(e)},set:function(e,t){pn.set(e,t)}},vn=function(e){return"img"===dt.name(e)?1:hn.getOption(e).fold(function(){return rt.children(e).length},function(e){return e.length})},bn=["img","br"],wn=vn,yn=function(e){var t;return t=e,hn.getOption(t).filter(function(e){return 0!==e.trim().length||-1<e.indexOf("\xa0")}).isSome()||E.contains(bn,dt.name(e))},xn=function(e,i){var u=function(e){for(var t=rt.children(e),n=t.length-1;0<=n;n--){var r=t[n];if(i(r))return x.some(r);var o=u(r);if(o.isSome())return o}return x.none()};return u(e)},Sn={first:function(e){return Pt.descendant(e,yn)},last:function(e){return xn(e,yn)}},Cn=function(){var e=Y.fromTag("td");return nn.append(e,Y.fromTag("br")),e},Rn=function(e,t,n){var r=gn(e,t);return M.each(n,function(e,t){null===e?vt.remove(r,t):vt.set(r,t,e)}),r},Tn=function(e){return e},An=function(e){return function(){return Y.fromTag("tr",e.dom())}},Dn=function(c,e,l){return{row:An(e),cell:function(e){var r,o,i,t=rt.owner(e.element()),n=Y.fromTag(dt.name(e.element()),t.dom()),u=l.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),a=0<u.length?(r=e.element(),o=n,i=u,Sn.first(r).map(function(e){var t=i.join(","),n=Ct.ancestors(e,t,function(e){return Ke.eq(e,r)});return E.foldr(n,function(e,t){var n=dn(t);return nn.append(e,n),n},o)}).getOr(o)):n;return nn.append(a,Y.fromTag("br")),Zt.copy(e.element(),n),Zt.remove(n,"height"),1!==e.colspan()&&Zt.remove(e.element(),"width"),c(e.element(),n),n},replace:Rn,gap:Cn}},kn=function(e){return{row:An(e),cell:Cn,replace:Tn,gap:Cn}},Nn=function(e,t){var n=(t||document).createElement("div");return n.innerHTML=e,rt.children(Y.fromDom(n))},En=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"];function On(){return{up:y.constant({selector:Wt.ancestor,closest:Wt.closest,predicate:Pt.ancestor,all:rt.parents}),down:y.constant({selector:Ct.descendants,predicate:St.descendants}),styles:y.constant({get:Zt.get,getRaw:Zt.getRaw,set:Zt.set,remove:Zt.remove}),attrs:y.constant({get:vt.get,set:vt.set,remove:vt.remove,copyTo:function(e,t){var n=vt.clone(e);vt.setAll(t,n)}}),insert:y.constant({before:nn.before,after:nn.after,afterAll:rn.after,append:nn.append,appendAll:rn.append,prepend:nn.prepend,wrap:nn.wrap}),remove:y.constant({unwrap:un.unwrap,remove:un.remove}),create:y.constant({nu:Y.fromTag,clone:function(e){return Y.fromDom(e.dom().cloneNode(!1))},text:Y.fromText}),query:y.constant({comparePosition:function(e,t){return e.dom().compareDocumentPosition(t.dom())},prevSibling:rt.prevSibling,nextSibling:rt.nextSibling}),property:y.constant({children:rt.children,name:dt.name,parent:rt.parent,isText:dt.isText,isComment:dt.isComment,isElement:dt.isElement,getText:hn.get,setText:hn.set,isBoundary:function(e){return!!dt.isElement(e)&&("body"===dt.name(e)||E.contains(En,dt.name(e)))},isEmptyTag:function(e){return!!dt.isElement(e)&&E.contains(["br","img","hr","input"],dt.name(e))}}),eq:Ke.eq,is:Ke.is}}F.immutable("left","right");var Bn=function(r,o,e,t){var n=o(r,e);return E.foldr(t,function(e,t){var n=o(r,t);return Pn(r,e,n)},n)},Pn=function(t,e,n){return e.bind(function(e){return n.filter(y.curry(t.eq,e))})},In=function(e,t,n){return 0<n.length?Bn(e,t,(r=n)[0],r.slice(1)):x.none();var r},Wn=function(e,t){return y.curry(e.eq,t)},Mn=function(t,e,n,r){var o=r!==undefined?r:y.constant(!1),i=[e].concat(t.up().all(e)),u=[n].concat(t.up().all(n)),a=function(t){return E.findIndex(t,o).fold(function(){return t},function(e){return t.slice(0,e+1)})},c=a(i),l=a(u),s=E.find(c,function(e){return E.exists(l,Wn(t,e))});return{firstpath:y.constant(c),secondpath:y.constant(l),shared:y.constant(s)}},Ln=Mn,qn=function(e,t,n){return In(e,t,n)},Fn=function(e,t,n,r){return Ln(e,t,n,r)},jn=On(),zn=function(n,e){return qn(jn,function(e,t){return n(t)},e)},_n=function(e,t,n){return Fn(jn,e,t,n)},Hn=function(e,t){return t.column()>=e.startCol()&&t.column()+t.colspan()-1<=e.finishCol()&&t.row()>=e.startRow()&&t.row()+t.rowspan()-1<=e.finishRow()},Vn=function(e,t){var n=t.column(),r=t.column()+t.colspan()-1,o=t.row(),i=t.row()+t.rowspan()-1;return n<=e.finishCol()&&r>=e.startCol()&&o<=e.finishRow()&&i>=e.startRow()},Un=function(e,t){for(var n=!0,r=y.curry(Hn,t),o=t.startRow();o<=t.finishRow();o++)for(var i=t.startCol();i<=t.finishCol();i++)n=n&&Gt.getAt(e,o,i).exists(r);return n?x.some(t):x.none()},Gn=function(e,t,n){var r=Gt.findItem(e,t,Ke.eq),o=Gt.findItem(e,n,Ke.eq);return r.bind(function(r){return o.map(function(e){return t=r,n=e,G.bounds(Math.min(t.row(),n.row()),Math.min(t.column(),n.column()),Math.max(t.row()+t.rowspan()-1,n.row()+n.rowspan()-1),Math.max(t.column()+t.colspan()-1,n.column()+n.colspan()-1));var t,n})})},Xn=Gn,Yn=function(t,e,n){return Gn(t,e,n).bind(function(e){return Un(t,e)})},Kn=function(r,e,o,i){return Gt.findItem(r,e,Ke.eq).bind(function(e){var t=0<o?e.row()+e.rowspan()-1:e.row(),n=0<i?e.column()+e.colspan()-1:e.column();return Gt.getAt(r,t+o,n+i).map(function(e){return e.element()})})},$n=function(n,e,t){return Xn(n,e,t).map(function(e){var t=Gt.filterItems(n,y.curry(Vn,e));return E.map(t,function(e){return e.element()})})},Jn=function(e,t){return Gt.findItem(e,t,function(e,t){return Ke.contains(t,e)}).bind(function(e){return e.element()})},Qn=function(e){var t=_t(e);return Gt.generate(t)},Zn=function(n,r,o){return zt.table(n).bind(function(e){var t=Qn(e);return Kn(t,n,r,o)})},er=function(e,t,n){var r=Qn(e);return $n(r,t,n)},tr=function(e,t,n,r,o){var i=Qn(e),u=Ke.eq(e,n)?t:Jn(i,t),a=Ke.eq(e,o)?r:Jn(i,r);return $n(i,u,a)},nr=function(e,t,n){var r=Qn(e);return Yn(r,t,n)},rr=function(e,t){return Wt.ancestor(e,"table")},or=F.immutableBag(["boxes","start","finish"],[]),ir=function(a,c,r){var l=function(t){return function(e){return r(e)||Ke.eq(e,t)}};return Ke.eq(a,c)?x.some(or({boxes:x.some([a]),start:a,finish:c})):rr(a).bind(function(u){return rr(c).bind(function(i){if(Ke.eq(u,i))return x.some(or({boxes:er(u,a,c),start:a,finish:c}));if(Ke.contains(u,i)){var e=0<(t=Ct.ancestors(c,"td,th",l(u))).length?t[t.length-1]:c;return x.some(or({boxes:tr(u,a,u,c,i),start:a,finish:e}))}if(Ke.contains(i,u)){var t,n=0<(t=Ct.ancestors(a,"td,th",l(i))).length?t[t.length-1]:a;return x.some(or({boxes:tr(i,a,u,c,i),start:a,finish:n}))}return _n(a,c).shared().bind(function(e){return Wt.closest(e,"table",r).bind(function(e){var t=Ct.ancestors(c,"td,th",l(e)),n=0<t.length?t[t.length-1]:c,r=Ct.ancestors(a,"td,th",l(e)),o=0<r.length?r[r.length-1]:a;return x.some(or({boxes:tr(e,a,u,c,i),start:o,finish:n}))})})})})},ur={identify:ir,retrieve:function(e,t){var n=Ct.descendants(e,t);return 0<n.length?x.some(n):x.none()},shiftSelection:function(e,t,n,r,o){return(i=e,u=o,E.find(i,function(e){return ne.is(e,u)})).bind(function(e){return Zn(e,t,n).bind(function(e){return t=e,n=r,Wt.ancestor(t,"table").bind(function(e){return Wt.descendant(e,n).bind(function(e){return ir(e,t).bind(function(t){return t.boxes().map(function(e){return{boxes:y.constant(e),start:y.constant(t.start()),finish:y.constant(t.finish())}})})})});var t,n})});var i,u},getEdges:function(e,t,r){return Wt.descendant(e,t).bind(function(n){return Wt.descendant(e,r).bind(function(t){return zn(rr,[n,t]).map(function(e){return{first:y.constant(n),last:y.constant(t),table:y.constant(e)}})})})}},ar=function(e,t){return ur.retrieve(e,t)},cr=function(o,e,t){return ur.getEdges(o,e,t).bind(function(n){var e=function(e){return Ke.eq(o,e)},t=Wt.ancestor(n.first(),"thead,tfoot,tbody,table",e),r=Wt.ancestor(n.last(),"thead,tfoot,tbody,table",e);return t.bind(function(t){return r.bind(function(e){return Ke.eq(t,e)?nr(n.table(),n.first(),n.last()):x.none()})})})},lr="data-mce-selected",sr="data-mce-first-selected",fr="data-mce-last-selected",dr={selected:y.constant(lr),selectedSelector:y.constant("td[data-mce-selected],th[data-mce-selected]"),attributeSelector:y.constant("[data-mce-selected]"),firstSelected:y.constant(sr),firstSelectedSelector:y.constant("td[data-mce-first-selected],th[data-mce-first-selected]"),lastSelected:y.constant(fr),lastSelectedSelector:y.constant("td[data-mce-last-selected],th[data-mce-last-selected]")},mr=function(u){if(!g.isArray(u))throw new Error("cases must be an array");if(0===u.length)throw new Error("there must be at least one case");var a=[],n={};return E.each(u,function(e,r){var t=M.keys(e);if(1!==t.length)throw new Error("one and only one name per case");var o=t[0],i=e[o];if(n[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!g.isArray(i))throw new Error("case arguments must be an array");a.push(o),n[o]=function(){var e=arguments.length;if(e!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+e);for(var n=new Array(e),t=0;t<n.length;t++)n[t]=arguments[t];return{fold:function(){if(arguments.length!==u.length)throw new Error("Wrong number of arguments to fold. Expected "+u.length+", got "+arguments.length);return arguments[r].apply(null,n)},match:function(e){var t=M.keys(e);if(a.length!==t.length)throw new Error("Wrong number of arguments to match. Expected: "+a.join(",")+"\nActual: "+t.join(","));if(!E.forall(a,function(e){return E.contains(t,e)}))throw new Error("Not all branches were specified when using match. Specified: "+t.join(", ")+"\nRequired: "+a.join(", "));return e[o].apply(null,n)},log:function(e){console.log(e,{constructors:a,constructor:o,params:n})}}}}),n},gr=mr([{none:[]},{multiple:["elements"]},{single:["selection"]}]),pr={cata:function(e,t,n,r){return e.fold(t,n,r)},none:gr.none,multiple:gr.multiple,single:gr.single},hr=function(e,t){return pr.cata(t.get(),y.constant([]),y.identity,y.constant([e]))},vr=function(n,e){return pr.cata(e.get(),x.none,function(t,e){return 0===t.length?x.none():cr(n,dr.firstSelectedSelector(),dr.lastSelectedSelector()).bind(function(e){return 1<t.length?x.some({bounds:y.constant(e),cells:y.constant(t)}):x.none()})},x.none)},br=function(e,t){var n=hr(e,t);return 0<n.length&&E.forall(n,function(e){return vt.has(e,"rowspan")&&1<parseInt(vt.get(e,"rowspan"),10)||vt.has(e,"colspan")&&1<parseInt(vt.get(e,"colspan"),10)})?x.some(n):x.none()},wr=hr,yr=function(e){return{element:y.constant(e),mergable:x.none,unmergable:x.none,selection:y.constant([e])}},xr=F.immutable("element","clipboard","generators"),Sr={noMenu:yr,forMenu:function(e,t,n){return{element:y.constant(n),mergable:y.constant(vr(t,e)),unmergable:y.constant(br(n,e)),selection:y.constant(wr(n,e))}},notCell:function(e){return yr(e)},paste:xr,pasteRows:function(e,t,n,r,o){return{element:y.constant(n),mergable:x.none,unmergable:x.none,selection:y.constant(wr(n,e)),clipboard:y.constant(r),generators:y.constant(o)}}},Cr={registerEvents:function(a,e,c,l){a.on("BeforeGetContent",function(n){!0===n.selection&&pr.cata(e.get(),y.noop,function(e){var t;n.preventDefault(),(t=e,zt.table(t[0]).map(mn).map(function(e){return[cn(e,dr.attributeSelector())]})).each(function(e){n.content=E.map(e,function(e){return t=e,a.selection.serializer.serialize(t.dom(),{});var t}).join("")})},y.noop)}),a.on("BeforeSetContent",function(u){!0===u.selection&&!0===u.paste&&x.from(a.dom.getParent(a.selection.getStart(),"th,td")).each(function(e){var i=Y.fromDom(e);zt.table(i).bind(function(t){var e=E.filter(Nn(u.content),function(e){return"meta"!==dt.name(e)});if(1===e.length&&"table"===dt.name(e[0])){u.preventDefault();var n=Y.fromDom(a.getDoc()),r=kn(n),o=Sr.paste(i,e[0],r);c.pasteCells(t,o).each(function(e){a.selection.setRng(e),a.focus(),l.clear(t)})}})})})}};function Rr(r,o){var e=function(e){var t=o(e);if(t<=0||null===t){var n=Zt.get(e,r);return parseFloat(n)||0}return t},i=function(o,e){return E.foldl(e,function(e,t){var n=Zt.get(o,t),r=n===undefined?0:parseInt(n,10);return isNaN(r)?e:e+r},0)};return{set:function(e,t){if(!g.isNumber(t)&&!t.match(/^[0-9]+$/))throw r+".set accepts only positive integer values. Value was "+t;var n=e.dom();Xt.isSupported(n)&&(n.style[r]=t+"px")},get:e,getOuter:e,aggregate:i,max:function(e,t,n){var r=i(e,n);return r<t?t-r:0}}}var Tr=Rr("height",function(e){return yt.inBody(e)?e.dom().getBoundingClientRect().height:e.dom().offsetHeight}),Ar=function(e){return Tr.get(e)},Dr=function(e){return Tr.getOuter(e)},kr=Rr("width",function(e){return e.dom().offsetWidth}),Nr=function(e){return kr.get(e)},Er=function(e){return kr.getOuter(e)},Or=Ge.detect(),Br=function(e,t,n){return r=Zt.get(e,t),o=n,i=parseFloat(r),isNaN(i)?o:i;var r,o,i},Pr=function(e){return Or.browser.isIE()||Or.browser.isEdge()?(n=Br(t=e,"padding-top",0),r=Br(t,"padding-bottom",0),o=Br(t,"border-top-width",0),i=Br(t,"border-bottom-width",0),u=t.dom().getBoundingClientRect().height,"border-box"===Zt.get(t,"box-sizing")?u:u-n-r-(o+i)):Br(e,"height",Ar(e));var t,n,r,o,i,u},Ir=/(\d+(\.\d+)?)(\w|%)*/,Wr=/(\d+(\.\d+)?)%/,Mr=/(\d+(\.\d+)?)px|em/,Lr=function(e,t){Zt.set(e,"height",t+"px")},qr=function(e,t,n,r){var o,i,u,a,c,l=parseInt(e,10);return Fe.endsWith(e,"%")&&"table"!==dt.name(t)?(o=t,i=l,u=n,a=r,c=zt.table(o).map(function(e){var t=u(e);return Math.floor(i/100*t)}).getOr(i),a(o,c),c):l},Fr=function(e){var t,n=(t=e,Zt.getRaw(t,"height").getOrThunk(function(){return Pr(t)+"px"}));return n?qr(n,e,Ar,Lr):Ar(e)},jr=function(e,t){return vt.has(e,t)?parseInt(vt.get(e,t),10):1},zr=function(e){return Zt.getRaw(e,"width").fold(function(){return x.from(vt.get(e,"width"))},function(e){return x.some(e)})},_r=function(e,t){return e/t.pixelWidth()*100},Hr={percentageBasedSizeRegex:y.constant(Wr),pixelBasedSizeRegex:y.constant(Mr),setPixelWidth:function(e,t){Zt.set(e,"width",t+"px")},setPercentageWidth:function(e,t){Zt.set(e,"width",t+"%")},setHeight:Lr,getPixelWidth:function(t,n){return zr(t).fold(function(){var e=Nr(t);return parseInt(e,10)},function(e){return function(e,t,n){if(Mr.test(t)){var r=Mr.exec(t);return parseInt(r[1],10)}if(Wr.test(t)){var o=Wr.exec(t),i=parseFloat(o[1]);return i/100*n.pixelWidth()}var u=Nr(e);return parseInt(u,10)}(t,e,n)})},getPercentageWidth:function(n,r){return zr(n).fold(function(){var e=Nr(n),t=parseInt(e,10);return _r(t,r)},function(e){return function(e,t,n){if(Wr.test(t)){var r=Wr.exec(t);return parseFloat(r[1])}var o=Nr(e),i=parseInt(o,10);return _r(i,n)}(n,e,r)})},getGenericWidth:function(e){return zr(e).bind(function(e){if(Ir.test(e)){var t=Ir.exec(e);return x.some({width:y.constant(t[1]),unit:y.constant(t[3])})}return x.none()})},setGenericWidth:function(e,t,n){Zt.set(e,"width",t+n)},getHeight:function(e){return n="rowspan",Fr(t=e)/jr(t,n);var t,n},getRawWidth:zr},Vr=function(n,r){Hr.getGenericWidth(n).each(function(e){var t=e.width()/2;Hr.setGenericWidth(n,t,e.unit()),Hr.setGenericWidth(r,t,e.unit())})},Ur=function(e,t){var n=t||Y.fromDom(document.documentElement);return Pt.ancestor(e,y.curry(Ke.eq,n)).isSome()},Gr=function(e){var t=e.dom();return t===t.window?e:dt.isDocument(e)?t.defaultView||t.parentWindow:null},Xr=function(n,r){return{left:y.constant(n),top:y.constant(r),translate:function(e,t){return Xr(n+e,r+t)}}},Yr=function(e,t){return e!==undefined?e:t!==undefined?t:0},Kr=function(e){var t,n=e.dom(),r=n.ownerDocument,o=r.body,i=Y.fromDom(r.documentElement);return o===n?Xr(o.offsetLeft,o.offsetTop):Ur(e,i)?(t=n.getBoundingClientRect(),Xr(t.left,t.top)):Xr(0,0)},$r=function(e){var t=e.dom().ownerDocument,n=t.body,r=Gr(Y.fromDom(t)),o=t.documentElement,i=Yr(r.pageYOffset,o.scrollTop),u=Yr(r.pageXOffset,o.scrollLeft),a=Yr(o.clientTop,n.clientTop),c=Yr(o.clientLeft,n.clientLeft);return Kr(e).translate(u-c,i-a)},Jr=F.immutable("row","y"),Qr=F.immutable("col","x"),Zr=function(e){return $r(e).left()+Er(e)},eo=function(e){return $r(e).left()},to=function(e,t){return Qr(e,eo(t))},no=function(e,t){return Qr(e,Zr(t))},ro=function(e){return $r(e).top()},oo=function(n,t,r){if(0===r.length)return[];var e=E.map(r.slice(1),function(e,t){return e.map(function(e){return n(t,e)})}),o=r[r.length-1].map(function(e){return t(r.length-1,e)});return e.concat([o])},io={delta:y.identity,positions:y.curry(oo,function(e,t){return Jr(e,ro(t))},function(e,t){return Jr(e,ro(t)+Dr(t))}),edge:ro},uo={delta:y.identity,edge:eo,positions:y.curry(oo,to,no)},ao={height:io,rtl:{delta:function(e,t){return-e},edge:Zr,positions:y.curry(oo,no,to)},ltr:uo},co={ltr:ao.ltr,rtl:ao.rtl};function lo(t){var n=function(e){return t(e).isRtl()?co.rtl:co.ltr};return{delta:function(e,t){return n(t).delta(e,t)},edge:function(e){return n(e).edge(e)},positions:function(e,t){return n(t).positions(e,t)}}}var so=function(e){var t=_t(e);return Gt.generate(t).grid()},fo=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return fo(n())}}},mo=function(e,t){return go(e,t,{validate:g.isFunction,label:"function"})},go=function(r,o,i){if(0===o.length)throw new Error("You must specify at least one required field.");return q.validateStrArr("required",o),q.checkDupes(o),function(t){var n=M.keys(t);E.forall(o,function(e){return E.contains(n,e)})||q.reqMessage(o,n),r(o,n);var e=E.filter(o,function(e){return!i.validate(t[e],e)});return 0<e.length&&q.invalidTypeMessage(e,i.label),t}},po=y.noop,ho={exactly:y.curry(mo,function(t,e){var n=E.filter(e,function(e){return!E.contains(t,e)});0<n.length&&q.unsuppMessage(n)}),ensure:y.curry(mo,po),ensureWith:y.curry(go,po)},vo=function(e){var t=vt.has(e,"colspan")?parseInt(vt.get(e,"colspan"),10):1,n=vt.has(e,"rowspan")?parseInt(vt.get(e,"rowspan"),10):1;return{element:y.constant(e),colspan:y.constant(t),rowspan:y.constant(n)}},bo=ho.exactly(["cell","row","replace","gap"]),wo=function(r,e){bo(r);var n=fo(x.none()),o=e!==undefined?e:vo,i=function(e){var t,n=o(e);return t=n,r.cell(t)},u=function(e){var t=i(e);return n.get().isNone()&&n.set(x.some(t)),a=x.some({item:e,replacement:t}),t},a=x.none();return{getOrInit:function(t,n){return a.fold(function(){return u(t)},function(e){return n(t,e.item)?e.replacement:u(t)})},cursor:n.get}},yo=function(o,a){return function(n){var r=fo(x.none());bo(n);var i=[],u=function(e){var t=n.replace(e,a,{scope:o});return i.push({item:e,sub:t}),r.get().isNone()&&r.set(x.some(t)),t};return{replaceOrInit:function(t,n){return(r=t,o=n,E.find(i,function(e){return o(e.item,r)})).fold(function(){return u(t)},function(e){return n(t,e.item)?e.sub:u(t)});var r,o},cursor:r.get}}},xo=function(n){bo(n);var e=fo(x.none());return{combine:function(t){return e.get().isNone()&&e.set(x.some(t)),function(){var e=n.cell({element:y.constant(t),colspan:y.constant(1),rowspan:y.constant(1)});return Zt.remove(e,"width"),Zt.remove(t,"width"),e}},cursor:e.get}},So=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],Co=function(e,t){var n=e.property().name(t);return E.contains(So,n)},Ro=function(e,t){return E.contains(["br","img","hr","input"],e.property().name(t))},To=Co,Ao=function(e,t){var n=e.property().name(t);return E.contains(["ol","ul"],n)},Do=Ro,ko=On(),No=function(e){return To(ko,e)},Eo=function(e){return Ao(ko,e)},Oo=function(e){return Do(ko,e)},Bo=function(e){var t,i=function(e){return"br"===dt.name(e)},r=function(o){return Sn.last(o).bind(function(n){var e,r=(e=n,rt.nextSibling(e).map(function(e){return!!No(e)||(Oo(e)?"img"!==dt.name(e):void 0)}).getOr(!1));return rt.parent(n).map(function(e){return!0===r||(t=e,"li"===dt.name(t)||Pt.ancestor(t,Eo).isSome())||i(n)||No(e)&&!Ke.eq(o,e)?[]:[Y.fromTag("br")];var t})}).getOr([])},n=0===(t=E.bind(e,function(e){var t,n=rt.children(e);return t=n,E.forall(t,function(e){return i(e)||dt.isText(e)&&0===hn.get(e).trim().length})?[]:n.concat(r(e))})).length?[Y.fromTag("br")]:t;un.empty(e[0]),rn.append(e[0],n)},Po=function(u){return function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var o=e[r];for(var i in o)o.hasOwnProperty(i)&&(n[i]=u(n[i],o[i]))}return n}},Io=Po(function(e,t){return g.isObject(e)&&g.isObject(t)?Io(e,t):t}),Wo=Po(function(e,t){return t}),Mo={deepMerge:Io,merge:Wo},Lo=function(e){for(var t=[],n=function(e){t.push(e)},r=0;r<e.length;r++)e[r].each(n);return t},qo=function(e,t){for(var n=0;n<e.length;n++){var r=t(e[n],n);if(r.isSome())return r}return x.none()},Fo=function(e,t){return G.rowcells(t,e.section())},jo=function(e,t){return e.cells()[t]},zo={addCell:function(e,t,n){var r=e.cells(),o=r.slice(0,t),i=r.slice(t),u=o.concat([n]).concat(i);return Fo(e,u)},setCells:Fo,mutateCell:function(e,t,n){e.cells()[t]=n},getCell:jo,getCellElement:function(e,t){return jo(e,t).element()},mapCells:function(e,t){var n=e.cells(),r=E.map(n,t);return G.rowcells(r,e.section())},cellLength:function(e){return e.cells().length}},_o=function(e,t){if(0===e.length)return 0;var n=e[0];return E.findIndex(e,function(e){return!t(n.element(),e.element())}).fold(function(){return e.length},function(e){return e})},Ho=function(e,t,n,r){var o,i,u,a,c=(o=e,i=t,o[i]).cells().slice(n),l=_o(c,r),s=(u=e,a=n,E.map(u,function(e){return zo.getCell(e,a)})).slice(t),f=_o(s,r);return{colspan:y.constant(l),rowspan:y.constant(f)}},Vo=function(o,i){var u=E.map(o,function(e,t){return E.map(e.cells(),function(e,t){return!1})});return E.map(o,function(e,r){var t=E.bind(e.cells(),function(e,t){if(!1===u[r][t]){var n=Ho(o,r,t,i);return function(e,t,n,r){for(var o=e;o<e+n;o++)for(var i=t;i<t+r;i++)u[o][i]=!0}(r,t,n.rowspan(),n.colspan()),[G.detailnew(e.element(),n.rowspan(),n.colspan(),e.isNew())]}return[]});return G.rowdetails(t,e.section())})},Uo=function(e,t,n){for(var r=[],o=0;o<e.grid().rows();o++){for(var i=[],u=0;u<e.grid().columns();u++){var a=Gt.getAt(e,o,u).map(function(e){return G.elementnew(e.element(),n)}).getOrThunk(function(){return G.elementnew(t.gap(),!0)});i.push(a)}var c=G.rowcells(i,e.all()[o].section());r.push(c)}return r},Go=function(e,t,n,r){n===r?vt.remove(e,t):vt.set(e,t,n)},Xo=function(o,e){var i=[],u=[],t=function(e,t){var n;0<e.length?function(e,t){var n=Wt.child(o,t).getOrThunk(function(){var e=Y.fromTag(t,rt.owner(o).dom());return nn.append(o,e),e});un.empty(n);var r=E.map(e,function(e){e.isNew()&&i.push(e.element());var t=e.element();return un.empty(t),E.each(e.cells(),function(e){e.isNew()&&u.push(e.element()),Go(e.element(),"colspan",e.colspan(),1),Go(e.element(),"rowspan",e.rowspan(),1),nn.append(t,e.element())}),t});rn.append(n,r)}(e,t):(n=t,Wt.child(o,n).bind(un.remove))},n=[],r=[],a=[];return E.each(e,function(e){switch(e.section()){case"thead":n.push(e);break;case"tbody":r.push(e);break;case"tfoot":a.push(e)}}),t(n,"thead"),t(r,"tbody"),t(a,"tfoot"),{newRows:y.constant(i),newCells:y.constant(u)}},Yo=function(e){return E.map(e,function(e){var n=dn(e.element());return E.each(e.cells(),function(e){var t=mn(e.element());Go(t,"colspan",e.colspan(),1),Go(t,"rowspan",e.rowspan(),1),nn.append(n,t)}),n})},Ko=function(e,t){for(var n=[],r=0;r<e;r++)n.push(t(r));return n},$o=function(e,t){for(var n=[],r=e;r<t;r++)n.push(r);return n},Jo=function(t,n){if(n<0||n>=t.length-1)return x.none();var e=t[n].fold(function(){var e=E.reverse(t.slice(0,n));return qo(e,function(e,t){return e.map(function(e){return{value:e,delta:t+1}})})},function(e){return x.some({value:e,delta:0})}),r=t[n+1].fold(function(){var e=t.slice(n+1);return qo(e,function(e,t){return e.map(function(e){return{value:e,delta:t+1}})})},function(e){return x.some({value:e,delta:1})});return e.bind(function(n){return r.map(function(e){var t=e.delta+n.delta;return Math.abs(e.value-n.value)/t})})},Qo=function(e,t,n){var r=e();return E.find(r,t).orThunk(function(){return x.from(r[0]).orThunk(n)}).map(function(e){return e.element()})},Zo=function(n){var e=n.grid(),t=$o(0,e.columns()),r=$o(0,e.rows());return E.map(t,function(t){return Qo(function(){return E.bind(r,function(e){return Gt.getAt(n,e,t).filter(function(e){return e.column()===t}).fold(y.constant([]),function(e){return[e]})})},function(e){return 1===e.colspan()},function(){return Gt.getAt(n,0,t)})})},ei=function(n){var e=n.grid(),t=$o(0,e.rows()),r=$o(0,e.columns());return E.map(t,function(t){return Qo(function(){return E.bind(r,function(e){return Gt.getAt(n,t,e).filter(function(e){return e.row()===t}).fold(y.constant([]),function(e){return[e]})})},function(e){return 1===e.rowspan()},function(){return Gt.getAt(n,t,0)})})},ti=function(e,t,n,r,o){var i=Y.fromTag("div");return Zt.setAll(i,{position:"absolute",left:t-r/2+"px",top:n+"px",height:o+"px",width:r+"px"}),vt.setAll(i,{"data-column":e,role:"presentation"}),i},ni=function(e,t,n,r,o){var i=Y.fromTag("div");return Zt.setAll(i,{position:"absolute",left:t+"px",top:n-o/2+"px",height:o+"px",width:r+"px"}),vt.setAll(i,{"data-row":e,role:"presentation"}),i},ri=function(e){var t=e.replace(/\./g,"-");return{resolve:function(e){return t+"-"+e}}},oi={resolve:ri("ephox-snooker").resolve},ii=function(e,t){var n=vt.get(e,t);return n===undefined||""===n?[]:n.split(" ")},ui=ii,ai=function(e,t,n){var r=ii(e,t).concat([n]);vt.set(e,t,r.join(" "))},ci=function(e,t,n){var r=E.filter(ii(e,t),function(e){return e!==n});0<r.length?vt.set(e,t,r.join(" ")):vt.remove(e,t)},li=function(e){return ui(e,"class")},si=function(e,t){return ai(e,"class",t)},fi=function(e,t){return ci(e,"class",t)},di=li,mi=si,gi=fi,pi=function(e,t){E.contains(li(e),t)?fi(e,t):si(e,t)},hi=function(e){return e.dom().classList!==undefined},vi=function(e,t){return hi(e)&&e.dom().classList.contains(t)},bi={add:function(e,t){hi(e)?e.dom().classList.add(t):mi(e,t)},remove:function(e,t){var n;hi(e)?e.dom().classList.remove(t):gi(e,t),0===(hi(n=e)?n.dom().classList:di(n)).length&&vt.remove(n,"class")},toggle:function(e,t){return hi(e)?e.dom().classList.toggle(t):pi(e,t)},toggler:function(e,t){var n,r,o,i,u,a,c=hi(e),l=e.dom().classList;return n=function(){c?l.remove(t):gi(e,t)},r=function(){c?l.add(t):mi(e,t)},o=vi(e,t),i=o||!1,{on:u=function(){r(),i=!0},off:a=function(){n(),i=!1},toggle:function(){(i?a:u)()},isOn:function(){return i}}},has:vi},wi=oi.resolve("resizer-bar"),yi=oi.resolve("resizer-rows"),xi=oi.resolve("resizer-cols"),Si=function(e){var t=Ct.descendants(e.parent(),"."+wi);E.each(t,un.remove)},Ci=function(n,e,r){var o=n.origin();E.each(e,function(e,t){e.each(function(e){var t=r(o,e);bi.add(t,wi),nn.append(n.parent(),t)})})},Ri=function(e,t,n,r,o,i){var u,a,c,l,s=$r(t),f=0<n.length?o.positions(n,t):[];u=e,a=f,c=s,l=Er(t),Ci(u,a,function(e,t){var n=ni(t.row(),c.left()-e.left(),t.y()-e.top(),l,7);return bi.add(n,yi),n});var d,m,g,p,h=0<r.length?i.positions(r,t):[];d=e,m=h,g=s,p=Dr(t),Ci(d,m,function(e,t){var n=ti(t.col(),t.x()-e.left(),g.top()-e.top(),7,p);return bi.add(n,xi),n})},Ti=function(e,t){var n=Ct.descendants(e.parent(),"."+wi);E.each(n,t)},Ai={refresh:function(e,t,n,r){Si(e);var o=_t(t),i=Gt.generate(o),u=ei(i),a=Zo(i);Ri(e,t,u,a,n,r)},hide:function(e){Ti(e,function(e){Zt.set(e,"display","none")})},show:function(e){Ti(e,function(e){Zt.set(e,"display","block")})},destroy:Si,isRowBar:function(e){return bi.has(e,yi)},isColBar:function(e){return bi.has(e,xi)}},Di=function(e,r){return E.map(e,function(e){var t,n=(t=e.details(),qo(t,function(e){return rt.parent(e.element()).map(function(e){var t=rt.parent(e).isNone();return G.elementnew(e,t)})}).getOrThunk(function(){return G.elementnew(r.row(),!0)}));return G.rowdatanew(n.element(),e.details(),e.section(),n.isNew())})},ki=function(e,t){var n=Vo(e,Ke.eq);return Di(n,t)},Ni=function(e,t){var n=E.flatten(E.map(e.all(),function(e){return e.cells()}));return E.find(n,function(e){return Ke.eq(t,e.element())})},Ei=function(a,c,l,s,f){return function(n,r,e,o,i){var t=_t(r),u=Gt.generate(t);return c(u,e).map(function(e){var t=Uo(u,o,!1),n=a(t,e,Ke.eq,f(o)),r=ki(n.grid(),o);return{grid:y.constant(r),cursor:n.cursor}}).fold(function(){return x.none()},function(e){var t=Xo(r,e.grid());return l(r,e.grid(),i),s(r),Ai.refresh(n,r,ao.height,i),x.some({cursor:e.cursor,newRows:t.newRows,newCells:t.newCells})})}},Oi=ki,Bi=function(t,e){return zt.cell(e.element()).bind(function(e){return Ni(t,e)})},Pi=function(t,e){var n=E.map(e.selection(),function(e){return zt.cell(e).bind(function(e){return Ni(t,e)})}),r=Lo(n);return 0<r.length?x.some(r):x.none()},Ii=function(t,n){return zt.cell(n.element()).bind(function(e){return Ni(t,e).map(function(e){return Mo.merge(e,{generators:n.generators,clipboard:n.clipboard})})})},Wi=function(t,e){var n=E.map(e.selection(),function(e){return zt.cell(e).bind(function(e){return Ni(t,e)})}),r=Lo(n);return 0<r.length?x.some(Mo.merge({cells:r},{generators:e.generators,clipboard:e.clipboard})):x.none()},Mi=function(e,t){return t.mergable()},Li=function(e,t){return t.unmergable()},qi=function(n){return{is:function(e){return n===e},isValue:y.always,isError:y.never,getOr:y.constant(n),getOrThunk:y.constant(n),getOrDie:y.constant(n),or:function(e){return qi(n)},orThunk:function(e){return qi(n)},fold:function(e,t){return t(n)},map:function(e){return qi(e(n))},each:function(e){e(n)},bind:function(e){return e(n)},exists:function(e){return e(n)},forall:function(e){return e(n)},toOption:function(){return x.some(n)}}},Fi=function(n){return{is:y.never,isValue:y.never,isError:y.always,getOr:y.identity,getOrThunk:function(e){return e()},getOrDie:function(){return y.die(String(n))()},or:function(e){return e},orThunk:function(e){return e()},fold:function(e,t){return e(n)},map:function(e){return Fi(n)},each:y.noop,bind:function(e){return Fi(n)},exists:y.never,forall:y.always,toOption:x.none}},ji={value:qi,error:Fi},zi=function(e,t){return E.map(e,function(){return G.elementnew(t.cell(),!0)})},_i=function(t,e,n){return t.concat(Ko(e,function(e){return zo.setCells(t[t.length-1],zi(t[t.length-1].cells(),n))}))},Hi=function(e,t,n){return E.map(e,function(e){return zo.setCells(e,e.cells().concat(zi($o(0,t),n)))})},Vi=function(e,t,n){if(e.row()>=t.length||e.column()>zo.cellLength(t[0]))return ji.error("invalid start address out of table bounds, row: "+e.row()+", column: "+e.column());var r=t.slice(e.row()),o=r[0].cells().slice(e.column()),i=zo.cellLength(n[0]),u=n.length;return ji.value({rowDelta:y.constant(r.length-u),colDelta:y.constant(o.length-i)})},Ui=function(e,t){var n=zo.cellLength(e[0]),r=zo.cellLength(t[0]);return{rowDelta:y.constant(0),colDelta:y.constant(n-r)}},Gi=function(e,t,n){var r=t.colDelta()<0?Hi:y.identity;return(t.rowDelta()<0?_i:y.identity)(r(e,Math.abs(t.colDelta()),n),Math.abs(t.rowDelta()),n)},Xi=function(e,t,n,r){if(0===e.length)return e;for(var o=t.startRow();o<=t.finishRow();o++)for(var i=t.startCol();i<=t.finishCol();i++)zo.mutateCell(e[o],i,G.elementnew(r(),!1));return e},Yi=function(e,t,n,r){for(var o=!0,i=0;i<e.length;i++)for(var u=0;u<zo.cellLength(e[0]);u++){var a=n(zo.getCellElement(e[i],u),t);!0===a&&!1===o?zo.mutateCell(e[i],u,G.elementnew(r(),!0)):!0===a&&(o=!1)}return e},Ki=function(i,u,a,c){if(0<u&&u<i.length){var e=i[u-1].cells(),t=(n=e,r=a,E.foldl(n,function(e,t){return E.exists(e,function(e){return r(e.element(),t.element())})?e:e.concat([t])},[]));E.each(t,function(e){for(var t=x.none(),n=u;n<i.length;n++)for(var r=0;r<zo.cellLength(i[0]);r++){var o=i[n].cells()[r];a(o.element(),e.element())&&(t.isNone()&&(t=x.some(c())),t.each(function(e){zo.mutateCell(i[n],r,G.elementnew(e,!0))}))}})}var n,r;return i},$i=function(n,r,o,i,u){return Vi(n,r,o).map(function(e){var t=Gi(r,e,i);return function(e,t,n,r,o){for(var i,u,a,c,l,s,f,d=e.row(),m=e.column(),g=d+n.length,p=m+zo.cellLength(n[0]),h=d;h<g;h++)for(var v=m;v<p;v++){i=t,u=h,a=v,c=o,s=l=void 0,l=zo.getCell(i[u],a),s=y.curry(c,l.element()),f=i[u],1<i.length&&1<zo.cellLength(f)&&(0<a&&s(zo.getCellElement(f,a-1))||a<f.length-1&&s(zo.getCellElement(f,a+1))||0<u&&s(zo.getCellElement(i[u-1],a))||u<i.length-1&&s(zo.getCellElement(i[u+1],a)))&&Yi(t,zo.getCellElement(t[h],v),o,r.cell);var b=zo.getCellElement(n[h-d],v-m),w=r.replace(b);zo.mutateCell(t[h],v,G.elementnew(w,!0))}return t}(n,t,o,i,u)})},Ji=function(e,t,n,r,o){Ki(t,e,o,r.cell);var i=Ui(n,t),u=Gi(n,i,r),a=Ui(t,u),c=Gi(t,a,r);return c.slice(0,e).concat(u).concat(c.slice(e,c.length))},Qi=function(n,r,e,o,i){var t=n.slice(0,r),u=n.slice(r),a=zo.mapCells(n[e],function(e,t){return 0<r&&r<n.length&&o(zo.getCellElement(n[r-1],t),zo.getCellElement(n[r],t))?zo.getCell(n[r],t):G.elementnew(i(e.element(),o),!0)});return t.concat([a]).concat(u)},Zi=function(e,n,r,o,i){return E.map(e,function(e){var t=0<n&&n<zo.cellLength(e)&&o(zo.getCellElement(e,n-1),zo.getCellElement(e,n))?zo.getCell(e,n):G.elementnew(i(zo.getCellElement(e,r),o),!0);return zo.addCell(e,n,t)})},eu=function(e,r,o,i,u){var a=o+1;return E.map(e,function(e,t){var n=t===r?G.elementnew(u(zo.getCellElement(e,o),i),!0):zo.getCell(e,o);return zo.addCell(e,a,n)})},tu=function(e,t,n,r,o){var i=t+1,u=e.slice(0,i),a=e.slice(i),c=zo.mapCells(e[t],function(e,t){return t===n?G.elementnew(o(e.element(),r),!0):e});return u.concat([c]).concat(a)},nu=function(e,t,n){return e.slice(0,t).concat(e.slice(n+1))},ru=function(e,n,r){var t=E.map(e,function(e){var t=e.cells().slice(0,n).concat(e.cells().slice(r+1));return G.rowcells(t,e.section())});return E.filter(t,function(e){return 0<e.cells().length})},ou=function(e,n,r,o){return E.map(e,function(e){return zo.mapCells(e,function(e){return t=e,E.exists(n,function(e){return r(t.element(),e.element())})?G.elementnew(o(e.element(),r),!0):e;var t})})},iu=function(e,t,n,r){return zo.getCellElement(e[t],n)!==undefined&&0<t&&r(zo.getCellElement(e[t-1],n),zo.getCellElement(e[t],n))},uu=function(e,t,n){return 0<t&&n(zo.getCellElement(e,t-1),zo.getCellElement(e,t))},au=function(n,r,o,e){var t=E.bind(n,function(e,t){return iu(n,t,r,o)||uu(e,r,o)?[]:[zo.getCell(e,r)]});return ou(n,t,o,e)},cu=function(n,r,o,e){var i=n[r],t=E.bind(i.cells(),function(e,t){return iu(n,r,t,o)||uu(i,t,o)?[]:[e]});return ou(n,t,o,e)},lu=function(e){return{fold:e}},su=function(){return lu(function(e,t,n,r,o){return e()})},fu=function(i){return lu(function(e,t,n,r,o){return t(i)})},du=function(i,u){return lu(function(e,t,n,r,o){return n(i,u)})},mu=function(i,u,a){return lu(function(e,t,n,r,o){return r(i,u,a)})},gu=function(i,u){return lu(function(e,t,n,r,o){return o(i,u)})},pu=function(e,t,i,u){var n,r,a=e.slice(0),o=(r=t,0===(n=e).length?su():1===n.length?fu(0):0===r?du(0,1):r===n.length-1?gu(r-1,r):0<r&&r<n.length-1?mu(r-1,r,r+1):su()),c=function(e){return E.map(e,y.constant(0))},l=y.constant(c(a)),s=function(e,t){if(0<=i){var n=Math.max(u.minCellWidth(),a[t]-i);return c(a.slice(0,e)).concat([i,n-a[t]]).concat(c(a.slice(t+1)))}var r=Math.max(u.minCellWidth(),a[e]+i),o=a[e]-r;return c(a.slice(0,e)).concat([r-a[e],o]).concat(c(a.slice(t+1)))},f=s;return o.fold(l,function(e){return u.singleColumnWidth(a[e],i)},f,function(e,t,n){return s(t,n)},function(e,t){if(0<=i)return c(a.slice(0,t)).concat([i]);var n=Math.max(u.minCellWidth(),a[t]+i);return c(a.slice(0,t)).concat([n-a[t]])})},hu=function(e,t){return vt.has(e,t)&&1<parseInt(vt.get(e,t),10)},vu={hasColspan:function(e){return hu(e,"colspan")},hasRowspan:function(e){return hu(e,"rowspan")},minWidth:y.constant(10),minHeight:y.constant(10),getInt:function(e,t){return parseInt(Zt.get(e,t),10)}},bu=function(e,t,n){return Zt.getRaw(e,t).fold(function(){return n(e)+"px"},function(e){return e})},wu=function(e){return bu(e,"width",Hr.getPixelWidth)},yu=function(e){return bu(e,"height",Hr.getHeight)},xu=function(e,t,n,r,o){var i=Zo(e),u=E.map(i,function(e){return e.map(t.edge)});return E.map(i,function(e,t){return e.filter(y.not(vu.hasColspan)).fold(function(){var e=Jo(u,t);return r(e)},function(e){return n(e,o)})})},Su=function(e){return e.map(function(e){return e+"px"}).getOr("")},Cu=function(e,t,n,r){var o=ei(e),i=E.map(o,function(e){return e.map(t.edge)});return E.map(o,function(e,t){return e.filter(y.not(vu.hasRowspan)).fold(function(){var e=Jo(i,t);return r(e)},function(e){return n(e)})})},Ru={getRawWidths:function(e,t){return xu(e,t,wu,Su)},getPixelWidths:function(e,t,n){return xu(e,t,Hr.getPixelWidth,function(e){return e.getOrThunk(n.minCellWidth)},n)},getPercentageWidths:function(e,t,n){return xu(e,t,Hr.getPercentageWidth,function(e){return e.fold(function(){return n.minCellWidth()},function(e){return e/n.pixelWidth()*100})},n)},getPixelHeights:function(e,t){return Cu(e,t,Hr.getHeight,function(e){return e.getOrThunk(vu.minHeight)})},getRawHeights:function(e,t){return Cu(e,t,yu,Su)}},Tu=function(e,t,n){for(var r=0,o=e;o<t;o++)r+=n[o]!==undefined?n[o]:0;return r},Au=function(e,n){var t=Gt.justCells(e);return E.map(t,function(e){var t=Tu(e.column(),e.column()+e.colspan(),n);return{element:e.element,width:y.constant(t),colspan:e.colspan}})},Du=function(e,n){var t=Gt.justCells(e);return E.map(t,function(e){var t=Tu(e.row(),e.row()+e.rowspan(),n);return{element:e.element,height:y.constant(t),rowspan:e.rowspan}})},ku=function(e,n){return E.map(e.all(),function(e,t){return{element:e.element,height:y.constant(n[t])}})},Nu=function(e){var t=parseInt(e,10),n=y.identity;return{width:y.constant(t),pixelWidth:y.constant(t),getWidths:Ru.getPixelWidths,getCellDelta:n,singleColumnWidth:function(e,t){return[Math.max(vu.minWidth(),e+t)-e]},minCellWidth:vu.minWidth,setElementWidth:Hr.setPixelWidth,setTableWidth:function(e,t,n){var r=E.foldr(t,function(e,t){return e+t},0);Hr.setPixelWidth(e,r)}}},Eu=function(e,t){if(Hr.percentageBasedSizeRegex().test(t)){var n=Hr.percentageBasedSizeRegex().exec(t);return o=n[1],i=e,u=parseFloat(o),a=Nr(i),{width:y.constant(u),pixelWidth:y.constant(a),getWidths:Ru.getPercentageWidths,getCellDelta:function(e){return e/a*100},singleColumnWidth:function(e,t){return[100-e]},minCellWidth:function(){return vu.minWidth()/a*100},setElementWidth:Hr.setPercentageWidth,setTableWidth:function(e,t,n){var r=u+n;Hr.setPercentageWidth(e,r)}}}if(Hr.pixelBasedSizeRegex().test(t)){var r=Hr.pixelBasedSizeRegex().exec(t);return Nu(r[1])}var o,i,u,a,c=Nr(e);return Nu(c)},Ou=function(t){return Hr.getRawWidth(t).fold(function(){var e=Nr(t);return Nu(e)},function(e){return Eu(t,e)})},Bu=function(e){return Gt.generate(e)},Pu=function(e){var t=_t(e);return Bu(t)},Iu={adjustWidth:function(e,t,n,r){var o=Ou(e),i=o.getCellDelta(t),u=Pu(e),a=o.getWidths(u,r,o),c=pu(a,n,i,o),l=E.map(c,function(e,t){return e+a[t]}),s=Au(u,l);E.each(s,function(e){o.setElementWidth(e.element(),e.width())}),n===u.grid().columns()-1&&o.setTableWidth(e,l,i)},adjustHeight:function(e,n,r,t){var o=Pu(e),i=Ru.getPixelHeights(o,t),u=E.map(i,function(e,t){return r===t?Math.max(n+e,vu.minHeight()):e}),a=Du(o,u),c=ku(o,u);E.each(c,function(e){Hr.setHeight(e.element(),e.height())}),E.each(a,function(e){Hr.setHeight(e.element(),e.height())});var l,s=(l=u,E.foldr(l,function(e,t){return e+t},0));Hr.setHeight(e,s)},adjustWidthTo:function(e,t,n){var r=Ou(e),o=Bu(t),i=r.getWidths(o,n,r),u=Au(o,i);E.each(u,function(e){r.setElementWidth(e.element(),e.width())});var a=E.foldr(i,function(e,t){return t+e},0);0<u.length&&r.setElementWidth(e,a)}},Wu=function(e){0===zt.cells(e).length&&un.remove(e)},Mu=F.immutable("grid","cursor"),Lu=function(e,t,n){return qu(e,t,n).orThunk(function(){return qu(e,0,0)})},qu=function(e,t,n){return x.from(e[t]).bind(function(e){return x.from(e.cells()[n]).bind(function(e){return x.from(e.element())})})},Fu=function(e,t,n){return Mu(e,qu(e,t,n))},ju=function(e){return E.foldl(e,function(e,t){return E.exists(e,function(e){return e.row()===t.row()})?e:e.concat([t])},[]).sort(function(e,t){return e.row()-t.row()})},zu=function(e){return E.foldl(e,function(e,t){return E.exists(e,function(e){return e.column()===t.column()})?e:e.concat([t])},[]).sort(function(e,t){return e.column()-t.column()})},_u=function(e,t,n){var r=Ht(e,n),o=Gt.generate(r);return Uo(o,t,!0)},Hu=Iu.adjustWidthTo,Vu={insertRowBefore:Ei(function(e,t,n,r){var o=t.row(),i=t.row(),u=Qi(e,i,o,n,r.getOrInit);return Fu(u,i,t.column())},Bi,y.noop,y.noop,wo),insertRowsBefore:Ei(function(e,t,n,r){var o=t[0].row(),i=t[0].row(),u=ju(t),a=E.foldl(u,function(e,t){return Qi(e,i,o,n,r.getOrInit)},e);return Fu(a,i,t[0].column())},Pi,y.noop,y.noop,wo),insertRowAfter:Ei(function(e,t,n,r){var o=t.row(),i=t.row()+t.rowspan(),u=Qi(e,i,o,n,r.getOrInit);return Fu(u,i,t.column())},Bi,y.noop,y.noop,wo),insertRowsAfter:Ei(function(e,t,n,r){var o=ju(t),i=o[o.length-1].row(),u=o[o.length-1].row()+o[o.length-1].rowspan(),a=E.foldl(o,function(e,t){return Qi(e,u,i,n,r.getOrInit)},e);return Fu(a,u,t[0].column())},Pi,y.noop,y.noop,wo),insertColumnBefore:Ei(function(e,t,n,r){var o=t.column(),i=t.column(),u=Zi(e,i,o,n,r.getOrInit);return Fu(u,t.row(),i)},Bi,Hu,y.noop,wo),insertColumnsBefore:Ei(function(e,t,n,r){var o=zu(t),i=o[0].column(),u=o[0].column(),a=E.foldl(o,function(e,t){return Zi(e,u,i,n,r.getOrInit)},e);return Fu(a,t[0].row(),u)},Pi,Hu,y.noop,wo),insertColumnAfter:Ei(function(e,t,n,r){var o=t.column(),i=t.column()+t.colspan(),u=Zi(e,i,o,n,r.getOrInit);return Fu(u,t.row(),i)},Bi,Hu,y.noop,wo),insertColumnsAfter:Ei(function(e,t,n,r){var o=t[t.length-1].column(),i=t[t.length-1].column()+t[t.length-1].colspan(),u=zu(t),a=E.foldl(u,function(e,t){return Zi(e,i,o,n,r.getOrInit)},e);return Fu(a,t[0].row(),i)},Pi,Hu,y.noop,wo),splitCellIntoColumns:Ei(function(e,t,n,r){var o=eu(e,t.row(),t.column(),n,r.getOrInit);return Fu(o,t.row(),t.column())},Bi,Hu,y.noop,wo),splitCellIntoRows:Ei(function(e,t,n,r){var o=tu(e,t.row(),t.column(),n,r.getOrInit);return Fu(o,t.row(),t.column())},Bi,y.noop,y.noop,wo),eraseColumns:Ei(function(e,t,n,r){var o=zu(t),i=ru(e,o[0].column(),o[o.length-1].column()),u=Lu(i,t[0].row(),t[0].column());return Mu(i,u)},Pi,Hu,Wu,wo),eraseRows:Ei(function(e,t,n,r){var o=ju(t),i=nu(e,o[0].row(),o[o.length-1].row()),u=Lu(i,t[0].row(),t[0].column());return Mu(i,u)},Pi,y.noop,Wu,wo),makeColumnHeader:Ei(function(e,t,n,r){var o=au(e,t.column(),n,r.replaceOrInit);return Fu(o,t.row(),t.column())},Bi,y.noop,y.noop,yo("row","th")),unmakeColumnHeader:Ei(function(e,t,n,r){var o=au(e,t.column(),n,r.replaceOrInit);return Fu(o,t.row(),t.column())},Bi,y.noop,y.noop,yo(null,"td")),makeRowHeader:Ei(function(e,t,n,r){var o=cu(e,t.row(),n,r.replaceOrInit);return Fu(o,t.row(),t.column())},Bi,y.noop,y.noop,yo("col","th")),unmakeRowHeader:Ei(function(e,t,n,r){var o=cu(e,t.row(),n,r.replaceOrInit);return Fu(o,t.row(),t.column())},Bi,y.noop,y.noop,yo(null,"td")),mergeCells:Ei(function(e,t,n,r){var o=t.cells();Bo(o);var i=Xi(e,t.bounds(),n,y.constant(o[0]));return Mu(i,x.from(o[0]))},Mi,y.noop,y.noop,xo),unmergeCells:Ei(function(e,t,n,r){var o=E.foldr(t,function(e,t){return Yi(e,t,n,r.combine(t))},e);return Mu(o,x.from(t[0]))},Li,Hu,y.noop,xo),pasteCells:Ei(function(e,n,t,r){var o,i,u,a,c=(o=n.clipboard(),i=n.generators(),u=_t(o),a=Gt.generate(u),Uo(a,i,!0)),l=G.address(n.row(),n.column());return $i(l,e,c,n.generators(),t).fold(function(){return Mu(e,x.some(n.element()))},function(e){var t=Lu(e,n.row(),n.column());return Mu(e,t)})},Ii,Hu,y.noop,wo),pasteRowsBefore:Ei(function(e,t,n,r){var o=e[t.cells[0].row()],i=t.cells[0].row(),u=_u(t.clipboard(),t.generators(),o),a=Ji(i,e,u,t.generators(),n),c=Lu(a,t.cells[0].row(),t.cells[0].column());return Mu(a,c)},Wi,y.noop,y.noop,wo),pasteRowsAfter:Ei(function(e,t,n,r){var o=e[t.cells[0].row()],i=t.cells[t.cells.length-1].row()+t.cells[t.cells.length-1].rowspan(),u=_u(t.clipboard(),t.generators(),o),a=Ji(i,e,u,t.generators(),n),c=Lu(a,t.cells[0].row(),t.cells[0].column());return Mu(a,c)},Wi,y.noop,y.noop,wo)},Uu=function(e){return Y.fromDom(e.getBody())},Gu={getBody:Uu,getIsRoot:function(t){return function(e){return Ke.eq(e,Uu(t))}},addSizeSuffix:function(e){return/^[0-9]+$/.test(e)&&(e+="px"),e},removePxSuffix:function(e){return e?e.replace(/px$/,""):""}},Xu=function(e){return"rtl"===Zt.get(e,"direction")?"rtl":"ltr"},Yu={onDirection:function(t,n){return function(e){return"rtl"===Xu(e)?n:t}},getDirection:Xu},Ku={isRtl:y.constant(!1)},$u={isRtl:y.constant(!0)},Ju={directionAt:function(e){return"rtl"===Yu.getDirection(e)?$u:Ku}},Qu=["tableprops","tabledelete","|","tableinsertrowbefore","tableinsertrowafter","tabledeleterow","|","tableinsertcolbefore","tableinsertcolafter","tabledeletecol"],Zu={"border-collapse":"collapse",width:"100%"},ea={border:"1"},ta=function(e){return e.getParam("table_tab_navigation",!0,"boolean")},na=function(e){return e.getParam("table_cell_advtab",!0,"boolean")},ra=function(e){return e.getParam("table_row_advtab",!0,"boolean")},oa=function(e){return e.getParam("table_advtab",!0,"boolean")},ia=function(e){return e.getParam("table_style_by_css",!1,"boolean")},ua=function(e){return e.getParam("table_cell_class_list",[],"array")},aa=function(e){return e.getParam("table_row_class_list",[],"array")},ca=function(e){return e.getParam("table_class_list",[],"array")},la=function(e){return!1===e.getParam("table_responsive_width")},sa=function(e,t){return e.fire("newrow",{node:t})},fa=function(e,t){return e.fire("newcell",{node:t})},da=function(f,e){var t,n=function(e){return"table"===dt.name(Gu.getBody(e))},d=(t=f.getParam("table_clone_elements"),g.isString(t)?x.some(t.split(/[ ,]/)):Array.isArray(t)?x.some(t):x.none()),r=function(a,c,l,s){return function(e,t){var n=Ct.descendants(e,"td[data-mce-style],th[data-mce-style]");E.each(n,function(e){vt.remove(e,"data-mce-style")});var r=s(),o=Y.fromDom(f.getDoc()),i=lo(Ju.directionAt),u=Dn(l,o,d);return c(e)?a(r,e,t,u,i).bind(function(e){return E.each(e.newRows(),function(e){sa(f,e.dom())}),E.each(e.newCells(),function(e){fa(f,e.dom())}),e.cursor().map(function(e){var t=f.dom.createRng();return t.setStart(e.dom(),0),t.setEnd(e.dom(),0),t})}):x.none()}};return{deleteRow:r(Vu.eraseRows,function(e){var t=so(e);return!1===n(f)||1<t.rows()},y.noop,e),deleteColumn:r(Vu.eraseColumns,function(e){var t=so(e);return!1===n(f)||1<t.columns()},y.noop,e),insertRowsBefore:r(Vu.insertRowsBefore,y.always,y.noop,e),insertRowsAfter:r(Vu.insertRowsAfter,y.always,y.noop,e),insertColumnsBefore:r(Vu.insertColumnsBefore,y.always,Vr,e),insertColumnsAfter:r(Vu.insertColumnsAfter,y.always,Vr,e),mergeCells:r(Vu.mergeCells,y.always,y.noop,e),unmergeCells:r(Vu.unmergeCells,y.always,y.noop,e),pasteRowsBefore:r(Vu.pasteRowsBefore,y.always,y.noop,e),pasteRowsAfter:r(Vu.pasteRowsAfter,y.always,y.noop,e),pasteCells:r(Vu.pasteCells,y.always,y.noop,e)}},ma=function(e,t,r){var n=_t(e),o=Gt.generate(n);return Pi(o,t).map(function(e){var t=Uo(o,r,!1).slice(e[0].row(),e[e.length-1].row()+e[e.length-1].rowspan()),n=Oi(t,r);return Yo(n)})},ga=tinymce.util.Tools.resolve("tinymce.util.Tools"),pa={applyAlign:function(e,t,n){n&&e.formatter.apply("align"+n,{},t)},applyVAlign:function(e,t,n){n&&e.formatter.apply("valign"+n,{},t)},unApplyAlign:function(t,n){ga.each("left center right".split(" "),function(e){t.formatter.remove("align"+e,{},n)})},unApplyVAlign:function(t,n){ga.each("top middle bottom".split(" "),function(e){t.formatter.remove("valign"+e,{},n)})},getTDTHOverallStyle:function(o,e,i){var t;return t=function(e,t){for(var n=0;n<t.length;n++){var r=o.getStyle(t[n],i);if(void 0===e&&(e=r),e!==r)return""}return e}(t,o.select("td,th",e))}},ha=function(e,t){var n=e.dom,r=t.control.rootControl,o=r.toJSON(),i=n.parseStyle(o.style);"style"===t.control.name()?(r.find("#borderStyle").value(i["border-style"]||"")[0].fire("select"),r.find("#borderColor").value(i["border-color"]||"")[0].fire("change"),r.find("#backgroundColor").value(i["background-color"]||"")[0].fire("change"),r.find("#width").value(i.width||"").fire("change"),r.find("#height").value(i.height||"").fire("change")):(i["border-style"]=o.borderStyle,i["border-color"]=o.borderColor,i["background-color"]=o.backgroundColor,i.width=o.width?Gu.addSizeSuffix(o.width):"",i.height=o.height?Gu.addSizeSuffix(o.height):""),r.find("#style").value(n.serializeStyle(n.parseStyle(n.serializeStyle(i))))},va={createStyleForm:function(n){var e=function(){var e=n.getParam("color_picker_callback");if(e)return function(t){return e.call(n,function(e){t.control.value(e).fire("change")},t.control.value())}};return{title:"Advanced",type:"form",defaults:{onchange:y.curry(ha,n)},items:[{label:"Style",name:"style",type:"textbox"},{type:"form",padding:0,formItemDefaults:{layout:"grid",alignH:["start","right"]},defaults:{size:7},items:[{label:"Border style",type:"listbox",name:"borderStyle",width:90,onselect:y.curry(ha,n),values:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]},{label:"Border color",type:"colorbox",name:"borderColor",onaction:e()},{label:"Background color",type:"colorbox",name:"backgroundColor",onaction:e()}]}]}},buildListItems:function(e,r,t){var o=function(e,n){return n=n||[],ga.each(e,function(e){var t={text:e.text||e.title};e.menu?t.menu=o(e.menu):(t.value=e.value,r&&r(t)),n.push(t)}),n};return o(e,t||[])},updateStyleField:ha,extractAdvancedStyles:function(e,t){var n=e.parseStyle(e.getAttrib(t,"style")),r={};return n["border-style"]&&(r.borderStyle=n["border-style"]),n["border-color"]&&(r.borderColor=n["border-color"]),n["background-color"]&&(r.backgroundColor=n["background-color"]),r.style=e.serializeStyle(n),r}},ba=function(r,o,e){var i,u=r.dom;function a(e,t,n){n&&u.setAttrib(e,t,n)}function c(e,t,n){n&&u.setStyle(e,t,n)}va.updateStyleField(r,e),i=e.control.rootControl.toJSON(),r.undoManager.transact(function(){ga.each(o,function(e){var t,n;a(e,"scope",i.scope),1===o.length?a(e,"style",i.style):(t=e,n=i.style,delete t.dataset.mceStyle,t.style.cssText+=";"+n),a(e,"class",i["class"]),c(e,"width",Gu.addSizeSuffix(i.width)),c(e,"height",Gu.addSizeSuffix(i.height)),i.type&&e.nodeName.toLowerCase()!==i.type&&(e=u.rename(e,i.type)),1===o.length&&(pa.unApplyAlign(r,e),pa.unApplyVAlign(r,e)),i.align&&pa.applyAlign(r,e,i.align),i.valign&&pa.applyVAlign(r,e,i.valign)}),r.focus()})},wa=function(t){var e,n,r,o=[];if(o=t.dom.select("td[data-mce-selected],th[data-mce-selected]"),e=t.dom.getParent(t.selection.getStart(),"td,th"),!o.length&&e&&o.push(e),e=e||o[0]){var i,u,a,c;1<o.length?n={width:"",height:"",scope:"","class":"",align:"",valign:"",style:"",type:e.nodeName.toLowerCase()}:(u=e,a=(i=t).dom,c={width:a.getStyle(u,"width")||a.getAttrib(u,"width"),height:a.getStyle(u,"height")||a.getAttrib(u,"height"),scope:a.getAttrib(u,"scope"),"class":a.getAttrib(u,"class"),type:u.nodeName.toLowerCase(),style:"",align:"",valign:""},ga.each("left center right".split(" "),function(e){i.formatter.matchNode(u,"align"+e)&&(c.align=e)}),ga.each("top middle bottom".split(" "),function(e){i.formatter.matchNode(u,"valign"+e)&&(c.valign=e)}),na(i)&&ga.extend(c,va.extractAdvancedStyles(a,u)),n=c),0<ua(t).length&&(r={name:"class",type:"listbox",label:"Class",values:va.buildListItems(ua(t),function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({block:"td",classes:[e.value]})})})});var l={type:"form",layout:"flex",direction:"column",labelGapCalc:"children",padding:0,items:[{type:"form",layout:"grid",columns:2,labelGapCalc:!1,padding:0,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width",onchange:y.curry(va.updateStyleField,t)},{label:"Height",name:"height",onchange:y.curry(va.updateStyleField,t)},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"H Align",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"V Align",name:"valign",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}]}]},r]};na(t)?t.windowManager.open({title:"Cell properties",bodyType:"tabpanel",data:n,body:[{title:"General",type:"form",items:l},va.createStyleForm(t)],onsubmit:y.curry(ba,t,o)}):t.windowManager.open({title:"Cell properties",data:n,body:l,onsubmit:y.curry(ba,t,o)})}},ya=function(e,t,n){var r=e.getParent(t,"table"),o=t.parentNode,i=e.select(n,r)[0];i||(i=e.create(n),r.firstChild?"CAPTION"===r.firstChild.nodeName?e.insertAfter(i,r.firstChild):r.insertBefore(i,r.firstChild):r.appendChild(i)),i.appendChild(t),o.hasChildNodes()||e.remove(o)};function xa(o,e,i,t){var u=o.dom;function a(e,t,n){n&&u.setAttrib(e,t,n)}va.updateStyleField(o,t);var c=t.control.rootControl.toJSON();o.undoManager.transact(function(){ga.each(e,function(e){var t,n,r;a(e,"scope",c.scope),a(e,"style",c.style),a(e,"class",c["class"]),t=e,n="height",(r=Gu.addSizeSuffix(c.height))&&u.setStyle(t,n,r),c.type!==e.parentNode.nodeName.toLowerCase()&&ya(o.dom,e,c.type),c.align!==i.align&&(pa.unApplyAlign(o,e),pa.applyAlign(o,e,c.align))}),o.focus()})}var Sa=function(t){var e,n,r,o,i,u,a,c,l,s,f=t.dom,d=[];e=f.getParent(t.selection.getStart(),"table"),n=f.getParent(t.selection.getStart(),"td,th"),ga.each(e.rows,function(t){ga.each(t.cells,function(e){if(f.getAttrib(e,"data-mce-selected")||e===n)return d.push(t),!1})}),(r=d[0])&&(1<d.length?i={height:"",scope:"",style:"","class":"",align:"",type:r.parentNode.nodeName.toLowerCase()}:(c=r,l=(a=t).dom,s={height:l.getStyle(c,"height")||l.getAttrib(c,"height"),scope:l.getAttrib(c,"scope"),"class":l.getAttrib(c,"class"),align:"",style:"",type:c.parentNode.nodeName.toLowerCase()},ga.each("left center right".split(" "),function(e){a.formatter.matchNode(c,"align"+e)&&(s.align=e)}),ra(a)&&ga.extend(s,va.extractAdvancedStyles(l,c)),i=s),0<aa(t).length&&(o={name:"class",type:"listbox",label:"Class",values:va.buildListItems(aa(t),function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({block:"tr",classes:[e.value]})})})}),u={type:"form",columns:2,padding:0,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"Header",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"},o]},ra(t)?t.windowManager.open({title:"Row properties",data:i,bodyType:"tabpanel",body:[{title:"General",type:"form",items:u},va.createStyleForm(t)],onsubmit:y.curry(xa,t,d,i)}):t.windowManager.open({title:"Row properties",data:i,body:u,onsubmit:y.curry(xa,t,d,i)}))},Ca=tinymce.util.Tools.resolve("tinymce.Env"),Ra={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},percentages:!0},Ta=function(e,t,n,r,o){void 0===o&&(o=Ra);var i=Y.fromTag("table");Zt.setAll(i,o.styles),vt.setAll(i,o.attributes);var u=Y.fromTag("tbody");nn.append(i,u);for(var a=[],c=0;c<e;c++){for(var l=Y.fromTag("tr"),s=0;s<t;s++){var f=c<n||s<r?Y.fromTag("th"):Y.fromTag("td");s<r&&vt.set(f,"scope","row"),c<n&&vt.set(f,"scope","col"),nn.append(f,Y.fromTag("br")),o.percentages&&Zt.set(f,"width",100/t+"%"),nn.append(l,f)}a.push(l)}return rn.append(u,a),i},Aa=function(e){return e.dom().innerHTML},Da=function(e){var t=Y.fromTag("div"),n=Y.fromDom(e.dom().cloneNode(!0));return nn.append(t,n),Aa(t)},ka=function(e,t){e.selection.select(t.dom(),!0),e.selection.collapse(!0)},Na=function(i,e,t){var n,r,o=i.getParam("table_default_styles",Zu,"object"),u={styles:o,attributes:(r=i,r.getParam("table_default_attributes",ea,"object")),percentages:(n=o.width,g.isString(n)&&-1!==n.indexOf("%")&&!la(i))},a=Ta(t,e,0,0,u);vt.set(a,"data-mce-id","__mce");var c=Da(a);return i.insertContent(c),Wt.descendant(Gu.getBody(i),'table[data-mce-id="__mce"]').map(function(e){var t,n,r,o;return la(i)&&Zt.set(e,"width",Zt.get(e,"width")),vt.remove(e,"data-mce-id"),t=i,n=e,E.each(Ct.descendants(n,"tr"),function(e){sa(t,e.dom()),E.each(Ct.descendants(e,"th,td"),function(e){fa(t,e.dom())})}),r=i,o=e,Wt.descendant(o,"td,th").each(y.curry(ka,r)),e.dom()}).getOr(null)};function Ea(e,t,n,r){if("TD"===t.tagName||"TH"===t.tagName)e.setStyle(t,n,r);else if(t.children)for(var o=0;o<t.children.length;o++)Ea(e,t.children[o],n,r)}var Oa=function(e,t,n){var r,o,i=e.dom;va.updateStyleField(e,n),!1===(o=n.control.rootControl.toJSON())["class"]&&delete o["class"],e.undoManager.transact(function(){t||(t=Na(e,o.cols||1,o.rows||1)),function(e,t,n){var r=e.dom,o={},i={};if(o["class"]=n["class"],i.height=Gu.addSizeSuffix(n.height),r.getAttrib(t,"width")&&!ia(e)?o.width=Gu.removePxSuffix(n.width):i.width=Gu.addSizeSuffix(n.width),ia(e)?(i["border-width"]=Gu.addSizeSuffix(n.border),i["border-spacing"]=Gu.addSizeSuffix(n.cellspacing),ga.extend(o,{"data-mce-border-color":n.borderColor,"data-mce-cell-padding":n.cellpadding,"data-mce-border":n.border})):ga.extend(o,{border:n.border,cellpadding:n.cellpadding,cellspacing:n.cellspacing}),ia(e)&&t.children)for(var u=0;u<t.children.length;u++)Ea(r,t.children[u],{"border-width":Gu.addSizeSuffix(n.border),"border-color":n.borderColor,padding:Gu.addSizeSuffix(n.cellpadding)});n.style?ga.extend(i,r.parseStyle(n.style)):i=ga.extend({},r.parseStyle(r.getAttrib(t,"style")),i),o.style=r.serializeStyle(i),r.setAttribs(t,o)}(e,t,o),(r=i.select("caption",t)[0])&&!o.caption&&i.remove(r),!r&&o.caption&&((r=i.create("caption")).innerHTML=Ca.ie?"\xa0":'<br data-mce-bogus="1"/>',t.insertBefore(r,t.firstChild)),pa.unApplyAlign(e,t),o.align&&pa.applyAlign(e,t,o.align),e.focus(),e.addVisual()})},Ba=function(t,e){var n,r,o,i,u,a,c,l,s,f,d=t.dom,m={};!0===e?(n=d.getParent(t.selection.getStart(),"table"))&&(c=n,l=(a=t).dom,s={width:l.getStyle(c,"width")||l.getAttrib(c,"width"),height:l.getStyle(c,"height")||l.getAttrib(c,"height"),cellspacing:l.getStyle(c,"border-spacing")||l.getAttrib(c,"cellspacing"),cellpadding:l.getAttrib(c,"data-mce-cell-padding")||l.getAttrib(c,"cellpadding")||pa.getTDTHOverallStyle(a.dom,c,"padding"),border:l.getAttrib(c,"data-mce-border")||l.getAttrib(c,"border")||pa.getTDTHOverallStyle(a.dom,c,"border"),borderColor:l.getAttrib(c,"data-mce-border-color"),caption:!!l.select("caption",c)[0],"class":l.getAttrib(c,"class")},ga.each("left center right".split(" "),function(e){a.formatter.matchNode(c,"align"+e)&&(s.align=e)}),oa(a)&&ga.extend(s,va.extractAdvancedStyles(l,c)),m=s):(r={label:"Cols",name:"cols"},o={label:"Rows",name:"rows"}),0<ca(t).length&&(m["class"]&&(m["class"]=m["class"].replace(/\s*mce\-item\-table\s*/g,"")),i={name:"class",type:"listbox",label:"Class",values:va.buildListItems(ca(t),function(e){e.value&&(e.textStyle=function(){return t.formatter.getCssText({block:"table",classes:[e.value]})})})}),u={type:"form",layout:"flex",direction:"column",labelGapCalc:"children",padding:0,items:[{type:"form",labelGapCalc:!1,padding:0,layout:"grid",columns:2,defaults:{type:"textbox",maxWidth:50},items:(f=t,f.getParam("table_appearance_options",!0,"boolean")?[r,o,{label:"Width",name:"width",onchange:y.curry(va.updateStyleField,t)},{label:"Height",name:"height",onchange:y.curry(va.updateStyleField,t)},{label:"Cell spacing",name:"cellspacing"},{label:"Cell padding",name:"cellpadding"},{label:"Border",name:"border"},{label:"Caption",name:"caption",type:"checkbox"}]:[r,o,{label:"Width",name:"width",onchange:y.curry(va.updateStyleField,t)},{label:"Height",name:"height",onchange:y.curry(va.updateStyleField,t)}])},{label:"Alignment",name:"align",type:"listbox",text:"None",values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},i]},oa(t)?t.windowManager.open({title:"Table properties",data:m,bodyType:"tabpanel",body:[{title:"General",type:"form",items:u},va.createStyleForm(t)],onsubmit:y.curry(Oa,t,n)}):t.windowManager.open({title:"Table properties",data:m,body:u,onsubmit:y.curry(Oa,t,n)})},Pa=ga.each,Ia={registerCommands:function(a,t,c,l,n){var r=Gu.getIsRoot(a),s=function(){return Y.fromDom(a.dom.getParent(a.selection.getStart(),"th,td"))},f=function(e){return zt.table(e,r)},o=function(n){var r=s();f(r).each(function(t){var e=Sr.forMenu(l,t,r);n(t,e).each(function(e){a.selection.setRng(e),a.focus(),c.clear(t)})})},i=function(e){var o=s();return f(o).bind(function(e){var t=Y.fromDom(a.getDoc()),n=Sr.forMenu(l,e,o),r=Dn(y.noop,t,x.none());return ma(e,n,r)})},u=function(u){n.get().each(function(e){var o=E.map(e,function(e){return mn(e)}),i=s();f(i).bind(function(t){var e=Y.fromDom(a.getDoc()),n=kn(e),r=Sr.pasteRows(l,t,i,o,n);u(t,r).each(function(e){a.selection.setRng(e),a.focus(),c.clear(t)})})})};Pa({mceTableSplitCells:function(){o(t.unmergeCells)},mceTableMergeCells:function(){o(t.mergeCells)},mceTableInsertRowBefore:function(){o(t.insertRowsBefore)},mceTableInsertRowAfter:function(){o(t.insertRowsAfter)},mceTableInsertColBefore:function(){o(t.insertColumnsBefore)},mceTableInsertColAfter:function(){o(t.insertColumnsAfter)},mceTableDeleteCol:function(){o(t.deleteColumn)},mceTableDeleteRow:function(){o(t.deleteRow)},mceTableCutRow:function(e){n.set(i()),o(t.deleteRow)},mceTableCopyRow:function(e){n.set(i())},mceTablePasteRowBefore:function(e){u(t.pasteRowsBefore)},mceTablePasteRowAfter:function(e){u(t.pasteRowsAfter)},mceTableDelete:function(){var e=Y.fromDom(a.dom.getParent(a.selection.getStart(),"th,td"));zt.table(e,r).filter(y.not(r)).each(function(e){var t=Y.fromText("");nn.after(e,t),un.remove(e);var n=a.dom.createRng();n.setStart(t.dom(),0),n.setEnd(t.dom(),0),a.selection.setRng(n)})}},function(e,t){a.addCommand(t,e)}),Pa({mceInsertTable:y.curry(Ba,a),mceTableProps:y.curry(Ba,a,!0),mceTableRowProps:y.curry(Sa,a),mceTableCellProps:y.curry(wa,a)},function(n,e){a.addCommand(e,function(e,t){n(t)})})}},Wa=function(e){var t=x.from(e.dom().documentElement).map(Y.fromDom).getOr(e);return{parent:y.constant(t),view:y.constant(e),origin:y.constant(Xr(0,0))}},Ma=function(e,t){return{parent:y.constant(t),view:y.constant(e),origin:y.constant(Xr(0,0))}};function La(e){var n=F.immutable.apply(null,e),r=[];return{bind:function(e){if(e===undefined)throw"Event bind error: undefined handler";r.push(e)},unbind:function(t){r=E.filter(r,function(e){return e!==t})},trigger:function(){var t=n.apply(null,arguments);E.each(r,function(e){e(t)})}}}var qa={create:function(e){return{registry:M.map(e,function(e){return{bind:e.bind,unbind:e.unbind}}),trigger:M.map(e,function(e){return e.trigger})}}},Fa={mode:ho.exactly(["compare","extract","mutate","sink"]),sink:ho.exactly(["element","start","stop","destroy"]),api:ho.exactly(["forceDrop","drop","move","delayDrop"])},ja={resolve:ri("ephox-dragster").resolve},za=function(m,g){return function(e){if(m(e)){var t,n,r,o,i,u,a,c=Y.fromDom(e.target),l=function(){e.stopPropagation()},s=function(){e.preventDefault()},f=y.compose(s,l),d=(t=c,n=e.clientX,r=e.clientY,o=l,i=s,u=f,a=e,{target:y.constant(t),x:y.constant(n),y:y.constant(r),stop:o,prevent:i,kill:u,raw:y.constant(a)});g(d)}}},_a=function(e,t,n,r,o){var i=za(n,r);return e.dom().addEventListener(t,i,o),{unbind:y.curry(Ha,e,t,i,o)}},Ha=function(e,t,n,r){e.dom().removeEventListener(t,n,r)},Va=function(e,t,n,r){return _a(e,t,n,r,!1)},Ua=function(e,t,n,r){return _a(e,t,n,r,!0)},Ga=y.constant(!0),Xa={bind:function(e,t,n){return Va(e,t,Ga,n)},capture:function(e,t,n){return Ua(e,t,Ga,n)}},Ya=Fa.mode({compare:function(e,t){return Xr(t.left()-e.left(),t.top()-e.top())},extract:function(e){return x.some(Xr(e.x(),e.y()))},sink:function(e,t){var n,r,o,i=(n=t,r=Mo.merge({layerClass:ja.resolve("blocker")},n),o=Y.fromTag("div"),vt.set(o,"role","presentation"),Zt.setAll(o,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),bi.add(o,ja.resolve("blocker")),bi.add(o,r.layerClass),{element:function(){return o},destroy:function(){un.remove(o)}}),u=Xa.bind(i.element(),"mousedown",e.forceDrop),a=Xa.bind(i.element(),"mouseup",e.drop),c=Xa.bind(i.element(),"mousemove",e.move),l=Xa.bind(i.element(),"mouseout",e.delayDrop);return Fa.sink({element:i.element,start:function(e){nn.append(e,i.element())},stop:function(){un.remove(i.element())},destroy:function(){i.destroy(),a.unbind(),c.unbind(),l.unbind(),u.unbind()}})},mutate:function(e,t){e.mutate(t.left(),t.top())}});function Ka(){var i=x.none(),u=qa.create({move:La(["info"])});return{onEvent:function(e,o){o.extract(e).each(function(e){var t,n,r;(t=o,n=e,r=i.map(function(e){return t.compare(e,n)}),i=x.some(n),r).each(function(e){u.trigger.move(e)})})},reset:function(){i=x.none()},events:u.registry}}function $a(){var e={onEvent:function(e,t){},reset:y.noop},t=Ka(),n=e;return{on:function(){n.reset(),n=t},off:function(){n.reset(),n=e},isOn:function(){return n===t},onEvent:function(e,t){n.onEvent(e,t)},events:t.events}}var Ja=function(t,n){var r=null;return{cancel:function(){null!==r&&(clearTimeout(r),r=null)},throttle:function(){var e=arguments;null!==r&&clearTimeout(r),r=setTimeout(function(){t.apply(null,e),e=r=null},n)}}},Qa=function(t,n,e){var r=!1,o=qa.create({start:La([]),stop:La([])}),i=$a(),u=function(){l.stop(),i.isOn()&&(i.off(),o.trigger.stop())},a=Ja(u,200);i.events.move.bind(function(e){n.mutate(t,e.info())});var c=function(t){return function(){var e=Array.prototype.slice.call(arguments,0);if(r)return t.apply(null,e)}},l=n.sink(Fa.api({forceDrop:u,drop:c(u),move:c(function(e,t){a.cancel(),i.onEvent(e,n)}),delayDrop:c(a.throttle)}),e);return{element:l.element,go:function(e){l.start(e),i.on(),o.trigger.start()},on:function(){r=!0},off:function(){r=!1},destroy:function(){l.destroy()},events:o.registry}},Za={transform:function(e,t){var n=t!==undefined?t:{},r=n.mode!==undefined?n.mode:Ya;return Qa(e,r,t)}};function ec(){var n,r=qa.create({drag:La(["xDelta","yDelta","target"])}),o=x.none(),e={mutate:function(e,t){n.trigger.drag(e,t)},events:(n=qa.create({drag:La(["xDelta","yDelta"])})).registry};return e.events.drag.bind(function(t){o.each(function(e){r.trigger.drag(t.xDelta(),t.yDelta(),e)})}),{assign:function(e){o=x.some(e)},get:function(){return o},mutate:e.mutate,events:r.registry}}var tc={any:function(e){return Wt.first(e).isSome()},ancestor:function(e,t,n){return Wt.ancestor(e,t,n).isSome()},sibling:function(e,t){return Wt.sibling(e,t).isSome()},child:function(e,t){return Wt.child(e,t).isSome()},descendant:function(e,t){return Wt.descendant(e,t).isSome()},closest:function(e,t,n){return Wt.closest(e,t,n).isSome()}},nc=oi.resolve("resizer-bar-dragging");function rc(e,n){var r=ao.height,t=function(o,t,i){var n=ec(),r=Za.transform(n,{}),u=x.none(),e=function(e,t){return x.from(vt.get(e,t))};n.events.drag.bind(function(n){e(n.target(),"data-row").each(function(e){var t=vu.getInt(n.target(),"top");Zt.set(n.target(),"top",t+n.yDelta()+"px")}),e(n.target(),"data-column").each(function(e){var t=vu.getInt(n.target(),"left");Zt.set(n.target(),"left",t+n.xDelta()+"px")})});var a=function(e,t){return vu.getInt(e,t)-parseInt(vt.get(e,"data-initial-"+t),10)};r.events.stop.bind(function(){n.get().each(function(r){u.each(function(n){e(r,"data-row").each(function(e){var t=a(r,"top");vt.remove(r,"data-initial-top"),d.trigger.adjustHeight(n,t,parseInt(e,10))}),e(r,"data-column").each(function(e){var t=a(r,"left");vt.remove(r,"data-initial-left"),d.trigger.adjustWidth(n,t,parseInt(e,10))}),Ai.refresh(o,n,i,t)})})});var c=function(e,t){d.trigger.startAdjust(),n.assign(e),vt.set(e,"data-initial-"+t,parseInt(Zt.get(e,t),10)),bi.add(e,nc),Zt.set(e,"opacity","0.2"),r.go(o.parent())},l=Xa.bind(o.parent(),"mousedown",function(e){Ai.isRowBar(e.target())&&c(e.target(),"top"),Ai.isColBar(e.target())&&c(e.target(),"left")}),s=function(e){return Ke.eq(e,o.view())},f=Xa.bind(o.view(),"mouseover",function(e){"table"===dt.name(e.target())||tc.closest(e.target(),"table",s)?(u="table"===dt.name(e.target())?x.some(e.target()):Wt.ancestor(e.target(),"table",s)).each(function(e){Ai.refresh(o,e,i,t)}):yt.inBody(e.target())&&Ai.destroy(o)}),d=qa.create({adjustHeight:La(["table","delta","row"]),adjustWidth:La(["table","delta","column"]),startAdjust:La([])});return{destroy:function(){l.unbind(),f.unbind(),r.destroy(),Ai.destroy(o)},refresh:function(e){Ai.refresh(o,e,i,t)},on:r.on,off:r.off,hideBars:y.curry(Ai.hide,o),showBars:y.curry(Ai.show,o),events:d.registry}}(e,n,r),o=qa.create({beforeResize:La(["table"]),afterResize:La(["table"]),startDrag:La([])});return t.events.adjustHeight.bind(function(e){o.trigger.beforeResize(e.table());var t=r.delta(e.delta(),e.table());Iu.adjustHeight(e.table(),t,e.row(),r),o.trigger.afterResize(e.table())}),t.events.startAdjust.bind(function(e){o.trigger.startDrag()}),t.events.adjustWidth.bind(function(e){o.trigger.beforeResize(e.table());var t=n.delta(e.delta(),e.table());Iu.adjustWidth(e.table(),t,e.column(),n),o.trigger.afterResize(e.table())}),{on:t.on,off:t.off,hideBars:t.hideBars,showBars:t.showBars,destroy:t.destroy,events:o.registry}}var oc=function(e,t){return e.inline?Ma(Gu.getBody(e),(n=Y.fromTag("div"),Zt.setAll(n,{position:"static",height:"0",width:"0",padding:"0",margin:"0",border:"0"}),nn.append(yt.body(),n),n)):Wa(Y.fromDom(e.getDoc()));var n},ic=function(e,t){e.inline&&un.remove(t.parent())},uc=function(u){var a,c,o=x.none(),i=x.none(),l=x.none(),s=/(\d+(\.\d+)?)%/,f=function(e){return"TABLE"===e.nodeName};return u.on("init",function(){var e,t=lo(Ju.directionAt),n=oc(u);if(l=x.some(n),("table"===(e=u.getParam("object_resizing",!0))||e)&&u.getParam("table_resize_bars",!0,"boolean")){var r=rc(n,t);r.on(),r.events.startDrag.bind(function(e){o=x.some(u.selection.getRng())}),r.events.afterResize.bind(function(e){var t=e.table(),n=Ct.descendants(t,"td[data-mce-style],th[data-mce-style]");E.each(n,function(e){vt.remove(e,"data-mce-style")}),o.each(function(e){u.selection.setRng(e),u.focus()}),u.undoManager.add()}),i=x.some(r)}}),u.on("ObjectResizeStart",function(e){var t,n=e.target;f(n)&&(a=e.width,t=n,c=u.dom.getStyle(t,"width")||u.dom.getAttrib(t,"width"))}),u.on("ObjectResized",function(e){var t=e.target;if(f(t)){var n=t;if(s.test(c)){var r=parseFloat(s.exec(c)[1]),o=e.width*r/a;u.dom.setStyle(n,"width",o+"%")}else{var i=[];ga.each(n.rows,function(e){ga.each(e.cells,function(e){var t=u.dom.getStyle(e,"width",!0);i.push({cell:e,width:t})})}),ga.each(i,function(e){u.dom.setStyle(e.cell,"width",e.width),u.dom.setAttrib(e.cell,"width",null)})}}}),{lazyResize:function(){return i},lazyWire:function(){return l.getOr(Wa(Y.fromDom(u.getBody())))},destroy:function(){i.each(function(e){e.destroy()}),l.each(function(e){ic(u,e)})}}},ac=function(e){return{fold:e}},cc=function(o){return ac(function(e,t,n,r){return e(o)})},lc=function(o){return ac(function(e,t,n,r){return t(o)})},sc=function(o,i){return ac(function(e,t,n,r){return n(o,i)})},fc=function(o){return ac(function(e,t,n,r){return r(o)})},dc=function(n,e){return zt.table(n,e).bind(function(e){var t=zt.cells(e);return E.findIndex(t,function(e){return Ke.eq(n,e)}).map(function(e){return{index:y.constant(e),all:y.constant(t)}})})},mc=function(t,e){return dc(t,e).fold(function(){return cc(t)},function(e){return e.index()+1<e.all().length?sc(t,e.all()[e.index()+1]):fc(t)})},gc=function(t,e){return dc(t,e).fold(function(){return cc()},function(e){return 0<=e.index()-1?sc(t,e.all()[e.index()-1]):lc(t)})},pc=mr([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),hc={before:pc.before,on:pc.on,after:pc.after,cata:function(e,t,n,r){return e.fold(t,n,r)},getStart:function(e){return e.fold(y.identity,y.identity,y.identity)}},vc=mr([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),bc=F.immutable("start","soffset","finish","foffset"),wc={domRange:vc.domRange,relative:vc.relative,exact:vc.exact,exactFromRange:function(e){return vc.exact(e.start(),e.soffset(),e.finish(),e.foffset())},range:bc,getWin:function(e){var t=e.match({domRange:function(e){return Y.fromDom(e.startContainer)},relative:function(e,t){return hc.getStart(e)},exact:function(e,t,n,r){return e}});return rt.defaultView(t)}},yc=function(e,t,n,r){var o=rt.owner(e).dom().createRange();return o.setStart(e.dom(),t),o.setEnd(n.dom(),r),o},xc=function(e,t,n,r){var o=yc(e,t,n,r),i=Ke.eq(e,n)&&t===r;return o.collapsed&&!i},Sc=function(e,t){var n=(t||document).createDocumentFragment();return E.each(e,function(e){n.appendChild(e.dom())}),Y.fromDom(n)},Cc=function(e,t){e.selectNodeContents(t.dom())},Rc=function(e){e.deleteContents()},Tc=function(e){return{left:y.constant(e.left),top:y.constant(e.top),right:y.constant(e.right),bottom:y.constant(e.bottom),width:y.constant(e.width),height:y.constant(e.height)}},Ac={create:function(e){return e.document.createRange()},replaceWith:function(e,t){Rc(e),e.insertNode(t.dom())},selectNodeContents:function(e,t){var n=e.document.createRange();return Cc(n,t),n},selectNodeContentsUsing:Cc,relativeToNative:function(e,t,n){var r,o,i=e.document.createRange();return r=i,t.fold(function(e){r.setStartBefore(e.dom())},function(e,t){r.setStart(e.dom(),t)},function(e){r.setStartAfter(e.dom())}),o=i,n.fold(function(e){o.setEndBefore(e.dom())},function(e,t){o.setEnd(e.dom(),t)},function(e){o.setEndAfter(e.dom())}),i},exactToNative:function(e,t,n,r,o){var i=e.document.createRange();return i.setStart(t.dom(),n),i.setEnd(r.dom(),o),i},deleteContents:Rc,cloneFragment:function(e){var t=e.cloneContents();return Y.fromDom(t)},getFirstRect:function(e){var t=e.getClientRects(),n=0<t.length?t[0]:e.getBoundingClientRect();return 0<n.width||0<n.height?x.some(n).map(Tc):x.none()},getBounds:function(e){var t=e.getBoundingClientRect();return 0<t.width||0<t.height?x.some(t).map(Tc):x.none()},isWithin:function(e,t){return t.compareBoundaryPoints(e.END_TO_START,e)<1&&-1<t.compareBoundaryPoints(e.START_TO_END,e)},toString:function(e){return e.toString()}},Dc=mr([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),kc=function(e,t,n){return t(Y.fromDom(n.startContainer),n.startOffset,Y.fromDom(n.endContainer),n.endOffset)},Nc=function(e,t){var o,n,r,i=(o=e,t.match({domRange:function(e){return{ltr:y.constant(e),rtl:x.none}},relative:function(e,t){return{ltr:fe(function(){return Ac.relativeToNative(o,e,t)}),rtl:fe(function(){return x.some(Ac.relativeToNative(o,t,e))})}},exact:function(e,t,n,r){return{ltr:fe(function(){return Ac.exactToNative(o,e,t,n,r)}),rtl:fe(function(){return x.some(Ac.exactToNative(o,n,r,e,t))})}}}));return(r=(n=i).ltr()).collapsed?n.rtl().filter(function(e){return!1===e.collapsed}).map(function(e){return Dc.rtl(Y.fromDom(e.endContainer),e.endOffset,Y.fromDom(e.startContainer),e.startOffset)}).getOrThunk(function(){return kc(0,Dc.ltr,r)}):kc(0,Dc.ltr,r)},Ec={ltr:Dc.ltr,rtl:Dc.rtl,diagnose:Nc,asLtrRange:function(i,e){return Nc(i,e).match({ltr:function(e,t,n,r){var o=i.document.createRange();return o.setStart(e.dom(),t),o.setEnd(n.dom(),r),o},rtl:function(e,t,n,r){var o=i.document.createRange();return o.setStart(n.dom(),r),o.setEnd(e.dom(),t),o}})}},Oc=function(e,t,n){return t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom},Bc=function(e,t,n,r,o){if(0===o)return 0;if(t===r)return o-1;for(var i=r,u=1;u<o;u++){var a=e(u),c=Math.abs(t-a.left);if(n>a.bottom);else{if(n<a.top||i<c)return u-1;i=c}}return 0},Pc={locate:function(l,s,f,d){var e=l.dom().createRange();e.selectNode(s.dom());var t=e.getClientRects();return qo(t,function(e){return Oc(e,f,d)?x.some(e):x.none()}).map(function(e){return n=l,r=s,t=f,o=d,i=e,u=function(e){var t=n.dom().createRange();return t.setStart(r.dom(),e),t.collapse(!0),t},a=hn.get(r).length,c=Bc(function(e){return u(e).getBoundingClientRect()},t,o,i.right,a),u(c);var n,r,t,o,i,u,a,c})}},Ic=function(t,e,n,r){var o=t.dom().createRange(),i=rt.children(e);return qo(i,function(e){return o.selectNode(e.dom()),Oc(o.getBoundingClientRect(),n,r)?Wc(t,e,n,r):x.none()})},Wc=function(e,t,n,r){return(dt.isText(t)?Pc.locate:Ic)(e,t,n,r)},Mc=function(e,t,n,r){var o=e.dom().createRange();o.selectNode(t.dom());var i=o.getBoundingClientRect(),u=Math.max(i.left,Math.min(i.right,n)),a=Math.max(i.top,Math.min(i.bottom,r));return Wc(e,t,u,a)},Lc=function(e,t){return t-e.left<e.right-t},qc=function(e,t,n){var r=e.dom().createRange();return r.selectNode(t.dom()),r.collapse(n),r},Fc=function(t,e,n){var r=t.dom().createRange();r.selectNode(e.dom());var o=r.getBoundingClientRect(),i=Lc(o,n);return(!0===i?Sn.first:Sn.last)(e).map(function(e){return qc(t,e,i)})},jc=function(e,t,n){var r=t.dom().getBoundingClientRect(),o=Lc(r,n);return x.some(qc(e,t,o))},zc=function(e,t,n){return(0===rt.children(t).length?jc:Fc)(e,t,n)},_c=document.caretPositionFromPoint?function(n,e,t){return x.from(n.dom().caretPositionFromPoint(e,t)).bind(function(e){if(null===e.offsetNode)return x.none();var t=n.dom().createRange();return t.setStart(e.offsetNode,e.offset),t.collapse(),x.some(t)})}:document.caretRangeFromPoint?function(e,t,n){return x.from(e.dom().caretRangeFromPoint(t,n))}:function(n,r,o){return Y.fromPoint(n,r,o).bind(function(e){var t=function(){return zc(n,e,r)};return 0===rt.children(e).length?t():function(e,t,n,r){var o=e.dom().createRange();o.selectNode(t.dom());var i=o.getBoundingClientRect(),u=Math.max(i.left,Math.min(i.right,n)),a=Math.max(i.top,Math.min(i.bottom,r));return Mc(e,t,u,a)}(n,e,r,o).orThunk(t)})},Hc=function(e,t,n){var r=Y.fromDom(e.document);return _c(r,t,n).map(function(e){return wc.range(Y.fromDom(e.startContainer),e.startOffset,Y.fromDom(e.endContainer),e.endOffset)})},Vc=function(e,t,n){var r,o,i,u,a,c,l=Ec.asLtrRange(e,t),s=Y.fromDom(l.commonAncestorContainer);return dt.isElement(s)?(r=e,o=s,i=l,u=n,a=Ac.create(r),c=(ne.is(o,u)?[o]:[]).concat(Ct.descendants(o,u)),E.filter(c,function(e){return Ac.selectNodeContentsUsing(a,e),Ac.isWithin(i,a)})):[]},Uc=function(e,t){var n=dt.name(e);return"input"===n?hc.after(e):E.contains(["br","img"],n)?0===t?hc.before(e):hc.after(e):hc.on(e,t)},Gc=function(e,t){var n=e.fold(hc.before,Uc,hc.after),r=t.fold(hc.before,Uc,hc.after);return wc.relative(n,r)},Xc=function(e,t,n,r){var o=Uc(e,t),i=Uc(n,r);return wc.relative(o,i)},Yc=function(e){return e.match({domRange:function(e){var t=Y.fromDom(e.startContainer),n=Y.fromDom(e.endContainer);return Xc(t,e.startOffset,n,e.endOffset)},relative:Gc,exact:Xc})},Kc=Gc,$c=Xc,Jc=function(e,t){x.from(e.getSelection()).each(function(e){e.removeAllRanges(),e.addRange(t)})},Qc=function(e,t,n,r,o){var i=Ac.exactToNative(e,t,n,r,o);Jc(e,i)},Zc=function(i,e){return Ec.diagnose(i,e).match({ltr:function(e,t,n,r){Qc(i,e,t,n,r)},rtl:function(e,t,n,r){var o=i.getSelection();o.setBaseAndExtent?o.setBaseAndExtent(e.dom(),t,n.dom(),r):o.extend?(o.collapse(e.dom(),t),o.extend(n.dom(),r)):Qc(i,n,r,e,t)}})},el=function(e){var t=Y.fromDom(e.anchorNode),n=Y.fromDom(e.focusNode);return xc(t,e.anchorOffset,n,e.focusOffset)?x.some(wc.range(Y.fromDom(e.anchorNode),e.anchorOffset,Y.fromDom(e.focusNode),e.focusOffset)):function(e){if(0<e.rangeCount){var t=e.getRangeAt(0),n=e.getRangeAt(e.rangeCount-1);return x.some(wc.range(Y.fromDom(t.startContainer),t.startOffset,Y.fromDom(n.endContainer),n.endOffset))}return x.none()}(e)},tl=function(e){var t=e.getSelection();return 0<t.rangeCount?el(t):x.none()},nl={setExact:function(e,t,n,r,o){var i=$c(t,n,r,o);Zc(e,i)},getExact:tl,get:function(e){return tl(e).map(function(e){return wc.exact(e.start(),e.soffset(),e.finish(),e.foffset())})},setRelative:function(e,t,n){var r=Kc(t,n);Zc(e,r)},toNative:function(e){var o=wc.getWin(e).dom(),t=function(e,t,n,r){return Ac.exactToNative(o,e,t,n,r)},n=Yc(e);return Ec.diagnose(o,n).match({ltr:t,rtl:t})},setToElement:function(e,t){var n=Ac.selectNodeContents(e,t);Jc(e,n)},clear:function(e){e.getSelection().removeAllRanges()},clone:function(e,t){var n=Ec.asLtrRange(e,t);return Ac.cloneFragment(n)},replace:function(e,t,n){var r=Ec.asLtrRange(e,t),o=Sc(n,e.document);Ac.replaceWith(r,o)},deleteAt:function(e,t){var n=Ec.asLtrRange(e,t);Ac.deleteContents(n)},forElement:function(e,t){var n=Ac.selectNodeContents(e,t);return wc.range(Y.fromDom(n.startContainer),n.startOffset,Y.fromDom(n.endContainer),n.endOffset)},getFirstRect:function(e,t){var n=Ec.asLtrRange(e,t);return Ac.getFirstRect(n)},getBounds:function(e,t){var n=Ec.asLtrRange(e,t);return Ac.getBounds(n)},getAtPoint:function(e,t,n){return Hc(e,t,n)},findWithin:function(e,t,n){return Vc(e,t,n)},getAsString:function(e,t){var n=Ec.asLtrRange(e,t);return Ac.toString(n)},isCollapsed:function(e,t,n,r){return Ke.eq(e,n)&&t===r}},rl=tinymce.util.Tools.resolve("tinymce.util.VK"),ol=function(e,t,n,r){return al(e,t,mc(n),r)},il=function(e,t,n,r){return al(e,t,gc(n),r)},ul=function(e,t){var n=wc.exact(t,0,t,0);return nl.toNative(n)},al=function(i,e,t,u,n){return t.fold(x.none,x.none,function(e,t){return Sn.first(t).map(function(e){return ul(0,e)})},function(o){return zt.table(o,e).bind(function(e){var t,n,r=Sr.noMenu(o);return i.undoManager.transact(function(){u.insertRowsAfter(e,r)}),t=e,n=Ct.descendants(t,"tr"),E.last(n).bind(function(e){return Wt.descendant(e,"td,th").map(function(e){return ul(0,e)})})})})},cl=["table","li","dl"],ll={handle:function(t,n,r,o){if(t.keyCode===rl.TAB){var i=Gu.getBody(n),u=function(e){var t=dt.name(e);return Ke.eq(e,i)||E.contains(cl,t)},e=n.selection.getRng();if(e.collapsed){var a=Y.fromDom(e.startContainer);zt.cell(a,u).each(function(e){t.preventDefault(),(t.shiftKey?il:ol)(n,u,e,r,o).each(function(e){n.selection.setRng(e)})})}}}},sl={response:F.immutable("selection","kill")},fl=function(t){return function(e){return e===t}},dl=fl(38),ml=fl(40),gl={ltr:{isBackward:fl(37),isForward:fl(39)},rtl:{isBackward:fl(39),isForward:fl(37)},isUp:dl,isDown:ml,isNavigation:function(e){return 37<=e&&e<=40}},pl={convertToRange:function(e,t){var n=Ec.asLtrRange(e,t);return{start:y.constant(Y.fromDom(n.startContainer)),soffset:y.constant(n.startOffset),finish:y.constant(Y.fromDom(n.endContainer)),foffset:y.constant(n.endOffset)}},makeSitus:function(e,t,n,r){return{start:y.constant(hc.on(e,t)),finish:y.constant(hc.on(n,r))}}},hl=Ge.detect().browser.isSafari(),vl=function(e){var t=e!==undefined?e.dom():document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return Xr(n,r)},bl=function(e,t,n){(n!==undefined?n.dom():document).defaultView.scrollTo(e,t)},wl=function(e,t){hl&&g.isFunction(e.dom().scrollIntoViewIfNeeded)?e.dom().scrollIntoViewIfNeeded(!1):e.dom().scrollIntoView(t)},yl={get:vl,to:bl,by:function(e,t,n){(n!==undefined?n.dom():document).defaultView.scrollBy(e,t)},preserve:function(e,t){var n=vl(e);t();var r=vl(e);n.top()===r.top()&&n.left()===r.left()||bl(n.left(),n.top(),e)},capture:function(t){var e=x.none(),n=function(){e=x.some(vl(t))};return n(),{save:n,restore:function(){e.each(function(e){bl(e.left(),e.top(),t)})}}},intoView:wl,intoViewIfNeeded:function(e,t){var n=t.dom().getBoundingClientRect(),r=e.dom().getBoundingClientRect();r.top<n.top?wl(e,!0):r.bottom>n.bottom&&wl(e,!1)},setToElement:function(e,t){var n=$r(t),r=Y.fromDom(e.document);bl(n.left(),n.top(),r)},scrollBarWidth:function(){var e=Y.fromHtml('<div style="width: 100px; height: 100px; overflow: scroll; position: absolute; top: -9999px;"></div>');nn.after(yt.body(),e);var t=e.dom().offsetWidth-e.dom().clientWidth;return un.remove(e),t}};function xl(i){return{elementFromPoint:function(e,t){return x.from(i.document.elementFromPoint(e,t)).map(Y.fromDom)},getRect:function(e){return e.dom().getBoundingClientRect()},getRangedRect:function(e,t,n,r){var o=wc.exact(e,t,n,r);return nl.getFirstRect(i,o).map(function(e){return M.map(e,y.apply)})},getSelection:function(){return nl.get(i).map(function(e){return pl.convertToRange(i,e)})},fromSitus:function(e){var t=wc.relative(e.start(),e.finish());return pl.convertToRange(i,t)},situsFromPoint:function(e,t){return nl.getAtPoint(i,e,t).map(function(e){return{start:y.constant(hc.on(e.start(),e.soffset())),finish:y.constant(hc.on(e.finish(),e.foffset()))}})},clearSelection:function(){nl.clear(i)},setSelection:function(e){nl.setExact(i,e.start(),e.soffset(),e.finish(),e.foffset())},setRelativeSelection:function(e,t){nl.setRelative(i,e,t)},selectContents:function(e){nl.setToElement(i,e)},getInnerHeight:function(){return i.innerHeight},getScrollY:function(){return yl.get(Y.fromDom(i.document)).top()},scrollBy:function(e,t){yl.by(e,t,Y.fromDom(i.document))}}}var Sl=function(n,e,r,t,o){return Ke.eq(r,t)?x.none():ur.identify(r,t,e).bind(function(e){var t=e.boxes().getOr([]);return 0<t.length?(o(n,t,e.start(),e.finish()),x.some(sl.response(x.some(pl.makeSitus(r,0,r,wn(r))),!0))):x.none()})},Cl={sync:function(n,r,e,t,o,i,u){return Ke.eq(e,o)&&t===i?x.none():Wt.closest(e,"td,th",r).bind(function(t){return Wt.closest(o,"td,th",r).bind(function(e){return Sl(n,r,t,e,u)})})},detect:Sl,update:function(e,t,n,r,o){return ur.shiftSelection(r,e,t,o.firstSelectedSelector(),o.lastSelectedSelector()).map(function(e){return o.clear(n),o.selectRange(n,e.boxes(),e.start(),e.finish()),e.boxes()})}},Rl=F.immutableBag(["left","top","right","bottom"],[]),Tl={nu:Rl,moveUp:function(e,t){return Rl({left:e.left(),top:e.top()-t,right:e.right(),bottom:e.bottom()-t})},moveDown:function(e,t){return Rl({left:e.left(),top:e.top()+t,right:e.right(),bottom:e.bottom()+t})},moveBottomTo:function(e,t){var n=e.bottom()-e.top();return Rl({left:e.left(),top:t-n,right:e.right(),bottom:t})},moveTopTo:function(e,t){var n=e.bottom()-e.top();return Rl({left:e.left(),top:t,right:e.right(),bottom:t+n})},getTop:function(e){return e.top()},getBottom:function(e){return e.bottom()},translate:function(e,t,n){return Rl({left:e.left()+t,top:e.top()+n,right:e.right()+t,bottom:e.bottom()+n})},toString:function(e){return"("+e.left()+", "+e.top()+") -> ("+e.right()+", "+e.bottom()+")"}},Al=function(e){return Tl.nu({left:e.left,top:e.top,right:e.right,bottom:e.bottom})},Dl=function(e,t){return x.some(e.getRect(t))},kl=function(e,t,n){return dt.isElement(t)?Dl(e,t).map(Al):dt.isText(t)?(r=e,o=t,i=n,0<=i&&i<wn(o)?r.getRangedRect(o,i,o,i+1):0<i?r.getRangedRect(o,i-1,o,i):x.none()).map(Al):x.none();var r,o,i},Nl=function(e,t){return dt.isElement(t)?Dl(e,t).map(Al):dt.isText(t)?e.getRangedRect(t,0,t,wn(t)).map(Al):x.none()},El=F.immutable("item","mode"),Ol=function(e,t,n,r){var o=r!==undefined?r:Bl;return e.property().parent(t).map(function(e){return El(e,o)})},Bl=function(e,t,n,r){var o=r!==undefined?r:Pl;return n.sibling(e,t).map(function(e){return El(e,o)})},Pl=function(e,t,n,r){var o=r!==undefined?r:Pl,i=e.property().children(t);return n.first(i).map(function(e){return El(e,o)})},Il=[{current:Ol,next:Bl,fallback:x.none()},{current:Bl,next:Pl,fallback:x.some(Ol)},{current:Pl,next:Pl,fallback:x.some(Bl)}],Wl=function(t,n,r,o,e){return e=e!==undefined?e:Il,E.find(e,function(e){return e.current===r}).bind(function(e){return e.current(t,n,o,e.next).orThunk(function(){return e.fallback.bind(function(e){return Wl(t,n,e,o)})})})},Ml={backtrack:Ol,sidestep:Bl,advance:Pl,go:Wl},Ll={left:function(){return{sibling:function(e,t){return e.query().prevSibling(t)},first:function(e){return 0<e.length?x.some(e[e.length-1]):x.none()}}},right:function(){return{sibling:function(e,t){return e.query().nextSibling(t)},first:function(e){return 0<e.length?x.some(e[0]):x.none()}}}},ql=function(t,e,n,r,o,i){return Ml.go(t,e,r,o).bind(function(e){return i(e.item())?x.none():n(e.item())?x.some(e.item()):ql(t,e.item(),n,e.mode(),o,i)})},Fl=function(e,t,n,r){return ql(e,t,n,Ml.sidestep,Ll.left(),r)},jl=function(e,t,n,r){return ql(e,t,n,Ml.sidestep,Ll.right(),r)},zl=function(e,t){return 0===e.property().children(t).length},_l=function(e,t,n,r){return Fl(e,t,n,r)},Hl=function(e,t,n,r){return jl(e,t,n,r)},Vl={before:function(e,t,n){return _l(e,t,y.curry(zl,e),n)},after:function(e,t,n){return Hl(e,t,y.curry(zl,e),n)},seekLeft:_l,seekRight:Hl,walkers:function(){return{left:Ll.left,right:Ll.right}},walk:function(e,t,n,r,o){return Ml.go(e,t,n,r,o)},backtrack:Ml.backtrack,sidestep:Ml.sidestep,advance:Ml.advance},Ul=On(),Gl={gather:function(e,t,n){return Vl.gather(Ul,e,t,n)},before:function(e,t){return Vl.before(Ul,e,t)},after:function(e,t){return Vl.after(Ul,e,t)},seekLeft:function(e,t,n){return Vl.seekLeft(Ul,e,t,n)},seekRight:function(e,t,n){return Vl.seekRight(Ul,e,t,n)},walkers:function(){return Vl.walkers()},walk:function(e,t,n,r){return Vl.walk(Ul,e,t,n,r)}},Xl=mr([{none:[]},{retry:["caret"]}]),Yl=function(t,e,r){return Pt.closest(e,No).fold(y.constant(!1),function(e){return Nl(t,e).exists(function(e){return n=e,(t=r).left()<n.left()||Math.abs(n.right()-t.left())<1||t.left()>n.right();var t,n})})},Kl={point:Tl.getTop,adjuster:function(e,t,n,r,o){var i=Tl.moveUp(o,5);return Math.abs(n.top()-r.top())<1?Xl.retry(i):n.bottom()<o.top()?Xl.retry(i):n.bottom()===o.top()?Xl.retry(Tl.moveUp(o,1)):Yl(e,t,o)?Xl.retry(Tl.translate(i,5,0)):Xl.none()},move:Tl.moveUp,gather:Gl.before},$l={point:Tl.getBottom,adjuster:function(e,t,n,r,o){var i=Tl.moveDown(o,5);return Math.abs(n.bottom()-r.bottom())<1?Xl.retry(i):n.top()>o.bottom()?Xl.retry(i):n.top()===o.bottom()?Xl.retry(Tl.moveDown(o,1)):Yl(e,t,o)?Xl.retry(Tl.translate(i,5,0)):Xl.none()},move:Tl.moveDown,gather:Gl.after},Jl=function(n,r,o,i,u){return 0===u?x.some(i):(c=n,l=i.left(),s=r.point(i),c.elementFromPoint(l,s).filter(function(e){return"table"===dt.name(e)}).isSome()?(t=i,a=u-1,Jl(n,e=r,o,e.move(t,5),a)):n.situsFromPoint(i.left(),r.point(i)).bind(function(e){return e.start().fold(x.none,function(t,e){return Nl(n,t,e).bind(function(e){return r.adjuster(n,t,e,o,i).fold(x.none,function(e){return Jl(n,r,o,e,u-1)})}).orThunk(function(){return x.some(i)})},x.none)}));var e,t,a,c,l,s},Ql=function(t,n,e){var r,o,i,u=t.move(e,5),a=Jl(n,t,e,u,100).getOr(u);return(r=t,o=a,i=n,r.point(o)>i.getInnerHeight()?x.some(r.point(o)-i.getInnerHeight()):r.point(o)<0?x.some(-r.point(o)):x.none()).fold(function(){return n.situsFromPoint(a.left(),t.point(a))},function(e){return n.scrollBy(0,e),n.situsFromPoint(a.left(),t.point(a)-e)})},Zl={tryUp:y.curry(Ql,Kl),tryDown:y.curry(Ql,$l),ieTryUp:function(e,t){return e.situsFromPoint(t.left(),t.top()-5)},ieTryDown:function(e,t){return e.situsFromPoint(t.left(),t.bottom()+5)},getJumpSize:y.constant(5)},es=mr([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),ts=function(e){return Wt.closest(e,"tr")},ns={verify:function(a,e,t,n,r,c,o){return Wt.closest(n,"td,th",o).bind(function(u){return Wt.closest(e,"td,th",o).map(function(i){return Ke.eq(u,i)?Ke.eq(n,u)&&wn(u)===r?c(i):es.none("in same cell"):zn(ts,[u,i]).fold(function(){return t=i,n=u,r=(e=a).getRect(t),(o=e.getRect(n)).right>r.left&&o.left<r.right?es.success():c(i);var e,t,n,r,o},function(e){return c(i)})})}).getOr(es.none("default"))},cata:function(e,t,n,r,o){return e.fold(t,n,r,o)},adt:es},rs={point:F.immutable("element","offset"),delta:F.immutable("element","deltaOffset"),range:F.immutable("element","start","finish"),points:F.immutable("begin","end"),text:F.immutable("element","text")},os=(F.immutable("ancestor","descendants","element","index"),F.immutable("parent","children","element","index")),is=function(e,t){return E.findIndex(e,y.curry(Ke.eq,t))},us=function(r){return rt.parent(r).bind(function(t){var n=rt.children(t);return is(n,r).map(function(e){return os(t,n,r,e)})})},as=function(e){return"br"===dt.name(e)},cs=function(e,t,n){return t(e,n).bind(function(e){return dt.isText(e)&&0===hn.get(e).trim().length?cs(e,t,n):x.some(e)})},ls=function(t,e,n,r){return(o=e,i=n,rt.child(o,i).filter(as).orThunk(function(){return rt.child(o,i-1).filter(as)})).bind(function(e){return r.traverse(e).fold(function(){return cs(e,r.gather,t).map(r.relative)},function(e){return us(e).map(function(e){return hc.on(e.parent(),e.index())})})});var o,i},ss=function(e,t,n,r){var o,i,u;return(as(t)?(o=e,i=t,(u=r).traverse(i).orThunk(function(){return cs(i,u.gather,o)}).map(u.relative)):ls(e,t,n,r)).map(function(e){return{start:y.constant(e),finish:y.constant(e)}})},fs=function(e){return ns.cata(e,function(e){return x.none()},function(){return x.none()},function(e){return x.some(rs.point(e,0))},function(e){return x.some(rs.point(e,wn(e)))})},ds=Ge.detect(),ms=function(r,o,i,u,a,c){return 0===c?x.none():hs(r,o,i,u,a).bind(function(e){var t=r.fromSitus(e),n=ns.verify(r,i,u,t.finish(),t.foffset(),a.failure,o);return ns.cata(n,function(){return x.none()},function(){return x.some(e)},function(e){return Ke.eq(i,e)&&0===u?gs(r,i,u,Tl.moveUp,a):ms(r,o,e,0,a,c-1)},function(e){return Ke.eq(i,e)&&u===wn(e)?gs(r,i,u,Tl.moveDown,a):ms(r,o,e,wn(e),a,c-1)})})},gs=function(t,e,n,r,o){return kl(t,e,n).bind(function(e){return ps(t,o,r(e,Zl.getJumpSize()))})},ps=function(e,t,n){return ds.browser.isChrome()||ds.browser.isSafari()||ds.browser.isFirefox()||ds.browser.isEdge()?t.otherRetry(e,n):ds.browser.isIE()?t.ieRetry(e,n):x.none()},hs=function(t,e,n,r,o){return kl(t,n,r).bind(function(e){return ps(t,o,e)})},vs=function(t,n,r){return(o=t,i=n,u=r,o.getSelection().bind(function(r){return ss(i,r.finish(),r.foffset(),u).fold(function(){return x.some(rs.point(r.finish(),r.foffset()))},function(e){var t=o.fromSitus(e),n=ns.verify(o,r.finish(),r.foffset(),t.finish(),t.foffset(),u.failure,i);return fs(n)})})).bind(function(e){return ms(t,n,e.element(),e.offset(),r,20).map(t.fromSitus)});var o,i,u},bs=function(e,t,n){return Pt.ancestor(e,t,n).isSome()},ws=Ge.detect(),ys=function(r,o,i,e,u){return Wt.closest(e,"td,th",o).bind(function(n){return Wt.closest(n,"table",o).bind(function(e){return t=e,bs(u,function(e){return rt.parent(e).exists(function(e){return Ke.eq(e,t)})})?vs(r,o,i).bind(function(t){return Wt.closest(t.finish(),"td,th",o).map(function(e){return{start:y.constant(n),finish:y.constant(e),range:y.constant(t)}})}):x.none();var t})})},xs=function(e,t,n,r,o,i){return ws.browser.isIE()?x.none():i(r,t).orThunk(function(){return ys(e,t,n,r,o).map(function(e){var t=e.range();return sl.response(x.some(pl.makeSitus(t.start(),t.soffset(),t.finish(),t.foffset())),!0)})})},Ss=function(e,t,n,r,o,i,u){return ys(e,n,r,o,i).bind(function(e){return Cl.detect(t,n,e.start(),e.finish(),u)})},Cs=function(e,r){return Wt.closest(e,"tr",r).bind(function(n){return Wt.closest(n,"table",r).bind(function(e){var t=Ct.descendants(e,"tr");return Ke.eq(n,t[0])?Gl.seekLeft(e,function(e){return Sn.last(e).isSome()},r).map(function(e){var t=wn(e);return sl.response(x.some(pl.makeSitus(e,t,e,t)),!0)}):x.none()})})},Rs=function(e,r){return Wt.closest(e,"tr",r).bind(function(n){return Wt.closest(n,"table",r).bind(function(e){var t=Ct.descendants(e,"tr");return Ke.eq(n,t[t.length-1])?Gl.seekRight(e,function(e){return Sn.first(e).isSome()},r).map(function(e){return sl.response(x.some(pl.makeSitus(e,0,e,0)),!0)}):x.none()})})},Ts=function(e,t){return Wt.closest(e,"td,th",t)},As={down:{traverse:rt.nextSibling,gather:Gl.after,relative:hc.before,otherRetry:Zl.tryDown,ieRetry:Zl.ieTryDown,failure:ns.adt.failedDown},up:{traverse:rt.prevSibling,gather:Gl.before,relative:hc.before,otherRetry:Zl.tryUp,ieRetry:Zl.ieTryUp,failure:ns.adt.failedUp}},Ds=F.immutable("rows","cols"),ks={mouse:function(e,t,n,r){var o,i,u,a,c,l,s=xl(e),f=(o=s,i=t,u=n,a=r,c=x.none(),l=function(){c=x.none()},{mousedown:function(e){a.clear(i),c=Ts(e.target(),u)},mouseover:function(e){c.each(function(r){a.clear(i),Ts(e.target(),u).each(function(n){ur.identify(r,n,u).each(function(e){var t=e.boxes().getOr([]);(1<t.length||1===t.length&&!Ke.eq(r,n))&&(a.selectRange(i,t,e.start(),e.finish()),o.selectContents(n))})})})},mouseup:function(){c.each(l)}});return{mousedown:f.mousedown,mouseover:f.mouseover,mouseup:f.mouseup}},keyboard:function(e,c,l,s){var f=xl(e),d=function(){return s.clear(c),x.none()};return{keydown:function(e,t,n,r,o,i){var u=e.raw().which,a=!0===e.raw().shiftKey;return ur.retrieve(c,s.selectedSelector()).fold(function(){return gl.isDown(u)&&a?y.curry(Ss,f,c,l,As.down,r,t,s.selectRange):gl.isUp(u)&&a?y.curry(Ss,f,c,l,As.up,r,t,s.selectRange):gl.isDown(u)?y.curry(xs,f,l,As.down,r,t,Rs):gl.isUp(u)?y.curry(xs,f,l,As.up,r,t,Cs):x.none},function(t){var e=function(e){return function(){return qo(e,function(e){return Cl.update(e.rows(),e.cols(),c,t,s)}).fold(function(){return ur.getEdges(c,s.firstSelectedSelector(),s.lastSelectedSelector()).map(function(e){var t=gl.isDown(u)||i.isForward(u)?hc.after:hc.before;return f.setRelativeSelection(hc.on(e.first(),0),t(e.table())),s.clear(c),sl.response(x.none(),!0)})},function(e){return x.some(sl.response(x.none(),!0))})}};return gl.isDown(u)&&a?e([Ds(1,0)]):gl.isUp(u)&&a?e([Ds(-1,0)]):i.isBackward(u)&&a?e([Ds(0,-1),Ds(-1,0)]):i.isForward(u)&&a?e([Ds(0,1),Ds(1,0)]):gl.isNavigation(u)&&!1===a?d:x.none})()},keyup:function(t,n,r,o,i){return ur.retrieve(c,s.selectedSelector()).fold(function(){var e=t.raw().which;return 0==(!0===t.raw().shiftKey)?x.none():gl.isNavigation(e)?Cl.sync(c,l,n,r,o,i,s.selectRange):x.none()},x.none)}}}},Ns=function(t,e){E.each(e,function(e){bi.remove(t,e)})},Es=function(t){return function(e){bi.add(e,t)}},Os=function(t){return function(e){Ns(e,t)}},Bs={byClass:function(o){var i=Es(o.selected()),n=Os([o.selected(),o.lastSelected(),o.firstSelected()]),u=function(e){var t=Ct.descendants(e,o.selectedSelector());E.each(t,n)};return{clear:u,selectRange:function(e,t,n,r){u(e),E.each(t,i),bi.add(n,o.firstSelected()),bi.add(r,o.lastSelected())},selectedSelector:o.selectedSelector,firstSelectedSelector:o.firstSelectedSelector,lastSelectedSelector:o.lastSelectedSelector}},byAttr:function(o){var n=function(e){vt.remove(e,o.selected()),vt.remove(e,o.firstSelected()),vt.remove(e,o.lastSelected())},i=function(e){vt.set(e,o.selected(),"1")},u=function(e){var t=Ct.descendants(e,o.selectedSelector());E.each(t,n)};return{clear:u,selectRange:function(e,t,n,r){u(e),E.each(t,i),vt.set(n,o.firstSelected(),"1"),vt.set(r,o.lastSelected(),"1")},selectedSelector:o.selectedSelector,firstSelectedSelector:o.firstSelectedSelector,lastSelectedSelector:o.lastSelectedSelector}}};function Ps(p,h){var v=F.immutableBag(["mousedown","mouseover","mouseup","keyup","keydown"],[]),b=x.none(),w=Bs.byAttr(dr);return p.on("init",function(e){var r=p.getWin(),i=Gu.getBody(p),t=Gu.getIsRoot(p),n=ks.mouse(r,i,t,w),a=ks.keyboard(r,i,t,w),c=function(e,t){!0===e.raw().shiftKey&&(t.kill()&&e.kill(),t.selection().each(function(e){var t=wc.relative(e.start(),e.finish()),n=Ec.asLtrRange(r,t);p.selection.setRng(n)}))},o=function(e){var t=s(e);if(t.raw().shiftKey&&gl.isNavigation(t.raw().which)){var n=p.selection.getRng(),r=Y.fromDom(n.startContainer),o=Y.fromDom(n.endContainer);a.keyup(t,r,n.startOffset,o,n.endOffset).each(function(e){c(t,e)})}},u=function(e){var t=s(e);h().each(function(e){e.hideBars()});var n=p.selection.getRng(),r=Y.fromDom(p.selection.getStart()),o=Y.fromDom(n.startContainer),i=Y.fromDom(n.endContainer),u=Ju.directionAt(r).isRtl()?gl.rtl:gl.ltr;a.keydown(t,o,n.startOffset,i,n.endOffset,u).each(function(e){c(t,e)}),h().each(function(e){e.showBars()})},l=function(e){return e.hasOwnProperty("x")&&e.hasOwnProperty("y")},s=function(e){var t=Y.fromDom(e.target),n=function(){e.stopPropagation()},r=function(){e.preventDefault()},o=y.compose(r,n);return{target:y.constant(t),x:y.constant(l(e)?e.x:null),y:y.constant(l(e)?e.y:null),stop:n,prevent:r,kill:o,raw:y.constant(e)}},f=function(e){return 0===e.button},d=function(e){f(e)&&n.mousedown(s(e))},m=function(e){var t;((t=e).buttons===undefined||0!=(1&t.buttons))&&n.mouseover(s(e))},g=function(e){f(e)&&n.mouseup(s(e))};p.on("mousedown",d),p.on("mouseover",m),p.on("mouseup",g),p.on("keyup",o),p.on("keydown",u),p.on("nodechange",function(){var e=p.selection,t=Y.fromDom(e.getStart()),n=Y.fromDom(e.getEnd()),r=zt.table(t),o=zt.table(n);r.bind(function(t){return o.bind(function(e){return Ke.eq(t,e)?x.some(!0):x.none()})}).fold(function(){w.clear(i)},y.noop)}),b=x.some(v({mousedown:d,mouseover:m,mouseup:g,keyup:o,keydown:u}))}),{clear:w.clear,destroy:function(){b.each(function(e){})}}}var Is=function(t){return{get:function(){var e=Gu.getBody(t);return ar(e,dr.selectedSelector()).fold(function(){return t.selection.getStart()===undefined?pr.none():pr.single(t.selection)},function(e){return pr.multiple(e)})}}},Ws=ga.each,Ms={addButtons:function(t){var n=[];function e(e){return function(){t.execCommand(e)}}Ws("inserttable tableprops deletetable | cell row column".split(" "),function(e){"|"===e?n.push({text:"-"}):n.push(t.menuItems[e])}),t.addButton("table",{type:"menubutton",title:"Table",menu:n}),t.addButton("tableprops",{title:"Table properties",onclick:y.curry(Ba,t,!0),icon:"table"}),t.addButton("tabledelete",{title:"Delete table",onclick:e("mceTableDelete")}),t.addButton("tablecellprops",{title:"Cell properties",onclick:e("mceTableCellProps")}),t.addButton("tablemergecells",{title:"Merge cells",onclick:e("mceTableMergeCells")}),t.addButton("tablesplitcells",{title:"Split cell",onclick:e("mceTableSplitCells")}),t.addButton("tableinsertrowbefore",{title:"Insert row before",onclick:e("mceTableInsertRowBefore")}),t.addButton("tableinsertrowafter",{title:"Insert row after",onclick:e("mceTableInsertRowAfter")}),t.addButton("tabledeleterow",{title:"Delete row",onclick:e("mceTableDeleteRow")}),t.addButton("tablerowprops",{title:"Row properties",onclick:e("mceTableRowProps")}),t.addButton("tablecutrow",{title:"Cut row",onclick:e("mceTableCutRow")}),t.addButton("tablecopyrow",{title:"Copy row",onclick:e("mceTableCopyRow")}),t.addButton("tablepasterowbefore",{title:"Paste row before",onclick:e("mceTablePasteRowBefore")}),t.addButton("tablepasterowafter",{title:"Paste row after",onclick:e("mceTablePasteRowAfter")}),t.addButton("tableinsertcolbefore",{title:"Insert column before",onclick:e("mceTableInsertColBefore")}),t.addButton("tableinsertcolafter",{title:"Insert column after",onclick:e("mceTableInsertColAfter")}),t.addButton("tabledeletecol",{title:"Delete column",onclick:e("mceTableDeleteCol")})},addToolbars:function(t){var e,n=""===(e=t.getParam("table_toolbar",Qu))||!1===e?[]:g.isString(e)?e.split(/[ ,]/):g.isArray(e)?e:[];0<n.length&&t.addContextToolbar(function(e){return t.dom.is(e,"table")&&t.getBody().contains(e)},n.join(" "))}},Ls={addMenuItems:function(o,n){var r=x.none(),i=[],u=[],a=[],c=[],l=function(e){e.disabled(!0)},s=function(e){e.disabled(!1)},e=function(){var t=this;i.push(t),r.fold(function(){l(t)},function(e){s(t)})},t=function(){var t=this;u.push(t),r.fold(function(){l(t)},function(e){s(t)})};o.on("init",function(){o.on("nodechange",function(e){var t=x.from(o.dom.getParent(o.selection.getStart(),"th,td"));(r=t.bind(function(e){var t=Y.fromDom(e);return zt.table(t).map(function(e){return Sr.forMenu(n,e,t)})})).fold(function(){E.each(i,l),E.each(u,l),E.each(a,l),E.each(c,l)},function(t){E.each(i,s),E.each(u,s),E.each(a,function(e){e.disabled(t.mergable().isNone())}),E.each(c,function(e){e.disabled(t.unmergable().isNone())})})})});var f=function(e,t,n,r){var o,i,u,a,c,l=r.getEl().getElementsByTagName("table")[0],s=r.isRtl()||"tl-tr"===r.parent().rel;for(l.nextSibling.innerHTML=t+1+" x "+(n+1),s&&(t=9-t),i=0;i<10;i++)for(o=0;o<10;o++)a=l.rows[i].childNodes[o].firstChild,c=(s?t<=o:o<=t)&&i<=n,e.dom.toggleClass(a,"mce-active",c),c&&(u=a);return u.parentNode},d=!1===o.getParam("table_grid",!0,"boolean")?{text:"Table",icon:"table",context:"table",onclick:y.curry(Ba,o)}:{text:"Table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(e){e.aria&&(this.parent().hideAll(),e.stopImmediatePropagation(),Ba(o))},onshow:function(){f(o,0,0,this.menu.items()[0])},onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");o.dom.removeClass(e,"mce-active"),o.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:function(){var e="";e='<table role="grid" class="mce-grid mce-grid-border" aria-readonly="true">';for(var t=0;t<10;t++){e+="<tr>";for(var n=0;n<10;n++)e+='<td role="gridcell" tabindex="-1"><a id="mcegrid'+(10*t+n)+'" href="#" data-mce-x="'+n+'" data-mce-y="'+t+'"></a></td>';e+="</tr>"}return e+="</table>",e+='<div class="mce-text-center" role="presentation">1 x 1</div>'}(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t,n,r=e.target;"A"===r.tagName.toUpperCase()&&(t=parseInt(r.getAttribute("data-mce-x"),10),n=parseInt(r.getAttribute("data-mce-y"),10),(this.isRtl()||"tl-tr"===this.parent().rel)&&(t=9-t),t===this.lastX&&n===this.lastY||(f(o,t,n,e.control),this.lastX=t,this.lastY=n))},onclick:function(e){var t=this;"A"===e.target.tagName.toUpperCase()&&(e.preventDefault(),e.stopPropagation(),t.parent().cancel(),o.undoManager.transact(function(){Na(o,t.lastX+1,t.lastY+1)}),o.addVisual())}}]};function m(e){return function(){o.execCommand(e)}}var g={text:"Table properties",context:"table",onPostRender:e,onclick:y.curry(Ba,o,!0)},p={text:"Delete table",context:"table",onPostRender:e,cmd:"mceTableDelete"},h={text:"Row",context:"table",menu:[{text:"Insert row before",onclick:m("mceTableInsertRowBefore"),onPostRender:t},{text:"Insert row after",onclick:m("mceTableInsertRowAfter"),onPostRender:t},{text:"Delete row",onclick:m("mceTableDeleteRow"),onPostRender:t},{text:"Row properties",onclick:m("mceTableRowProps"),onPostRender:t},{text:"-"},{text:"Cut row",onclick:m("mceTableCutRow"),onPostRender:t},{text:"Copy row",onclick:m("mceTableCopyRow"),onPostRender:t},{text:"Paste row before",onclick:m("mceTablePasteRowBefore"),onPostRender:t},{text:"Paste row after",onclick:m("mceTablePasteRowAfter"),onPostRender:t}]},v={text:"Column",context:"table",menu:[{text:"Insert column before",onclick:m("mceTableInsertColBefore"),onPostRender:t},{text:"Insert column after",onclick:m("mceTableInsertColAfter"),onPostRender:t},{text:"Delete column",onclick:m("mceTableDeleteCol"),onPostRender:t}]},b={separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:m("mceTableCellProps"),onPostRender:t},{text:"Merge cells",onclick:m("mceTableMergeCells"),onPostRender:function(){var t=this;a.push(t),r.fold(function(){l(t)},function(e){t.disabled(e.mergable().isNone())})}},{text:"Split cell",onclick:m("mceTableSplitCells"),onPostRender:function(){var t=this;c.push(t),r.fold(function(){l(t)},function(e){t.disabled(e.unmergable().isNone())})}}]};o.addMenuItem("inserttable",d),o.addMenuItem("tableprops",g),o.addMenuItem("deletetable",p),o.addMenuItem("row",h),o.addMenuItem("column",v),o.addMenuItem("cell",b)}},qs=function(n,o){return{insertTable:function(e,t){return Na(n,e,t)},setClipboardRows:function(e){return t=e,n=o,r=E.map(t,Y.fromDom),void n.set(x.from(r));var t,n,r},getClipboardRows:function(){return o.get().fold(function(){},function(e){return E.map(e,function(e){return e.dom()})})}}};u.add("table",function(t){var n=uc(t),e=Ps(t,n.lazyResize),r=da(t,n.lazyWire),o=Is(t),i=fo(x.none());return Ia.registerCommands(t,r,e,o,i),Cr.registerEvents(t,o,r,e),Ls.addMenuItems(t,o),Ms.addButtons(t),Ms.addToolbars(t),t.on("PreInit",function(){t.serializer.addTempAttr(dr.firstSelected()),t.serializer.addTempAttr(dr.lastSelected())}),ta(t)&&t.on("keydown",function(e){ll.handle(e,t,r,n.lazyWire)}),t.on("remove",function(){n.destroy(),e.destroy()}),qs(t,i)})}();