All Meta Tags - Version 4.47

Version Description

  • Jul 19, 2021 =
  • Maintenance: Ensure compatibility with upcoming WordPress 5.8.
  • Framework update: The CodeMirror library has been updated to the latest version v5.62.0.
Download this release

Release Info

Developer Arthur Gareginyan
Plugin Icon 128x128 All Meta Tags
Version 4.47
Comparing to
See all releases

Code changes from version 4.46 to 4.47

all-meta-tags.php CHANGED
@@ -5,7 +5,7 @@
5
  * Description: Easily and safely add your custom meta tags to the WordPress website's head section. This is a must have tool for authors and website's owners.
6
  * Author: Space X-Chimp
7
  * Author URI: https://www.spacexchimp.com
8
- * Version: 4.46
9
  * License: GPL3
10
  * Text Domain: all-meta-tags
11
  * Domain Path: /languages/
5
  * Description: Easily and safely add your custom meta tags to the WordPress website's head section. This is a must have tool for authors and website's owners.
6
  * Author: Space X-Chimp
7
  * Author URI: https://www.spacexchimp.com
8
+ * Version: 4.47
9
  * License: GPL3
10
  * Text Domain: all-meta-tags
11
  * Domain Path: /languages/
inc/lib/codemirror/AUTHORS CHANGED
@@ -10,6 +10,7 @@ Abhishek Gahlot
10
  Adam Ahmed
11
  Adam King
12
  Adam Particka
 
13
  adanlobato
14
  Adán Lobato
15
  Aditya Toshniwal
@@ -28,6 +29,7 @@ AlbertHilb
28
  Alberto González Palomo
29
  Alberto Pose
30
  Albert Xing
 
31
  Alexander Pavlov
32
  Alexander Schepanovski
33
  Alexander Shvets
@@ -36,6 +38,7 @@ Alexandre Bique
36
  Alex Churchill
37
  alexey-k
38
  Alex Piggott
 
39
  Aliaksei Chapyzhenka
40
  Allen Sarkisyan
41
  Ami Fischman
@@ -177,6 +180,7 @@ CodeBitt
177
  coderaiser
178
  Cole R Lawrence
179
  ComFreek
 
180
  Cristian Prieto
181
  Curran Kelleher
182
  Curtis Gagliardi
@@ -208,6 +212,7 @@ David Barnett
208
  David H. Bronke
209
  David Mignot
210
  David Pathakjee
 
211
  David Rodrigues
212
  David Santana
213
  David Vázquez
@@ -221,6 +226,7 @@ Dick Choi
221
  Diego Fernandez
222
  dignifiedquire
223
  Dimage Sapelkin
 
224
  Dinindu D. Wanniarachchi
225
  dmaclach
226
  Dmitry Kiselyov
@@ -243,6 +249,7 @@ edoroshenko
243
  edsharp
244
  ekhaled
245
  Elisée
 
246
  elpnt
247
  Emmanuel Schanzer
248
  Enam Mijbah Noor
@@ -250,6 +257,7 @@ Eric Allam
250
  Eric Bogard
251
  Erik Demaine
252
  Erik Welander
 
253
  eustas
254
  Evan Minsk
255
  Fabien Dubosson
@@ -260,6 +268,7 @@ Fauntleroy
260
  fbuchinger
261
  feizhang365
262
  Felipe Lalanne
 
263
  Felix Raab
264
  ficristo
265
  Filip Noetzel
@@ -325,6 +334,7 @@ Heanes
325
  Hector Oswaldo Caballero
326
  Hein Htat
327
  Hélio
 
328
  Hendrik Wallbaum
329
  Henrik Haugbølle
330
  Herculano Campos
@@ -338,6 +348,7 @@ Hugues Malphettes
338
  Ian Beck
339
  Ian Davies
340
  Ian Dickinson
 
341
  ianhi
342
  Ian Rose
343
  Ian Wehrman
@@ -352,13 +363,16 @@ Ilya Zverev
352
  Ingo Richter
353
  Intervue
354
  Irakli Gozalishvili
 
355
  Ivan Kurnosov
356
  Ivoah
357
  Jack Douglas
358
  Jacob Lee
359
  Jaimin
360
  Jake Peyser
 
361
  Jakob Miland
 
362
  Jakub Vrana
363
  Jakub Vrána
364
  James Campos
@@ -403,6 +417,7 @@ jochenberger
403
  Jochen Berger
404
  Joel Einbinder
405
  joelpinheiro
 
406
  joewalsh
407
  Johan Ask
408
  Johannes
@@ -420,12 +435,14 @@ Jonas Helfer
420
  Jonathan Dierksen
421
  Jonathan Hart
422
  Jonathan Malmaud
 
423
  Jon Gacnik
424
  jongalloway
425
  Jon Malmaud
426
  Jon Sangster
427
  Joo
428
  Joost-Wim Boekesteijn
 
429
  Joseph Pecoraro
430
  Josh Barnes
431
  Josh Cohen
@@ -462,9 +479,11 @@ Kevin Muret
462
  Kevin Sawicki
463
  Kevin Ushey
464
  Kier Darby
 
465
  Klaus Silveira
466
  Koh Zi Han, Cliff
467
  komakino
 
468
  Konstantin Lopuhin
469
  koops
470
  Kris Ciccarello
@@ -486,10 +505,12 @@ Leo Baschy
486
  Leonid Khachaturov
487
  Leon Sorokin
488
  Leonya Khachaturov
 
489
  Liam Newman
490
  Libo Cannici
491
  Lior Goldberg
492
  Lior Shub
 
493
  LloydMilligan
494
  LM
495
  lochel
@@ -502,6 +523,7 @@ Lucas Buchala
502
  Luciano Longo
503
  Luciano Santana
504
  Lu Fangjian
 
505
  Luke Browning
506
  Luke Granger-Brown
507
  Luke Stagner
@@ -516,6 +538,7 @@ Manuel Rego Casasnovas
516
  Marat Dreizin
517
  Marcel Gerber
518
  Marcelo Camargo
 
519
  Marco Aurélio
520
  Marco Munizaga
521
  Marcus Bointon
@@ -524,6 +547,7 @@ Marijn Haverbeke
524
  Mário Gonçalves
525
  Mario Pietsch
526
  Mark Anderson
 
527
  Mark Dalgleish
528
  Mark Hamstra
529
  Mark Lentczner
@@ -537,10 +561,12 @@ Martin Hasoň
537
  Martin Hunt
538
  Martin Laine
539
  Martin Zagora
 
540
  Mason Malone
541
  Mateusz Paprocki
542
  Mathias Bynens
543
  mats cronqvist
 
544
  Matt Gaide
545
  Matthew Bauer
546
  Matthew Beale
@@ -571,6 +597,7 @@ meshuamam
571
  Metatheos
572
  Micah Dubinko
573
  Michael
 
574
  Michael Goderbauer
575
  Michael Grey
576
  Michael Kaminsky
@@ -598,6 +625,7 @@ Miraculix87
598
  misfo
599
  mkaminsky11
600
  mloginov
 
601
  Moritz Schubotz (physikerwelt)
602
  Moritz Schwörer
603
  Moshe Wajnberg
@@ -608,6 +636,7 @@ Mu-An ✌️ Chiou
608
  Mu-An Chiou
609
  mzabuawala
610
  Narciso Jaramillo
 
611
  Nathan Williams
612
  ndr
613
  Neil Anderson
@@ -634,6 +663,7 @@ Nikolaj Kappler
634
  Nikolay Kostov
635
  nilp0inter
636
  Nils Knappmeier
 
637
  Nisarg Jhaveri
638
  nlwillia
639
  noragrossman
@@ -678,19 +708,23 @@ Peter Flynn
678
  peterkroon
679
  Peter Kroon
680
  Peter László
 
681
  Philipp A
682
  Philipp Markovics
683
  Philip Stadermann
684
  Pi Delport
685
  Pierre Gerold
686
  Pieter Ouwerkerk
 
687
  Pontus Melke
688
  prasanthj
689
  Prasanth J
690
  Prayag Verma
691
  prendota
692
  Prendota
 
693
  Qiang Li
 
694
  Radek Piórkowski
