Jdlrobson has uploaded a new change for review.

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

Change subject: Introduce Schema class
......................................................................

Introduce Schema class

Change-Id: Ib36d9e32977923ddd63de28709028df604c3836f
---
M includes/Resources.php
A javascripts/Schema.js
A tests/qunit/test_Schema.js
3 files changed, 90 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend 
refs/changes/47/182147/1

diff --git a/includes/Resources.php b/includes/Resources.php
index 05e0cf6..feda591 100644
--- a/includes/Resources.php
+++ b/includes/Resources.php
@@ -187,6 +187,7 @@
                        'javascripts/Panel.js',
                        'javascripts/Section.js',
                        'javascripts/Page.js',
+                       'javascripts/Schema.js',
                        'javascripts/application.js',
                ),
                'position' => 'bottom',
diff --git a/javascripts/Schema.js b/javascripts/Schema.js
new file mode 100644
index 0000000..4a0dbd1
--- /dev/null
+++ b/javascripts/Schema.js
@@ -0,0 +1,75 @@
+( function ( M, $ ) {
+       var Schema,
+               browser = M.require( 'browser' ),
+               Class = M.require( 'Class' );
+
+       /**
+        * @class Schema
+        * @extends Class
+        */
+       Schema = Class.extend( {
+               /**
+                * @cfg {Object} defaults Default options hash.
+                * @cfg {String} defaults.mobileMode whether user is in stable 
beta or alpha
+                */
+               defaults: {
+                       mobileMode: M.getMode()
+               },
+               name: 'MobileFrontendBadSchemaName',
+               /**
+                * @param {Object} defaults
+                * @param {String} [schemaName]
+               */
+               initialize: function ( defaults, schemaName ) {
+                       defaults = $.extend( this.defaults, defaults || {} );
+                       if ( schemaName ) {
+                               this.name = schemaName;
+                       }
+                       this.defaults = defaults;
+                       Class.prototype.initialize.apply( this, arguments );
+               },
+               /**
+                * Retrieve and, if not present, generate a random session ID
+                * (32 alphanumeric characters).
+                * FIXME: Use mw.user
+                * FIXME: Fall back to using cookies if localStorage isn't 
supported
+                *
+                * @method
+                * @return {string}
+                */
+               getSessionId: function () {
+                       var sessionId;
+                       if ( !browser.supportsLocalStorage() ) {
+                               return '';
+                       }
+                       sessionId = localStorage.getItem( 'sessionId' );
+
+                       if ( !sessionId ) {
+                               // FIXME: use mw.user.generateRandomSessionId 
when we can,
+                               // as of now mediawiki.user has no mobile 
target (yay, targets in RL!)
+                               sessionId = '';
+                               while ( sessionId.length < 32 ) {
+                                       // 
http://stackoverflow.com/a/8084248/365238
+                                       sessionId += Math.random().toString( 36 
).slice( 2, 32 + 2 - sessionId.length );
+                               }
+                               localStorage.setItem( 'sessionId', sessionId );
+                       }
+                       return sessionId;
+               },
+               /**
+                *
+                * @method
+                * @param {Object} data to log
+                * @return {jQuery.Deferred}
+                */
+               log: function ( data ) {
+                       if ( mw.eventLog ) {
+                               return mw.eventLog.logEvent( this.name, 
$.extend( this.defaults, data ) );
+                       } else {
+                               return $.Deferred().reject( 'EventLogging not 
installed.' );
+                       }
+               }
+       } );
+       M.define( 'Schema', Schema );
+
+}( mw.mobileFrontend, jQuery ) );
diff --git a/tests/qunit/test_Schema.js b/tests/qunit/test_Schema.js
new file mode 100644
index 0000000..d16731b
--- /dev/null
+++ b/tests/qunit/test_Schema.js
@@ -0,0 +1,14 @@
+( function ( $, M ) {
+       var Schema = M.require( 'Schema' );
+
+       QUnit.module( 'Schema' );
+
+       QUnit.test( '#getSessionId', 3, function ( assert ) {
+               var schema = new Schema(),
+                       sessionId = schema.getSessionId();
+               assert.strictEqual( typeof sessionId, 'string', 'session ID is 
a string' );
+               assert.strictEqual( sessionId.length, 32, 'session ID is 32 
chars long' );
+               assert.strictEqual( schema.getSessionId(), sessionId, 'session 
ID is not regenerated if present' );
+       } );
+
+}( jQuery, mw.mobileFrontend ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib36d9e32977923ddd63de28709028df604c3836f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to