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