Legoktm has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/83064


Change subject: Use JavaScript to detect unclosed HTML tags
......................................................................

Use JavaScript to detect unclosed HTML tags

Previous-Change-Id: I27f3456de6a6025962afef08aea6440706095947
Change-Id: I72524db89112684225721b5d9729b6fd5a8221cd
---
M MassMessage.i18n.php
M MassMessage.php
A ext.MassMessage.badhtml.js
3 files changed, 71 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MassMessage 
refs/changes/64/83064/1

diff --git a/MassMessage.i18n.php b/MassMessage.i18n.php
index e27cdc1..ffe8260 100644
--- a/MassMessage.i18n.php
+++ b/MassMessage.i18n.php
@@ -31,6 +31,7 @@
        'massmessage-queued-count' => 'Queued [[Special:MassMessage|mass 
messages]]',
        'massmessage-hidden-comment' => '<!-- Message sent by User:$1@$2 using 
the list at $3 -->',
        'massmessage-optout-category' => 'Opted-out of message delivery',
+       'massmessage-badhtml' => 'Your message may have unclosed HTML tags: $1',
        'right-massmessage' => 'Send a message to multiple users at once',
        'action-massmessage' => 'send a message to multiple users at once',
        'log-name-massmessage' => 'Mass message log',
@@ -82,6 +83,10 @@
        'right-massmessage' => '{{doc-right|massmessage}}
 See also:
 * {{msg-mw|Right-massmessage-global}}',
+       'massmessage-badhtml' => 'Shown in a JavaScript popup if we detect 
unclosed HTML tags
+
+* $1 - comma separated list of unclosed HTML tags
+* $2 - number of unclosed HTML tags',
        'action-massmessage' => '{{doc-action|massmessage}}',
        'log-name-massmessage' => 'Log page title',
        'log-description-massmessage' => 'Log page description',
diff --git a/MassMessage.php b/MassMessage.php
index 47f13a1..0e7faf0 100644
--- a/MassMessage.php
+++ b/MassMessage.php
@@ -73,10 +73,13 @@
        'scripts' => array(
                'ext.MassMessage.special.js',
                'ext.MassMessage.autocomplete.js',
+               'ext.MassMessage.badhtml.js',
        ),
+       'messages' => array( 'massmessage-badhtml' ),
        'dependencies' => array(
                'jquery.byteLimit',
-               'jquery.ui.autocomplete'
+               'jquery.ui.autocomplete',
+               'jquery.delayedBind',
        ),
        'localBasePath' => $dir,
        'remoteExtPath' => 'MassMessage',
diff --git a/ext.MassMessage.badhtml.js b/ext.MassMessage.badhtml.js
new file mode 100644
index 0000000..f9f0e44
--- /dev/null
+++ b/ext.MassMessage.badhtml.js
@@ -0,0 +1,62 @@
+/**
+ * Attempt to detect invalid HTML
+ * from 
http://www.raymondcamden.com/index.cfm/2012/1/23/Detecting-invalid-HTML-with-JavaScript
+ */
+( function ( mw, $ ) {
+    $( function () {
+        $( '#mw-massmessage-form-message' ).delayedBind( 500, 'keyup', 
function( ) {
+            var code, regex, matches, tags, possibles, tag;
+            code = $.trim( $( '#mw-massmessage-form-message' ).val() );
+            if( code === '' ) {
+                return;
+            }
+
+            regex = /<.*?>/g;
+            matches = code.match(regex);
+            if( !matches.length ) {
+                return;
+            }
+
+            tags = {};
+
+            $.each(matches, function( idx, itm ) {
+                var realTag, tag;
+                //if the tag is, <..../>, it's self closing
+                if ( itm.substr( itm.length - 2, itm.length ) !== '/>' ) {
+
+                    //strip out any attributes
+                    tag = itm.replace(/[<>]/g, '').split(' ')[0];
+                    //start or end tag?
+                    if ( tag.charAt(0) !== '/' ) {
+                        if ( tags.hasOwnProperty( tag ) ) {
+                            tags[tag]++;
+                        } else {
+                            tags[tag] = 1;
+                        }
+                    } else {
+                        realTag = tag.substr(1, tag.length);
+                        if (tags.hasOwnProperty(realTag)) {
+                            tags[realTag]--;
+                        } else {
+                            tags[realTag] = -1;
+                        }
+                    }
+                }
+            });
+
+            possibles = [];
+            for ( tag in tags ) {
+                if ( tags[tag] !== 0 ) {
+                    possibles.push( '<' + tag + '>' );
+                }
+            }
+            if (possibles.length) {
+                mw.notify(
+                    mw.message( 'massmessage-badhtml', possibles.join(', ') 
).text(),
+                    { tag: 'massmessage-html-warning' }  // Show only one 
notification at a time
+                );
+            }
+        });
+    });
+
+}( mediaWiki, jQuery ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/83064
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I72524db89112684225721b5d9729b6fd5a8221cd
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MassMessage
Gerrit-Branch: master
Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to