695
  Rahul
696
  Rahul Anand
@@ -720,7 +754,9 @@ Roberto Abdelkader Martínez Pérez
720
  robertop23
721
  Roberto Vidal
722
  Robert Plummer
 
723
  Roman Janusz
 
724
  Rrandom
725
  Rrrandom
726
  Ruslan Osmanov
@@ -751,6 +787,7 @@ Scott Aikin
751
  Scott Feeney
752
  Scott Goodhew
753
  Seb35
 
754
  Sebastian Wilzbach
755
  Sebastian Zaha
756
  Seren D
@@ -771,7 +808,9 @@ Siamak Mokhtari
771
  Siddhartha Gunti
772
  silverwind
773
  Simon Edwards
 
774
  sinkuu
 
775
  snasa
776
  soliton4
777
  sonson
@@ -781,6 +820,7 @@ srajanpaliwal
781
  Stanislav Oaserele
782
  stan-z
783
  Stas Kobzar
 
784
  Stefan Borsje
785
  Steffen Beyer
786
  Steffen Bruchmann
@@ -789,6 +829,7 @@ Stephane Moore
789
  Stephen Lavelle
790
  Steve Champagne
791
  Steve Hoover
 
792
  Steve O'Hara
793
  stockiNail
794
  stoskov
@@ -812,6 +853,7 @@ Thaddee Tyl
812
  thanasis
813
  TheHowl
814
  themrmax
 
815
  think
816
  Thomas Brouard
817
  Thomas Dvornik
@@ -838,6 +880,7 @@ Tom MacWright
838
  Tom McLaughlin
839
  Tony Jian
840
  tophf
 
841
  Torgeir Thoresen
842
  totalamd
843
  Travis Heppe
@@ -876,6 +919,8 @@ wonderboyjon
876
  Wu Cheng-Han
877
  Xavier Mendez
878
  Yang Guo
 
 
879
  Yassin N. Hassan
880
  YNH Webdev
881
  yoongu
10
  Adam Ahmed
11
  Adam King
12
  Adam Particka
13
+ Adam Wight
14
  adanlobato
15
  Adán Lobato
16
  Aditya Toshniwal
29
  Alberto González Palomo
30
  Alberto Pose
31
  Albert Xing
32
+ Alexander Marks
33
  Alexander Pavlov
34
  Alexander Schepanovski
35
  Alexander Shvets
38
  Alex Churchill
39
  alexey-k
40
  Alex Piggott
41
+ Alf Eaton
42
  Aliaksei Chapyzhenka
43
  Allen Sarkisyan
44
  Ami Fischman
180
  coderaiser
181
  Cole R Lawrence
182
  ComFreek
183
+ Cornelius Weig
184
  Cristian Prieto
185
  Curran Kelleher
186
  Curtis Gagliardi
212
  David H. Bronke
213
  David Mignot
214
  David Pathakjee
215
+ David R. Myers
216
  David Rodrigues
217
  David Santana
218
  David Vázquez
226
  Diego Fernandez
227
  dignifiedquire
228
  Dimage Sapelkin
229
+ Dimitri Mitropoulos
230
  Dinindu D. Wanniarachchi
231
  dmaclach
232
  Dmitry Kiselyov
249
  edsharp
250
  ekhaled
251
  Elisée
252
+ Elmar Peise
253
  elpnt
254
  Emmanuel Schanzer
255
  Enam Mijbah Noor
257
  Eric Bogard
258
  Erik Demaine
259
  Erik Welander
260
+ erosman
261
  eustas
262
  Evan Minsk
263
  Fabien Dubosson
268
  fbuchinger
269
  feizhang365
270
  Felipe Lalanne
271
+ Felipe S. S. Schneider
272
  Felix Raab
273
  ficristo
274
  Filip Noetzel
334
  Hector Oswaldo Caballero
335
  Hein Htat
336
  Hélio
337
+ Hendrik Erz
338
  Hendrik Wallbaum
339
  Henrik Haugbølle
340
  Herculano Campos
348
  Ian Beck
349
  Ian Davies
350
  Ian Dickinson
351
+ Ian Henderson
352
  ianhi
353
  Ian Rose
354
  Ian Wehrman
363
  Ingo Richter
364
  Intervue
365
  Irakli Gozalishvili
366
+ iteriani
367
  Ivan Kurnosov
368
  Ivoah
369
  Jack Douglas
370
  Jacob Lee
371
  Jaimin
372
  Jake Peyser
373
+ Jakob Kummerow
374
  Jakob Miland
375
+ Jakub T. Jankiewicz
376
  Jakub Vrana
377
  Jakub Vrána
378
  James Campos
417
  Jochen Berger
418
  Joel Einbinder
419
  joelpinheiro
420
+ Joe Predham
421
  joewalsh
422
  Johan Ask
423
  Johannes
435
  Jonathan Dierksen
436
  Jonathan Hart
437
  Jonathan Malmaud
438
+ Jonathan Rascher
439
  Jon Gacnik
440
  jongalloway
441
  Jon Malmaud
442
  Jon Sangster
443
  Joo
444
  Joost-Wim Boekesteijn
445
+ José dBruxelles
446
  Joseph Pecoraro
447
  Josh Barnes
448
  Josh Cohen
479
  Kevin Sawicki
480
  Kevin Ushey
481
  Kier Darby
482
+ Kim-Anh Tran
483
  Klaus Silveira
484
  Koh Zi Han, Cliff
485
  komakino
486
+ Konstantin Chernenko
487
  Konstantin Lopuhin
488
  koops
489
  Kris Ciccarello
505
  Leonid Khachaturov
506
  Leon Sorokin
507
  Leonya Khachaturov
508
+ lexer2086
509
  Liam Newman
510
  Libo Cannici
511
  Lior Goldberg
512
  Lior Shub
513
+ lishid
514
  LloydMilligan
515
  LM
516
  lochel
523
  Luciano Longo
524
  Luciano Santana
525
  Lu Fangjian
526
+ Łukasz Wielgus
527
  Luke Browning
528
  Luke Granger-Brown
529
  Luke Stagner
538
  Marat Dreizin
539
  Marcel Gerber
540
  Marcelo Camargo
541
+ Marc Espín
542
  Marco Aurélio
543
  Marco Munizaga
544
  Marcus Bointon
547
  Mário Gonçalves
548
  Mario Pietsch
549
  Mark Anderson
550
+ Mark Boyes
551
  Mark Dalgleish
552
  Mark Hamstra
553
  Mark Lentczner
561
  Martin Hunt
562
  Martin Laine
563
  Martin Zagora
564
+ Masahiro MATAYOSHI
565
  Mason Malone
566
  Mateusz Paprocki
567
  Mathias Bynens
568
  mats cronqvist
569
+ Matt Diehl
570
  Matt Gaide
571
  Matthew Bauer
572
  Matthew Beale
597
  Metatheos
598
  Micah Dubinko
599
  Michael
600
+ Michael Chirico
601
  Michael Goderbauer
602
  Michael Grey
603
  Michael Kaminsky
625
  misfo
626
  mkaminsky11
627
  mloginov
628
+ mlsad3
629
  Moritz Schubotz (physikerwelt)
630
  Moritz Schwörer
631
  Moshe Wajnberg
636
  Mu-An Chiou
637
  mzabuawala
638
  Narciso Jaramillo
639
+ nathanlesage
640
  Nathan Williams
641
  ndr
642
  Neil Anderson
663
  Nikolay Kostov
664
  nilp0inter
665
  Nils Knappmeier
666
+ Nina Pypchenko
667
  Nisarg Jhaveri
668
  nlwillia
669
  noragrossman
708
  peterkroon
709
  Peter Kroon
710
  Peter László
711
+ Phil DeJarnett
712
  Philipp A
713
  Philipp Markovics
714
  Philip Stadermann
715
  Pi Delport
716
  Pierre Gerold
717
  Pieter Ouwerkerk
718
+ Piyush
719
  Pontus Melke
720
  prasanthj
721
  Prasanth J
722
  Prayag Verma
723
  prendota
724
  Prendota
725
+ ps173
726
  Qiang Li
727
+ quiddity-wp
728
  Radek Piórkowski
