Jdlrobson has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/347775 )

Change subject: Add scaffolding and migration script
......................................................................

Add scaffolding and migration script

Change-Id: Ie9420dc85f658fa21a1524dca9374cb1e14fcad7
---
A MinervaNeue.php
A README.txt
A package.json
A scripts/migrate.py
A skin.json
5 files changed, 228 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/skins/MinervaNeue 
refs/changes/75/347775/1

diff --git a/MinervaNeue.php b/MinervaNeue.php
new file mode 100644
index 0000000..f63fc93
--- /dev/null
+++ b/MinervaNeue.php
@@ -0,0 +1,14 @@
+<?php
+
+if ( function_exists( 'wfLoadSkin' ) ) {
+       wfLoadSkin( 'MinervaNeue' );
+       // Keep i18n globals so mergeMessageFileList.php doesn't break
+       $wgMessagesDirs['MinervaNeue'] = __DIR__ . '/i18n';
+       /* wfWarn(
+               'Deprecated PHP entry point used for Vector skin. Please use 
wfLoadSkin instead, ' .
+               'see https://www.mediawiki.org/wiki/Extension_registration for 
more details.'
+       ); */
+       return true;
+} else {
+       die( 'This version of the MinervaNeue skin requires MediaWiki 1.25+' );
+}
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..94c580b
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,6 @@
+Porting Minerva code from MobileFrontend to Minerva:
+* Make sure this repository is in your MediaWiki skins directory
+* Make sure MobileFrontend is installed in extensions/MobileFrontend in your 
MediaWiki install
+* Run:
+       > python3 scripts/migrate.py
+* Create commits for both MobileFrontend and Minerva to handle the move.
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..efde4c0
--- /dev/null
+++ b/package.json
@@ -0,0 +1,17 @@
+{
+  "private": true,
+  "scripts": {
+    "test": "grunt test"
+  },
+  "devDependencies": {
+    "grunt": "0.4.5",
+    "grunt-cli": "0.1.13",
+
+    "grunt-eslint": "19.0.0",
+    "eslint-config-wikimedia": "0.3.0",
+    "grunt-banana-checker": "0.5.0",
+    "grunt-jsonlint": "1.0.7",
+    "grunt-stylelint": "0.6.0",
+    "stylelint-config-wikimedia": "0.3.0"
+  }
+}
diff --git a/scripts/migrate.py b/scripts/migrate.py
new file mode 100644
index 0000000..61c9280
--- /dev/null
+++ b/scripts/migrate.py
@@ -0,0 +1,155 @@
+mfdir = '../../extensions/MobileFrontend'
+
+import json, shutil, os, subprocess, time
+from collections import OrderedDict
+
+messages = [ 'mobile-frontend-placeholder', 'skinname-minerva',
+  'mobile-frontend-talk-back-to-userpage',
+  'mobile-frontend-talk-back-to-projectpage',
+  'mobile-frontend-talk-back-to-filepage',
+  'mobile-frontend-talk-back-to-page',
+  'mobile-frontend-editor-edit',
+  'mobile-frontend-user-newmessages',
+  'mobile-frontend-main-menu-contributions',
+  'mobile-frontend-main-menu-watchlist',
+  'mobile-frontend-main-menu-settings',
+  'mobile-frontend-home-button',
+  'mobile-frontend-random-button',
+  'mobile-frontend-main-menu-nearby',
+  'mobile-frontend-main-menu-logout',
+  'mobile-frontend-main-menu-login',
+  'mobile-frontend-history',
+  'mobile-frontend-user-page-member-since',
+  'mobile-frontend-main-menu-button-tooltip',
+  'mobile-frontend-language-article-heading',
+  'mobile-frontend-pageaction-edit-tooltip',
+  'mobile-frontend-language-article-heading',
+  'mobile-frontend-user-page-talk',
+  'mobile-frontend-user-page-contributions',
+  'mobile-frontend-user-page-uploads'
+]
+
+# Do cleanup in preparation for patchsets it will make.
+subprocess.call(["git clean -fd"], shell=True)
+subprocess.call(["git stash && git clean -fd"], shell=True, cwd=mfdir)
+subprocess.call(["rm -rf includes && rm -rf resources && rm -rf minerva.less 
&& rm -rf i18n"], shell=True)
+subprocess.call(["mkdir includes && mkdir includes/skins && mkdir resources && 
mkdir minerva.less && mkdir i18n"], shell=True)
+time.sleep(1)
+
+def saveJSON(path, data):
+    with open(path, 'w') as outfile:
+        json.dump(data, outfile, indent = "\t", ensure_ascii=False, 
separators=(',', ': '))
+
+def clean( keys_to_remove, data_key ):
+    # Remove the keys we added from MobileFrontend extension.json
+    for key in keys_to_remove:
+        try:
+            del mfExtensionData[data_key][key]
+        except KeyError:
+            pass
+
+def steal( path ):
+    print('stealing %s'%path)
+    try:
+        # ../ because we are in scripts folder
+        shutil.move( mfdir + '/' + path, path )
+    except ( FileNotFoundError, shutil.Error ) as e:
+        print (e)
+        # probably done in initial steal steps
+        pass
+
+f = open(mfdir +'/extension.json', 'r')
+mfExtensionData = json.load(f, object_pairs_hook=OrderedDict)
+f.close()
+f = open('skin.json', 'r')
+minervaSkinData = json.load(f, object_pairs_hook=OrderedDict)
+f.close()
+
+def isOwnedByMinerva(key, value):
+    return key.startswith("Minerva") or key.startswith( 'skins.minerva' ) or \
+        ( type(value) == type('string') and "skins/" in value )
+
+def migrateObject(fromObj, toObj, key):
+    obj = fromObj[key]
+    keys_to_remove = []
+    files_to_steal = []
+    for subkey in obj:
+        val = obj[subkey]
+        if isOwnedByMinerva(subkey, val):
+            if key == "ResourceModules":
+                steal( 'resources/%s'% subkey )
+            elif key == 'AutoloadClasses':
+                steal( val )
+
+            toObj[key][subkey] = val
+            keys_to_remove.append(subkey)
+
+    # cleanup
+    print('remove %s'%keys_to_remove)
+    clean( keys_to_remove, key )
+
+migrateObject( mfExtensionData, minervaSkinData, "AutoloadClasses")
+migrateObject( mfExtensionData, minervaSkinData, "ResourceModules")
+migrateObject( mfExtensionData, minervaSkinData, "config")
+
+for hookname in mfExtensionData['Hooks']:
+    mfHooks = mfExtensionData['Hooks'][hookname]
+    minervaHooks = []
+    newMfHooks = []
+    for hook in mfHooks:
+        if isOwnedByMinerva(hook, hook):
+            minervaHooks.extend([hook])
+        else:
+            newMfHooks.extend([hook])
+    if len(minervaHooks) > 0:
+        minervaSkinData['Hooks'][hookname] = minervaHooks
+    mfExtensionData['Hooks'][hookname] = newMfHooks
+
+# steal templates etc from MobileFrontend
+for root, dirs, files in os.walk(mfdir + '/includes/skins/'):
+    for file in files:
+        steal('includes/skins/' + file)
+
+# steal LESS stuff
+for root, dirs, files in os.walk(mfdir + '/includes/minerva.less/'):
+    for file in files:
+        steal('minerva.less/' + file)
+
+# remove
+del mfExtensionData["ValidSkinNames"]
+
+with open('skin.json', 'w') as outfile:
+    #prettify output
+    json.dump(minervaSkinData, outfile, sort_keys = True, indent = 2, 
ensure_ascii=False, separators=(',', ': '))
+
+with open(mfdir + '/extension.json', 'w') as outfile:
+    #prettify output
+    json.dump(mfExtensionData, outfile, indent = "\t", ensure_ascii=False, 
separators=(',', ': '))
+
+# migrate i18n
+print('migrating i18n')
+for root, dirs, files in os.walk(mfdir + '/i18n/'):
+    for language in files:
+        newLanguageData = {}
+        f = open(mfdir + '/i18n/' + language, 'r')
+        languageData = json.load(f, object_pairs_hook=OrderedDict)
+        f.close()
+        for msgKey in messages:
+            try:
+                newLanguageData[msgKey] = languageData[msgKey]
+                del languageData[msgKey]
+            except KeyError:
+                pass
+
+        # save to mf
+        saveJSON( mfdir + '/i18n/' + language, languageData )
+        
+        # mobile specific renames
+        try:
+            newLanguageData['skinname-minerva-neue'] = 
newLanguageData['skinname-minerva']
+            del newLanguageData['skinname-minerva']
+        except KeyError:
+            pass
+
+        # save to minerva
+        saveJSON( 'i18n/' + language, newLanguageData )
diff --git a/skin.json b/skin.json
new file mode 100644
index 0000000..9cec34b
--- /dev/null
+++ b/skin.json
@@ -0,0 +1,36 @@
+{
+  "AutoloadClasses": {},
+  "ConfigRegistry": {
+    "minerva-neue": "GlobalVarConfig::newInstance"
+  },
+  "Hooks": {},
+  "MessagesDirs": {
+    "MinervaNeue": [
+      "i18n"
+    ]
+  },
+  "ResourceFileModulePaths": {
+    "localBasePath": "",
+    "remoteSkinPath": "MinervaNeue"
+  },
+  "ResourceModuleSkinStyles": {
+    "minerva-neue": {}
+  },
+  "ResourceModules": {},
+  "ValidSkinNames": {
+    "minerva": "Minerva"
+  },
+  "author": [],
+  "callback": "MinervaHooks::onRegistration",
+  "config": {},
+  "descriptionmsg": "minerva-neue-skin-desc",
+  "license-name": "GPL-2.0+",
+  "manifest_version": 1,
+  "name": "MinervaNeue",
+  "namemsg": "skinname-minerva-neue",
+  "requires": {
+    "MediaWiki": ">= 1.25.0"
+  },
+  "type": "skin",
+  "url": "https://www.mediawiki.org/wiki/Skin:MinervaNeue";
+}
\ No newline at end of file

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie9420dc85f658fa21a1524dca9374cb1e14fcad7
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/skins/MinervaNeue
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <jrob...@wikimedia.org>

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

Reply via email to