729
  Rahul
730
  Rahul Anand
754
  robertop23
755
  Roberto Vidal
756
  Robert Plummer
757
+ Roman Frolov
758
  Roman Janusz
759
+ Rongjian Zhang
760
  Rrandom
761
  Rrrandom
762
  Ruslan Osmanov
787
  Scott Feeney
788
  Scott Goodhew
789
  Seb35
790
+ Sebastian Ślepowroński
791
  Sebastian Wilzbach
792
  Sebastian Zaha
793
  Seren D
808
  Siddhartha Gunti
809
  silverwind
810
  Simon Edwards
811
+ Simon Huber
812
  sinkuu
813
+ Slava Rozhnev
814
  snasa
815
  soliton4
816
  sonson
820
  Stanislav Oaserele
821
  stan-z
822
  Stas Kobzar
823
+ stasoid
824
  Stefan Borsje
825
  Steffen Beyer
826
  Steffen Bruchmann
829
  Stephen Lavelle
830
  Steve Champagne
831
  Steve Hoover
832
+ Steven Yung
833
  Steve O'Hara
834
  stockiNail
835
  stoskov
853
  thanasis
854
  TheHowl
855
  themrmax
856
+ Thiemo Kreuz
857
  think
858
  Thomas Brouard
859
  Thomas Dvornik
880
  Tom McLaughlin
881
  Tony Jian
882
  tophf
883
+ Torben Bundt
884
  Torgeir Thoresen
885
  totalamd
886
  Travis Heppe
919
  Wu Cheng-Han
920
  Xavier Mendez
921
  Yang Guo
922
+ Yash Singh
923
+ Yash-Singh1
924
  Yassin N. Hassan
925
  YNH Webdev
926
  yoongu
inc/lib/codemirror/CHANGELOG.md CHANGED
@@ -1,3 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ## 5.58.1 (2020-09-23)
2
 
3
  ### Bug fixes
@@ -190,7 +322,7 @@ Make Shift-Delete to cut work on Firefox.
190
 
191
  [handlebars mode](https://codemirror.net/mode/handlebars/): Fix triple-brace support.
192
 
193
- [searchcursor addon](https://codemirror.net/doc/manual.html#addon_searchcursor): Support mathing `$` in reverse regexp search.
194
 
195
  [panel addon](https://codemirror.net/doc/manual.html#addon_panel): Don't get confused by changing panel sizes.
196
 
@@ -446,7 +578,7 @@ Add `hintWords` (basic completion) helper to [clojure](https://codemirror.net/mo
446
 
447
  [panel addon](https://codemirror.net/doc/manual.html#addon_panel): Fix problem where replacing the last remaining panel dropped the newly added panel.
448
 
449
- [hardwrap addon](https://codemirror.net/doc/manual.html#addon_hardwrap): Fix an infinite loop when the indention is greater than the target column.
450
 
451
  [jinja2](https://codemirror.net/mode/jinja2/) and [markdown](https://codemirror.net/mode/markdown/) modes: Add comment metadata.
452
 
@@ -834,7 +966,7 @@ Add `role=presentation` to more DOM elements to improve screen reader support.
834
 
835
  [merge addon](https://codemirror.net/doc/manual.html#addon_merge): Make aligning of unchanged chunks more robust.
836
 
837
- [comment addon](https://codemirror.net/doc/manual.html#addon_comment): Fix comment-toggling on a block of text that starts and ends in a (differnet) block comment.
838
 
839
  [javascript mode](https://codemirror.net/mode/javascript/): Improve support for TypeScript syntax.
840
 
@@ -952,7 +1084,7 @@ New event: [`optionChange`](https://codemirror.net/doc/manual.html#event_optionC
952
 
953
  Tapping/clicking the editor in [contentEditable mode](https://codemirror.net/doc/manual.html#option_inputStyle) on Chrome now puts the cursor at the tapped position.
954
 
955
- Fix various crashes and misbehaviors when reading composition events in [contentEditable mode](https://codemirror.net/doc/manual.html#option_inputStyle).
956
 
957
  Catches and ignores an IE 'Unspecified Error' when creating an editor in an iframe before there is a `<body>`.
958
 
@@ -1287,7 +1419,7 @@ Fix a [bug](https://github.com/codemirror/CodeMirror/issues/3834) that caused ph
1287
  * New modes: [Vue](https://codemirror.net/mode/vue/index.html), [Oz](https://codemirror.net/mode/oz/index.html), [MscGen](https://codemirror.net/mode/mscgen/index.html) (and dialects), [Closure Stylesheets](https://codemirror.net/mode/css/gss.html)
1288
  * Implement [CommonMark](http://commonmark.org)-style flexible list indent and cross-line code spans in [Markdown](https://codemirror.net/mode/markdown/index.html) mode
1289
  * Add a replace-all button to the [search addon](https://codemirror.net/doc/manual.html#addon_search), and make the persistent search dialog transparent when it obscures the match
1290
- * Handle `acync`/`await` and ocal and binary numbers in [JavaScript mode](https://codemirror.net/mode/javascript/index.html)
1291
  * Fix various issues with the [Haxe mode](https://codemirror.net/mode/haxe/index.html)
1292
  * Make the [closebrackets addon](https://codemirror.net/doc/manual.html#addon_closebrackets) select only the wrapped text when wrapping selection in brackets
1293
  * Tokenize properties as properties in the [CoffeeScript mode](https://codemirror.net/mode/coffeescript/index.html)
@@ -1774,7 +1906,7 @@ Emergency fix for a bug where an editor with line wrapping on IE will break when
1774
  * Slightly incompatible API changes. Read [this](https://codemirror.net/doc/upgrade_v2.2.html).
1775
  * New approach to [binding](https://codemirror.net/doc/manual.html#option_extraKeys) keys, support for [custom bindings](https://codemirror.net/doc/manual.html#option_keyMap).
1776
  * Support for overwrite (insert).
1777
- * [Custom-width](https://codemirror.net/doc/manual.html#option_tabSize) and [stylable](https://codemirror.net/demo/visibletabs.html) tabs.
1778
  * Moved more code into [add-on scripts](https://codemirror.net/doc/manual.html#addons).
1779
  * Support for sane vertical cursor movement in wrapped lines.
1780
  * More reliable handling of editing [marked text](https://codemirror.net/doc/manual.html#markText).
@@ -1788,7 +1920,7 @@ Fixes `TextMarker.clear`, which is broken in 2.17.
1788
  ## 2.17.0 (2011-11-21)
1789
 
1790
  * Add support for [line wrapping](https://codemirror.net/doc/manual.html#option_lineWrapping) and [code folding](https://codemirror.net/doc/manual.html#hideLine).
1791
- * Add [Github-style Markdown](https://codemirror.net/mode/gfm/index.html) mode.
1792
  * Add [Monokai](https://codemirror.net/theme/monokai.css) and [Rubyblue](https://codemirror.net/theme/rubyblue.css) themes.
1793
  * Add [`setBookmark`](https://codemirror.net/doc/manual.html#setBookmark) method.
1794
  * Move some of the demo code into reusable components under [`lib/util`](https://codemirror.net/addon/).
1
+ ## 5.62.0 (2021-06-21)
2
+
3
+ ### Bug fixes
4
+
5
+ Improve support for vim-style cursors in a number of themes.
6
+
7
+ ### New features
8
+
9
+ [lint addon](https://codemirror.net/doc/manual.html#addon_lint): Add support for highlighting lines with errors or warnings.
10
+
11
+ ## 5.61.1 (2021-05-20)
12
+
13
+ ### Bug fixes
14
+
15
+ Fix a bug where changing the editor's document could confuse text-direction management.
16
+
17
+ Fix a bug in horizontally scrolling the cursor into view.
18
+
19
+ Optimize adding lots of marks in a single transaction.
20
+
21
+ [simple mode addon](https://codemirror.net/demo/simplemode.html): Support regexps with a unicode flag.
22
+
23
+ [javascript mode](https://codemirror.net/mode/javascript/index.html): Add support for TypeScript template string types, improve integration with JSX mode.
24
+
25
+ ## 5.61.0 (2021-04-20)
26
+
27
+ ### Bug fixes
28
+
29
+ Improve support for being in a shadow DOM in contenteditable mode.
30
+
31
+ Prevent line number from being read by screen readers.
32
+
33
+ [show-hint addon](https://codemirror.net/doc/manual.html#addon_show-hint): Fix a crash caused by a race condition.
34
+
35
+ [javascript mode](https://codemirror.net/mode/javascript/): Improve scope tracking.
36
+
37
+ ### New features
38
+
39
+ The library now emits an `"updateGutter"` event when the gutter width changes.
40
+
41
+ [emacs bindings](https://codemirror.net/demo/emacs.html): Provide named commands for all bindings.
42
+
43
+ ## 5.60.0 (2021-03-20)
44
+
45
+ ### Bug fixes
46
+
47
+ Fix autofocus feature in contenteditable mode.
48
+
49
+ [simple mode addon](https://codemirror.net/demo/simplemode.html): Fix a null-dereference crash.
50
+
51
+ [multiplex addon](https://codemirror.net/demo/multiplex.html): Make it possible to use `parseDelimiters` when both delimiters are the same.
52
+
53
+ [julia mode](https://codemirror.net/mode/julia/): Fix a lockup bug.
54
+
55
+ ### New features
56
+
57
+ `setSelections` now allows ranges to omit the `head` property when it is equal to `anchor`.
58
+
59
+ [sublime bindings](https://codemirror.net/demo/sublime.html): Add support for reverse line sorting.
60
+
61
+ ## 5.59.4 (2021-02-24)
62
+
63
+ ### Bug fixes
64
+
65
+ Give the scrollbar corner filler a background again, to prevent content from peeping through between the scrollbars.
66
+
67
+ ## 5.59.3 (2021-02-20)
68
+
69
+ ### Bug fixes
70
+
71
+ Don't override the way zero-with non-joiners are rendered.
72
+
73
+ Fix an issue where resetting the history cleared the `undoDepth` option's value.
74
+
75
+ [vim bindings](https://codemirror.net/demo/vim.html): Fix substitute command when joining and splitting lines, fix global command when line number change, add support for `:vglobal`, properly treat caps lock as a modifier key.
76
+
77
+ ## 5.59.2 (2021-01-20)
78
+
79
+ ### Bug fixes
80
+
81
+ Don't try to scroll the selection into view in `readonly: "nocursor"` mode.
82
+
83
+ [closebrackets addon](https://codemirror.net/doc/manual.html#addon_closebrackets): Fix a regression in the behavior of pressing enter between brackets.
84
+
85
+ [javascript mode](https://codemirror.net/mode/javascript/): Fix an infinite loop on specific syntax errors in object types.
86
+
87
+ various modes: Fix inefficient RegExp matching.
88
+
89
+ ## 5.59.1 (2020-12-31)
90
+
91
+ ### Bug fixes
92
+
93
+ Fix an issue where some Chrome browsers were detected as iOS.
94
+
95
+ ## 5.59.0 (2020-12-20)
96
+
97
+ ### Bug fixes
98
+
99
+ Fix platform detection on recent iPadOS.
100
+
101
+ [lint addon](https://codemirror.net/doc/manual.html#addon_lint): Don't show duplicate messages for a given line.
102
+
103
+ [clojure mode](https://codemirror.net/mode/clojure/index.html): Fix regexp that matched in exponential time for some inputs.
104
+
105
+ [hardwrap addon](https://codemirror.net/doc/manual.html#addon_hardwrap): Improve handling of words that are longer than the line length.
106
+
107
+ [matchbrackets addon](https://codemirror.net/doc/manual.html#addon_matchbrackets): Fix leaked event handler on disabling the addon.
108
+
109
+ ### New features
110
+
111
+ [search addon](https://codemirror.net/demo/search.html): Make it possible to configure the search addon to show the dialog at the bottom of the editor.
112
+
113
+ ## 5.58.3 (2020-11-19)
114
+
115
+ ### Bug fixes
116
+
117
+ Suppress quick-firing of blur-focus events when dragging and clicking on Internet Explorer.
118
+
119
+ Fix the `insertAt` option to `addLineWidget` to actually allow the widget to be placed after all widgets for the line.
120
+
121
+ [soy mode](https://codemirror.net/mode/soy/): Support `@Attribute` and element composition.
122
+
123
+ [shell mode](https://codemirror.net/mode/shell/): Support heredoc quoting.
124
+
125
+ ## 5.58.2 (2020-10-23)
126
+
127
+ ### Bug fixes
128
+
129
+ Fix a bug where horizontally scrolling the cursor into view sometimes failed with a non-fixed gutter.
130
+
131
+ [julia mode](https://codemirror.net/mode/julia/): Fix an infinite recursion bug.
132
+
133
  ## 5.58.1 (2020-09-23)
134
 
135
  ### Bug fixes
322
 
323
  [handlebars mode](https://codemirror.net/mode/handlebars/): Fix triple-brace support.
324
 
325
+ [searchcursor addon](https://codemirror.net/doc/manual.html#addon_searchcursor): Support matching `$` in reverse regexp search.
326
 
327
  [panel addon](https://codemirror.net/doc/manual.html#addon_panel): Don't get confused by changing panel sizes.
328
 
578
 
579
  [panel addon](https://codemirror.net/doc/manual.html#addon_panel): Fix problem where replacing the last remaining panel dropped the newly added panel.
580
 
581
+ [hardwrap addon](https://codemirror.net/doc/manual.html#addon_hardwrap): Fix an infinite loop when the indentation is greater than the target column.
582
 
583
  [jinja2](https://codemirror.net/mode/jinja2/) and [markdown](https://codemirror.net/mode/markdown/) modes: Add comment metadata.
584
 
966
 
967
  [merge addon](https://codemirror.net/doc/manual.html#addon_merge): Make aligning of unchanged chunks more robust.
968
 
969
+ [comment addon](https://codemirror.net/doc/manual.html#addon_comment): Fix comment-toggling on a block of text that starts and ends in a (different) block comment.
970
 
971
  [javascript mode](https://codemirror.net/mode/javascript/): Improve support for TypeScript syntax.
972
 
1084
 
1085
  Tapping/clicking the editor in [contentEditable mode](https://codemirror.net/doc/manual.html#option_inputStyle) on Chrome now puts the cursor at the tapped position.
1086
 
1087
+ Fix various crashes and misbehavior when reading composition events in [contentEditable mode](https://codemirror.net/doc/manual.html#option_inputStyle).
1088
 
1089
  Catches and ignores an IE 'Unspecified Error' when creating an editor in an iframe before there is a `<body>`.
1090
 
1419
  * New modes: [Vue](https://codemirror.net/mode/vue/index.html), [Oz](https://codemirror.net/mode/oz/index.html), [MscGen](https://codemirror.net/mode/mscgen/index.html) (and dialects), [Closure Stylesheets](https://codemirror.net/mode/css/gss.html)
1420
  * Implement [CommonMark](http://commonmark.org)-style flexible list indent and cross-line code spans in [Markdown](https://codemirror.net/mode/markdown/index.html) mode
1421
  * Add a replace-all button to the [search addon](https://codemirror.net/doc/manual.html#addon_search), and make the persistent search dialog transparent when it obscures the match
1422
+ * Handle `async`/`await` and ocal and binary numbers in [JavaScript mode](https://codemirror.net/mode/javascript/index.html)
1423
  * Fix various issues with the [Haxe mode](https://codemirror.net/mode/haxe/index.html)
1424
  * Make the [closebrackets addon](https://codemirror.net/doc/manual.html#addon_closebrackets) select only the wrapped text when wrapping selection in brackets
1425
  * Tokenize properties as properties in the [CoffeeScript mode](https://codemirror.net/mode/coffeescript/index.html)
1906
  * Slightly incompatible API changes. Read [this](https://codemirror.net/doc/upgrade_v2.2.html).
1907
  * New approach to [binding](https://codemirror.net/doc/manual.html#option_extraKeys) keys, support for [custom bindings](https://codemirror.net/doc/manual.html#option_keyMap).
1908
  * Support for overwrite (insert).
1909
+ * [Custom-width](https://codemirror.net/doc/manual.html#option_tabSize) and [styleable](https://codemirror.net/demo/visibletabs.html) tabs.
1910
  * Moved more code into [add-on scripts](https://codemirror.net/doc/manual.html#addons).
1911
  * Support for sane vertical cursor movement in wrapped lines.
1912
  * More reliable handling of editing [marked text](https://codemirror.net/doc/manual.html#markText).
1920
  ## 2.17.0 (2011-11-21)
1921
 
1922
  * Add support for [line wrapping](https://codemirror.net/doc/manual.html#option_lineWrapping) and [code folding](https://codemirror.net/doc/manual.html#hideLine).
1923
+ * Add [GitHub-style Markdown](https://codemirror.net/mode/gfm/index.html) mode.
1924
  * Add [Monokai](https://codemirror.net/theme/monokai.css) and [Rubyblue](https://codemirror.net/theme/rubyblue.css) themes.
1925
  * Add [`setBookmark`](https://codemirror.net/doc/manual.html#setBookmark) method.
1926
  * Move some of the demo code into reusable components under [`lib/util`](https://codemirror.net/addon/).
inc/lib/codemirror/README.md CHANGED
@@ -1,8 +1,7 @@
1
  # CodeMirror
2
 
3
- [![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror)
4
  [![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror)
5
- [![Join the chat at https://gitter.im/codemirror/CodeMirror](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/codemirror/CodeMirror)
6
 
7
  CodeMirror is a versatile text editor implemented in JavaScript for
8
  the browser. It is specialized for editing code, and comes with over
1
  # CodeMirror
2
 
3
+ [![Build Status](https://github.com/codemirror/codemirror/workflows/main/badge.svg)](https://github.com/codemirror/codemirror/actions)
4
  [![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror)
 
5
 
6
  CodeMirror is a versatile text editor implemented in JavaScript for
7
  the browser. It is specialized for editing code, and comes with over
inc/lib/codemirror/addon/display/placeholder.js CHANGED
@@ -50,11 +50,12 @@
50
 
51
  function onComposition(cm) {
52
  setTimeout(function() {
53
- var empty = false, input = cm.getInputField()
54
- if (input.nodeName == "TEXTAREA")
55
- empty = !input.value
56
- else if (cm.lineCount() == 1)
57
- empty = !/[^\u200b]/.test(input.querySelector(".CodeMirror-line").textContent)
 
58
  if (empty) setPlaceholder(cm)
59
  else clearPlaceholder(cm)
60
  }, 20)
50
 
51
  function onComposition(cm) {
52
  setTimeout(function() {
53
+ var empty = false
54
+ if (cm.lineCount() == 1) {
55
+ var input = cm.getInputField()
56
+ empty = input.nodeName == "TEXTAREA" ? !cm.getLine(0).length
57
+ : !/[^\u200b]/.test(input.querySelector(".CodeMirror-line").textContent)
58
+ }
59
  if (empty) setPlaceholder(cm)
60
  else clearPlaceholder(cm)
61
  }, 20)
inc/lib/codemirror/lib/codemirror.js CHANGED
@@ -32,7 +32,7 @@
32
  var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
33
  var phantom = /PhantomJS/.test(userAgent);
34
 
35
- var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent);
36
  var android = /Android/.test(userAgent);
37
  // This is woefully incomplete. Suggestions for alternative methods welcome.
38
  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
@@ -1311,6 +1311,7 @@
1311
  if (span.marker == marker) { return span }
1312
  } }
1313
  }
 
1314
  // Remove a span from an array, returning undefined if no spans are
1315
  // left (we don't store arrays for lines without spans).
1316
  function removeMarkedSpan(spans, span) {
@@ -1319,9 +1320,16 @@
1319
  { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }
1320
  return r
1321
  }
 
1322
  // Add a span to a line.
1323
- function addMarkedSpan(line, span) {
1324
- line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
 
 
 
 
 
 
1325
  span.marker.attachLine(line);
1326
  }
1327
 
@@ -2186,6 +2194,7 @@
2186
  if (cm.options.lineNumbers || markers) {
2187
  var wrap$1 = ensureLineWrapped(lineView);
2188
  var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"));
 
2189
  cm.display.input.setUneditable(gutterWrap);
2190
  wrap$1.insertBefore(gutterWrap, lineView.text);
2191
  if (lineView.line.gutterClass)
@@ -3285,19 +3294,22 @@
3285
  }
3286
 
3287
  function ensureFocus(cm) {
3288
- if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }
 
 
 
3289
  }
3290
 
3291
  function delayBlurEvent(cm) {
3292
  cm.state.delayingBlurEvent = true;
3293
  setTimeout(function () { if (cm.state.delayingBlurEvent) {
3294
  cm.state.delayingBlurEvent = false;
3295
- onBlur(cm);
3296
  } }, 100);
3297
  }
3298
 
3299
  function onFocus(cm, e) {
3300
- if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }
3301
 
3302
  if (cm.options.readOnly == "nocursor") { return }
3303
  if (!cm.state.focused) {
@@ -3427,8 +3439,8 @@
3427
  // Set pos and end to the cursor positions around the character pos sticks to
3428
  // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
3429
  // If pos == Pos(_, 0, "before"), pos and end are unchanged
3430
- pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
3431
  end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
 
3432
  }
3433
  for (var limit = 0; limit < 5; limit++) {
3434
  var changed = false;
@@ -3479,14 +3491,15 @@
3479
  if (newTop != screentop) { result.scrollTop = newTop; }
3480
  }
3481
 
3482
- var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;
3483
- var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);
 
3484
  var tooWide = rect.right - rect.left > screenw;
3485
  if (tooWide) { rect.right = rect.left + screenw; }
3486
  if (rect.left < 10)
3487
  { result.scrollLeft = 0; }
3488
  else if (rect.left < screenleft)
3489
- { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }
3490
  else if (rect.right > screenw + screenleft - 3)
3491
  { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }
3492
  return result
@@ -3778,7 +3791,8 @@
3778
  scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
3779
  scrollToPos: null, // Used to scroll to a specific position
3780
  focus: false,
3781
- id: ++nextOpId // Unique ID
 
3782
  };
3783
  pushOperation(cm.curOp);
3784
  }
@@ -4231,6 +4245,8 @@
4231
  function updateGutterSpace(display) {
4232
  var width = display.gutters.offsetWidth;
4233
  display.sizer.style.marginLeft = width + "px";
 
 
4234
  }
4235
 
4236
  function setDocumentHeight(cm, measure) {
@@ -4778,6 +4794,7 @@
4778
  estimateLineHeights(cm);
4779
  loadMode(cm);
4780
  setDirectionClass(cm);
 
4781
  if (!cm.options.lineWrapping) { findMaxLine(cm); }
4782
  cm.options.mode = doc.modeOption;
4783
  regChange(cm);
@@ -4794,19 +4811,19 @@
4794
  });
4795
  }
4796
 
4797
- function History(startGen) {
4798
  // Arrays of change events and selections. Doing something adds an
4799
  // event to done and clears undo. Undoing moves events from done
4800
  // to undone, redoing moves them in the other direction.
4801
  this.done = []; this.undone = [];
4802
- this.undoDepth = Infinity;
4803
  // Used to track when changes can be merged into a single undo
4804
  // event
4805
  this.lastModTime = this.lastSelTime = 0;
4806
  this.lastOp = this.lastSelOp = null;
4807
  this.lastOrigin = this.lastSelOrigin = null;
4808
  // Used by the isClean() method
4809
- this.generation = this.maxGeneration = startGen || 1;
4810
  }
4811
 
4812
  // Create a history change event from an updateDoc-style change
@@ -5111,7 +5128,7 @@
5111
  (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
5112
  setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
5113
 
5114
- if (!(options && options.scroll === false) && doc.cm)
5115
  { ensureCursorVisible(doc.cm); }
5116
  }
5117
 
@@ -5768,7 +5785,7 @@
5768
  changeLine(doc, handle, "widget", function (line) {
5769
  var widgets = line.widgets || (line.widgets = []);
5770
  if (widget.insertAt == null) { widgets.push(widget); }
5771
- else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }
5772
  widget.line = line;
5773
  if (cm && !lineIsHidden(doc, line)) {
5774
  var aboveVisible = heightAtLine(line) < doc.scrollTop;
@@ -5954,7 +5971,7 @@
5954
  if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }
5955
  addMarkedSpan(line, new MarkedSpan(marker,
5956
  curLine == from.line ? from.ch : null,
5957
- curLine == to.line ? to.ch : null));
5958
  ++curLine;
5959
  });
5960
  // lineIsHidden depends on the presence of the spans, so needs a second pass
@@ -6126,6 +6143,7 @@
6126
  getRange: function(from, to, lineSep) {
6127
  var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
6128
  if (lineSep === false) { return lines }
 
6129
  return lines.join(lineSep || this.lineSeparator())
6130
  },
6131
 
@@ -6177,7 +6195,7 @@
6177
  var out = [];
6178
  for (var i = 0; i < ranges.length; i++)
6179
  { out[i] = new Range(clipPos(this, ranges[i].anchor),
6180
- clipPos(this, ranges[i].head)); }
6181
  if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }
6182
  setSelection(this, normalizeSelection(this.cm, out, primary), options);
6183
  }),
@@ -6240,7 +6258,7 @@
6240
  clearHistory: function() {
6241
  var this$1 = this;
6242
 
6243
- this.history = new History(this.history.maxGeneration);
6244
  linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);
6245
  },
6246
 
@@ -6261,7 +6279,7 @@
6261
  undone: copyHistoryArray(this.history.undone)}
6262
  },
6263
  setHistory: function(histData) {
6264
- var hist = this.history = new History(this.history.maxGeneration);
6265
  hist.done = copyHistoryArray(histData.done.slice(0), null, true);
6266
  hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
6267
  },
@@ -6680,10 +6698,9 @@
6680
  // Very basic readline/emacs-style bindings, which are standard on Mac.
6681
  keyMap.emacsy = {
6682
  "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
6683
- "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
6684
- "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
6685
- "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
6686
- "Ctrl-O": "openLine"
6687
  };
6688
  keyMap.macDefault = {
6689
  "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
@@ -7377,6 +7394,10 @@
7377
  var dragEnd = operation(cm, function (e) {
7378
  if (webkit) { display.scroller.draggable = false; }
7379
  cm.state.draggingText = false;
 
 
 
 
7380
  off(display.wrapper.ownerDocument, "mouseup", dragEnd);
7381
  off(display.wrapper.ownerDocument, "mousemove", mouseMove);
7382
  off(display.scroller, "dragstart", dragStart);
@@ -7400,15 +7421,15 @@
7400
  if (webkit) { display.scroller.draggable = true; }
7401
  cm.state.draggingText = dragEnd;
7402
  dragEnd.copy = !behavior.moveOnDrag;
7403
- // IE's approach to draggable
7404
- if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
7405
  on(display.wrapper.ownerDocument, "mouseup", dragEnd);
7406
  on(display.wrapper.ownerDocument, "mousemove", mouseMove);
7407
  on(display.scroller, "dragstart", dragStart);
7408
  on(display.scroller, "drop", dragEnd);
7409
 
7410
- delayBlurEvent(cm);
7411
  setTimeout(function () { return display.input.focus(); }, 20);
 
 
7412
  }
7413
 
7414
  function rangeForUnit(cm, pos, unit) {
@@ -7421,6 +7442,7 @@
7421
 
7422
  // Normal selection, as opposed to text dragging.
7423
  function leftButtonSelect(cm, event, start, behavior) {
 
7424
  var display = cm.display, doc = cm.doc;
7425
  e_preventDefault(event);
7426
 
@@ -7699,7 +7721,7 @@
7699
  for (var i = newBreaks.length - 1; i >= 0; i--)
7700
  { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }
7701
  });
7702
- option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) {
7703
  cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
7704
  if (old != Init) { cm.refresh(); }
7705
  });
@@ -8666,10 +8688,13 @@
8666
  function moveOnce(boundToLine) {
8667
  var next;
8668
  if (unit == "codepoint") {
8669
- var ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1));
8670
- if (isNaN(ch)) { next = null; }
8671
- else { next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),
8672
- -dir); }
 
 
 
8673
  } else if (visually) {
8674
  next = moveVisually(doc.cm, lineObj, pos, dir);
8675
  } else {
@@ -8754,6 +8779,7 @@
8754
 
8755
  var input = this, cm = input.cm;
8756
  var div = input.div = display.lineDiv;
 
8757
  disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);
8758
 
8759
  function belongsToInput(e) {
@@ -8820,7 +8846,7 @@
8820
  var kludge = hiddenTextarea(), te = kludge.firstChild;
8821
  cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
8822
  te.value = lastCopied.text.join("\n");
8823
- var hadFocus = document.activeElement;
8824
  selectInput(te);
8825
  setTimeout(function () {
8826
  cm.display.lineSpace.removeChild(kludge);
@@ -8843,7 +8869,7 @@
8843
 
8844
  ContentEditableInput.prototype.prepareSelection = function () {
8845
  var result = prepareSelection(this.cm, false);
8846
- result.focus = document.activeElement == this.div;
8847
  return result
8848
  };
8849
 
@@ -8939,7 +8965,7 @@
8939
 
8940
  ContentEditableInput.prototype.focus = function () {
8941
  if (this.cm.options.readOnly != "nocursor") {
8942
- if (!this.selectionInEditor() || document.activeElement != this.div)
8943
  { this.showSelection(this.prepareSelection(), true); }
8944
  this.div.focus();
8945
  }
@@ -9781,7 +9807,7 @@
9781
 
9782
  addLegacyProps(CodeMirror);
9783
 
9784
- CodeMirror.version = "5.58.1";
9785
 
9786
  return CodeMirror;
9787
 
32
  var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
33
  var phantom = /PhantomJS/.test(userAgent);
34
 
35
+ var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2);
36
  var android = /Android/.test(userAgent);
37
  // This is woefully incomplete. Suggestions for alternative methods welcome.
38
  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
1311
  if (span.marker == marker) { return span }
1312
  } }
1313
  }
1314
+
1315
  // Remove a span from an array, returning undefined if no spans are
1316
  // left (we don't store arrays for lines without spans).
1317
  function removeMarkedSpan(spans, span) {
1320
  { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }
1321
  return r
1322
  }
1323
+
1324
  // Add a span to a line.
1325
+ function addMarkedSpan(line, span, op) {
1326
+ var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));
1327
+ if (inThisOp && inThisOp.has(line.markedSpans)) {
1328
+ line.markedSpans.push(span);
1329
+ } else {
1330
+ line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
1331
+ if (inThisOp) { inThisOp.add(line.markedSpans); }
1332
+ }
1333
  span.marker.attachLine(line);
1334
  }
1335
 
2194
  if (cm.options.lineNumbers || markers) {
2195
  var wrap$1 = ensureLineWrapped(lineView);
2196
  var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"));
2197
+ gutterWrap.setAttribute("aria-hidden", "true");
2198
  cm.display.input.setUneditable(gutterWrap);
2199
  wrap$1.insertBefore(gutterWrap, lineView.text);
2200
  if (lineView.line.gutterClass)
3294
  }
3295
 
3296
  function ensureFocus(cm) {
3297
+ if (!cm.hasFocus()) {
3298
+ cm.display.input.focus();
3299
+ if (!cm.state.focused) { onFocus(cm); }
3300
+ }
3301
  }
3302
 
3303
  function delayBlurEvent(cm) {
3304
  cm.state.delayingBlurEvent = true;
3305
  setTimeout(function () { if (cm.state.delayingBlurEvent) {
3306
  cm.state.delayingBlurEvent = false;
3307
+ if (cm.state.focused) { onBlur(cm); }
3308
  } }, 100);
3309
  }
3310
 
3311
  function onFocus(cm, e) {
3312
+ if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }
3313
 
3314
  if (cm.options.readOnly == "nocursor") { return }
3315
  if (!cm.state.focused) {
3439
  // Set pos and end to the cursor positions around the character pos sticks to
3440
  // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
3441
  // If pos == Pos(_, 0, "before"), pos and end are unchanged
 
3442
  end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
3443
+ pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
3444
  }
3445
  for (var limit = 0; limit < 5; limit++) {
3446
  var changed = false;
3491
  if (newTop != screentop) { result.scrollTop = newTop; }
3492
  }
3493
 
3494
+ var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;
3495
+ var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;
3496
+ var screenw = displayWidth(cm) - display.gutters.offsetWidth;
3497
  var tooWide = rect.right - rect.left > screenw;
3498
  if (tooWide) { rect.right = rect.left + screenw; }
3499
  if (rect.left < 10)
3500
  { result.scrollLeft = 0; }
3501
  else if (rect.left < screenleft)
3502
+ { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }
3503
  else if (rect.right > screenw + screenleft - 3)
3504
  { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }
3505
  return result
3791
  scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
3792
  scrollToPos: null, // Used to scroll to a specific position
3793
  focus: false,
3794
+ id: ++nextOpId, // Unique ID
3795
+ markArrays: null // Used by addMarkedSpan
3796
  };
3797
  pushOperation(cm.curOp);
3798
  }
4245
  function updateGutterSpace(display) {
4246
  var width = display.gutters.offsetWidth;
4247
  display.sizer.style.marginLeft = width + "px";
4248
+ // Send an event to consumers responding to changes in gutter width.
4249
+ signalLater(display, "gutterChanged", display);
4250
  }
4251
 
4252
  function setDocumentHeight(cm, measure) {
4794
  estimateLineHeights(cm);
4795
  loadMode(cm);
4796
  setDirectionClass(cm);
4797
+ cm.options.direction = doc.direction;
4798
  if (!cm.options.lineWrapping) { findMaxLine(cm); }
4799
  cm.options.mode = doc.modeOption;
4800
  regChange(cm);
4811
  });
4812
  }
4813
 
4814
+ function History(prev) {
4815
  // Arrays of change events and selections. Doing something adds an
4816
  // event to done and clears undo. Undoing moves events from done
4817
  // to undone, redoing moves them in the other direction.
4818
  this.done = []; this.undone = [];
4819
+ this.undoDepth = prev ? prev.undoDepth : Infinity;
4820
  // Used to track when changes can be merged into a single undo
4821
  // event
4822
  this.lastModTime = this.lastSelTime = 0;
4823
  this.lastOp = this.lastSelOp = null;
4824
  this.lastOrigin = this.lastSelOrigin = null;
4825
  // Used by the isClean() method
4826
+ this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;
4827
  }
4828
 
4829
  // Create a history change event from an updateDoc-style change
5128
  (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
5129
  setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
5130
 
5131
+ if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor")
5132
  { ensureCursorVisible(doc.cm); }
5133
  }
5134
 
5785
  changeLine(doc, handle, "widget", function (line) {
5786
  var widgets = line.widgets || (line.widgets = []);
5787
  if (widget.insertAt == null) { widgets.push(widget); }
5788
+ else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }
5789
  widget.line = line;
5790
  if (cm && !lineIsHidden(doc, line)) {
5791
  var aboveVisible = heightAtLine(line) < doc.scrollTop;
5971
  if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }
5972
  addMarkedSpan(line, new MarkedSpan(marker,
5973
  curLine == from.line ? from.ch : null,
5974
+ curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);
5975
  ++curLine;
5976
  });
5977
  // lineIsHidden depends on the presence of the spans, so needs a second pass
6143
  getRange: function(from, to, lineSep) {
6144
  var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
6145
  if (lineSep === false) { return lines }
6146
+ if (lineSep === '') { return lines.join('') }
6147
  return lines.join(lineSep || this.lineSeparator())
6148
  },
6149
 
6195
  var out = [];
6196
  for (var i = 0; i < ranges.length; i++)
6197
  { out[i] = new Range(clipPos(this, ranges[i].anchor),
6198
+ clipPos(this, ranges[i].head || ranges[i].anchor)); }
6199
  if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }
6200
  setSelection(this, normalizeSelection(this.cm, out, primary), options);
6201
  }),
6258
  clearHistory: function() {
6259
  var this$1 = this;
6260
 
6261
+ this.history = new History(this.history);
6262
  linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);
6263
  },
6264
 
6279
  undone: copyHistoryArray(this.history.undone)}
6280
  },
6281
  setHistory: function(histData) {
6282
+ var hist = this.history = new History(this.history);
6283
  hist.done = copyHistoryArray(histData.done.slice(0), null, true);
6284
  hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
6285
  },
6698
  // Very basic readline/emacs-style bindings, which are standard on Mac.
6699
  keyMap.emacsy = {
6700
  "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
6701
+ "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp",
6702
+ "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine",
6703
+ "Ctrl-T": "transposeChars", "Ctrl-O": "openLine"
 
6704
  };
6705
  keyMap.macDefault = {
6706
  "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
7394
  var dragEnd = operation(cm, function (e) {
7395
  if (webkit) { display.scroller.draggable = false; }
7396
  cm.state.draggingText = false;
7397
+ if (cm.state.delayingBlurEvent) {
7398
+ if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }
7399
+ else { delayBlurEvent(cm); }
7400
+ }
7401
  off(display.wrapper.ownerDocument, "mouseup", dragEnd);
7402
  off(display.wrapper.ownerDocument, "mousemove", mouseMove);
7403
  off(display.scroller, "dragstart", dragStart);
7421
  if (webkit) { display.scroller.draggable = true; }
7422
  cm.state.draggingText = dragEnd;
7423
  dragEnd.copy = !behavior.moveOnDrag;
 
 
7424
  on(display.wrapper.ownerDocument, "mouseup", dragEnd);
7425
  on(display.wrapper.ownerDocument, "mousemove", mouseMove);
7426
  on(display.scroller, "dragstart", dragStart);
7427
  on(display.scroller, "drop", dragEnd);
7428
 
7429
+ cm.state.delayingBlurEvent = true;
7430
  setTimeout(function () { return display.input.focus(); }, 20);
7431
+ // IE's approach to draggable
7432
+ if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
7433
  }
7434
 
7435
  function rangeForUnit(cm, pos, unit) {
7442
 
7443
  // Normal selection, as opposed to text dragging.
7444
  function leftButtonSelect(cm, event, start, behavior) {
7445
+ if (ie) { delayBlurEvent(cm); }
7446
  var display = cm.display, doc = cm.doc;
7447
  e_preventDefault(event);
7448
 
7721
  for (var i = newBreaks.length - 1; i >= 0; i--)
7722
  { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }
7723
  });
7724
+ option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) {
7725
  cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
7726
  if (old != Init) { cm.refresh(); }
7727
  });
8688
  function moveOnce(boundToLine) {
8689
  var next;
8690
  if (unit == "codepoint") {
8691
+ var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));
8692
+ if (isNaN(ch)) {
8693
+ next = null;
8694
+ } else {
8695
+ var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;
8696
+ next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);
8697
+ }
8698
  } else if (visually) {
8699
  next = moveVisually(doc.cm, lineObj, pos, dir);
8700
  } else {
8779
 
8780
  var input = this, cm = input.cm;
8781
  var div = input.div = display.lineDiv;
8782
+ div.contentEditable = true;
8783
  disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);
8784
 
8785
  function belongsToInput(e) {
8846
  var kludge = hiddenTextarea(), te = kludge.firstChild;
8847
  cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
8848
  te.value = lastCopied.text.join("\n");
8849
+ var hadFocus = activeElt();
8850
  selectInput(te);
8851
  setTimeout(function () {
8852
  cm.display.lineSpace.removeChild(kludge);
8869
 
8870
  ContentEditableInput.prototype.prepareSelection = function () {
8871
  var result = prepareSelection(this.cm, false);
8872
+ result.focus = activeElt() == this.div;
8873
  return result
8874
  };
8875
 
8965
 
8966
  ContentEditableInput.prototype.focus = function () {
8967
  if (this.cm.options.readOnly != "nocursor") {
8968
+ if (!this.selectionInEditor() || activeElt() != this.div)
8969
  { this.showSelection(this.prepareSelection(), true); }
8970
  this.div.focus();
8971
  }
9807
 
9808
  addLegacyProps(CodeMirror);
9809
 
9810
+ CodeMirror.version = "5.62.0";
9811
 
9812
  return CodeMirror;
9813
 
inc/lib/codemirror/mode/index.html CHANGED
@@ -153,6 +153,7 @@ option.</p>
153
  <li><a href="vhdl/index.html">VHDL</a></li>
154
  <li><a href="vue/index.html">Vue.js app</a></li>
155
  <li><a href="webidl/index.html">Web IDL</a></li>
 
156
  <li><a href="xml/index.html">XML/HTML</a></li>
157
  <li><a href="xquery/index.html">XQuery</a></li>
158
  <li><a href="yacas/index.html">Yacas</a></li>
153
  <li><a href="vhdl/index.html">VHDL</a></li>
154
  <li><a href="vue/index.html">Vue.js app</a></li>
155
  <li><a href="webidl/index.html">Web IDL</a></li>
156
+ <li><a href="wast/index.html">WebAssembly Text Format</a></li>
157
  <li><a href="xml/index.html">XML/HTML</a></li>
158
  <li><a href="xquery/index.html">XQuery</a></li>
159
  <li><a href="yacas/index.html">Yacas</a></li>
inc/lib/codemirror/mode/meta.js CHANGED
@@ -44,7 +44,7 @@
44
  {name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"]},
45
  {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]},
46
  {name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]},
47
- {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]},
48
  {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]},
49
  {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]},
50
  {name: "Esper", mime: "text/x-esper", mode: "sql"},
@@ -76,7 +76,7 @@
76
  {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]},
77
  {name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"]},
78
  {name: "Jinja2", mime: "text/jinja2", mode: "jinja2", ext: ["j2", "jinja", "jinja2"]},
79
- {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"]},
80
  {name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"]},
81
  {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]},
82
  {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]},
@@ -169,7 +169,8 @@
169
  {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]},
170
  {name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]},
171
  {name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]},
172
- {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]}
 
173
  ];
174
  // Ensure all modes have a mime property for backwards compatibility
175
  for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
44
  {name: "edn", mime: "application/edn", mode: "clojure", ext: ["edn"]},
45
  {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]},
46
  {name: "Elm", mime: "text/x-elm", mode: "elm", ext: ["elm"]},
47
+ {name: "Embedded JavaScript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]},
48
  {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]},
49
  {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]},
50
  {name: "Esper", mime: "text/x-esper", mode: "sql"},
76
  {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]},
77
  {name: "JSX", mime: "text/jsx", mode: "jsx", ext: ["jsx"]},
78
  {name: "Jinja2", mime: "text/jinja2", mode: "jinja2", ext: ["j2", "jinja", "jinja2"]},
79
+ {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"], alias: ["jl"]},
80
  {name: "Kotlin", mime: "text/x-kotlin", mode: "clike", ext: ["kt"]},
81
  {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]},
82
  {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]},
169
  {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]},
170
  {name: "mscgen", mime: "text/x-mscgen", mode: "mscgen", ext: ["mscgen", "mscin", "msc"]},
171
  {name: "xu", mime: "text/x-xu", mode: "mscgen", ext: ["xu"]},
172
+ {name: "msgenny", mime: "text/x-msgenny", mode: "mscgen", ext: ["msgenny"]},
173
+ {name: "WebAssembly", mime: "text/webassembly", mode: "wast", ext: ["wat", "wast"]},
174
  ];
175
  // Ensure all modes have a mime property for backwards compatibility
176
  for (var i = 0; i < CodeMirror.modeInfo.length; i++) {
inc/lib/codemirror/mode/xml/xml.js CHANGED
@@ -189,7 +189,7 @@ CodeMirror.defineMode("xml", function(editorConf, config_) {
189
 
190
  function Context(state, tagName, startOfLine) {
191
  this.prev = state.context;
192
- this.tagName = tagName;
193
  this.indent = state.indented;
194
  this.startOfLine = startOfLine;
195
  if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))
@@ -399,7 +399,7 @@ CodeMirror.defineMode("xml", function(editorConf, config_) {
399
  xmlCurrentContext: function(state) {
400
  var context = []
401
  for (var cx = state.context; cx; cx = cx.prev)
402
- if (cx.tagName) context.push(cx.tagName)
403
  return context.reverse()
404
  }
405
  };
189
 
190
  function Context(state, tagName, startOfLine) {
191
  this.prev = state.context;
192
+ this.tagName = tagName || "";
193
  this.indent = state.indented;
194
  this.startOfLine = startOfLine;
195
  if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))
399
  xmlCurrentContext: function(state) {
400
  var context = []
401
  for (var cx = state.context; cx; cx = cx.prev)
402
+ context.push(cx.tagName)
403
  return context.reverse()
404
  }
405
  };
inc/lib/codemirror/package.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "name": "codemirror",
3
- "version": "5.58.1",
4
  "main": "lib/codemirror.js",
5
  "style": "lib/codemirror.css",
6
  "author": {
1
  {
2
  "name": "codemirror",
3
+ "version": "5.62.0",
4
  "main": "lib/codemirror.js",
5
  "style": "lib/codemirror.css",
6
  "author": {
readme.txt CHANGED
@@ -3,9 +3,9 @@ Contributors: Arthur Gareginyan
3
  Tags: meta, tag, tags, custom, simple, plugin, twitter, facebook, google, google plus, meta, search engine optimization, seo, social, alexa, alexa rank, pinterest, norton safe web, webmaster, webmaster tool, webmaster tools, web master tools, web master tools, bing, yandex, bing webmaster, yandex webmaster, google webmaster, web tools, open graph, publisher profile, publisher, author, authors, description, keyword, keywords, copyright, designer, admin, meta tag, pinterest, pinterest meta tag, pinterest website verification, pinterest verification, pinterest verify, plugin, verification, verify, webmaster plugin, wot, web of trust, specificfeeds, specific feeds, feed, rss feed, google shopping, google merchant center, structured data, woocommerce, schemas
4
  Donate link: https://www.spacexchimp.com/donate.html
5
  Requires at least: 4.9
6
- Tested up to: 5.7
7
  Requires PHP: 5.6
8
- Stable tag: 4.46
9
  License: GPL3
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
 
@@ -225,6 +225,10 @@ Commercial licensing (e.g. for projects that can’t use an open-source license)
225
 
226
  == Changelog ==
227
 
 
 
 
 
228
  = 4.46 - Mar 8, 2021 =
229
  * Maintenance: Ensure compatibility with upcoming WordPress 5.7.
230
  * Maintenance: Processing of options has been improved. Direct retrieving of options from the database is replaced by the "_options" callback. The "options.php" file with the "_options" function added.
3
  Tags: meta, tag, tags, custom, simple, plugin, twitter, facebook, google, google plus, meta, search engine optimization, seo, social, alexa, alexa rank, pinterest, norton safe web, webmaster, webmaster tool, webmaster tools, web master tools, web master tools, bing, yandex, bing webmaster, yandex webmaster, google webmaster, web tools, open graph, publisher profile, publisher, author, authors, description, keyword, keywords, copyright, designer, admin, meta tag, pinterest, pinterest meta tag, pinterest website verification, pinterest verification, pinterest verify, plugin, verification, verify, webmaster plugin, wot, web of trust, specificfeeds, specific feeds, feed, rss feed, google shopping, google merchant center, structured data, woocommerce, schemas
4
  Donate link: https://www.spacexchimp.com/donate.html
5
  Requires at least: 4.9
6
+ Tested up to: 6.1
7
  Requires PHP: 5.6
8
+ Stable tag: 4.47
9
  License: GPL3
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
 
225
 
226
  == Changelog ==
227
 
228
+ = 4.47 - Jul 19, 2021 =
229
+ * Maintenance: Ensure compatibility with upcoming WordPress 5.8.
230
+ * Framework update: The CodeMirror library has been updated to the latest version v5.62.0.
231
+
232
  = 4.46 - Mar 8, 2021 =
233
  * Maintenance: Ensure compatibility with upcoming WordPress 5.7.
234
  * Maintenance: Processing of options has been improved. Direct retrieving of options from the database is replaced by the "_options" callback. The "options.php" file with the "_options" function added.