diff --git a/includes/Minerva.hooks.php b/includes/Minerva.hooks.php index 2f953de..9f8c73e 100644 --- a/includes/Minerva.hooks.php +++ b/includes/Minerva.hooks.php @@ -5,8 +5,6 @@ /** * Hook handlers for Minerva skin. - * Hooks specific to all skins running in mobile mode should belong in - * MobileFrontend.hooks.php * * Hook handler method names should be in the form of: * on() @@ -38,7 +36,7 @@ class MinervaHooks { $wgResourceLoaderLESSImportPaths[] = dirname( __DIR__ ) . "/minerva.less/"; if ( !ExtensionRegistry::getInstance()->isLoaded( 'MobileFrontend' ) ) { - die( 'This version of the MobileFrontend extension requires MediaWiki 1.25+' ); + die( 'This version of the Minerva skin requires MobileFrontend' ); } // Setup alias for compatibility with SkinMinervaNeue. if ( !class_exists( 'SkinMinervaNeue' ) ) { @@ -62,7 +60,7 @@ class MinervaHooks { 'skins.minerva.notifications.badge' ], 'localBasePath' => dirname( __DIR__ ), - 'remoteExtPath' => 'MobileFrontend', + 'remoteExtPath' => 'MinervaNeue', 'targets' => [ 'mobile', 'desktop' ], 'scripts' => [ 'tests/qunit/skins.minerva.notifications.badge/test_NotificationBadge.js' diff --git a/scripts/README.txt b/scripts/README.txt deleted file mode 100644 index 04a844b..0000000 --- a/scripts/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -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 -* Create commits for both MobileFrontend and Minerva to handle the move. -* Run: - > python3 scripts/migrate.python diff --git a/scripts/migrate.py b/scripts/migrate.py deleted file mode 100644 index d5b9fc2..0000000 --- a/scripts/migrate.py +++ /dev/null @@ -1,239 +0,0 @@ -mfdir = '../../extensions/MobileFrontend' - -import json, shutil, os, subprocess, time -from collections import OrderedDict -import sys - -DRY_RUN = False -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() - -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' -] - -def reset(): - # 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) - if not DRY_RUN: - subprocess.call(["rm -rf includes && rm -rf resources && rm -rf minerva.less && rm -rf i18n && rm -rf skinStyles && rm -rf tests/qunit && rm -rf tests/phpunit"], shell=True) - subprocess.call(["mkdir includes && mkdir includes/skins && mkdir includes/models && mkdir resources && mkdir minerva.less && mkdir i18n && mkdir skinStyles && mkdir tests/qunit && mkdir tests/qunit/skins.minerva.notifications.badge && mkdir tests/phpunit/ && mkdir tests/phpunit/skins"], shell=True) - time.sleep(1) - -def saveJSON(path, data, sort_keys = False): - if not DRY_RUN: - with open(path, 'w') as outfile: - json.dump(data, outfile, indent = "\t", ensure_ascii=False, separators=(',', ': '), sort_keys=sort_keys) - -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_files_in_directory(dir): - if not DRY_RUN: - # steal templates etc from MobileFrontend - for root, dirs, files in os.walk(mfdir + '/' + dir): - for file in files: - steal(root + '/' + file) - -def steal( path ): - dest = path.replace(mfdir + '/', '' ) - origin = mfdir + '/' + path - print('\tstealing %s from %s'%(dest, origin)) - try: - if not DRY_RUN: - shutil.move( origin, dest ) - except ( FileNotFoundError, shutil.Error ) as e: - print (e) - # probably done in initial steal steps - pass - -def copy( path ): - if not DRY_RUN: - print('copying %s'%path) - try: - # ../ because we are in scripts folder - shutil.copy( mfdir + '/' + path, path ) - except ( FileNotFoundError, shutil.Error ) as e: - print (e) - # probably done in initial steal steps - pass - -def isOwnedByMinerva(key, value=""): - return key.startswith("Minerva") or key.endswith("Minerva") or key.startswith( 'skins.minerva' ) or \ - ( type(value) == type('string') and "skins/" in value ) - -# modulename, ResourceModules -def migrateResourceModuleSkinStyles(): - mf = {} - minerva = {} - - for module, files in mfExtensionData["ResourceModuleSkinStyles"]["minerva"].items(): - for f in files: - try: - os.makedirs('skinStyles/%s'%module) - except FileExistsError: - pass - steal(f) - minerva[module] = files - - minervaSkinData["ResourceModuleSkinStyles"]["minerva"] = minerva - del mfExtensionData["ResourceModuleSkinStyles"]["minerva"] - -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 ) - if "messages" in obj[subkey]: - for msg in obj[subkey]["messages"]: - if type(obj[subkey]["messages"]) == type([]): - messages.append(msg) - else: - msgVal = obj[subkey]["messages"][msg] - if type(msgVal) == type([]): - messages.append(msg) - else: - messages.append(msgVal) - elif key == 'AutoloadClasses': - steal( val ) - - toObj[key][subkey] = val - keys_to_remove.append(subkey) - - # cleanup - clean( keys_to_remove, key ) - print('Moved keys from %s:\n\t\t%s'%(key, keys_to_remove)) - -def stealHooks(): - 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 - -################################################################################################################################ -######## SCRIPT BEGINS HERE -################################################################################################################################ -reset() - -minervaSkinData['ResourceModuleSkinStyles']['minerva'] = {} -migrateObject( mfExtensionData, minervaSkinData, "AutoloadClasses") -migrateObject( mfExtensionData, minervaSkinData, "ResourceModules") -migrateObject( mfExtensionData, minervaSkinData, "config") -migrateResourceModuleSkinStyles() -stealHooks() - - -steal_files_in_directory('includes/skins/') -steal_files_in_directory('minerva.less/') -steal_files_in_directory('tests/qunit/skins.minerva.notifications.badge') -steal_files_in_directory('tests/phpunit/skins') - -# steal the service wirings -steal('includes/Minerva.ServiceWiring.php'); - -# remove -del mfExtensionData["ValidSkinNames"] -# for time being we do this. When code has been removed from MobileFrontend can switch to minerva-neue -minervaSkinData["ValidSkinNames"] = { - "minerva-neue": "MinervaNeue" -} -try: - del minervaSkinData["ServiceWiringFiles"] -except KeyError: - pass - -# add onRegistration hook -minervaSkinData['callback'] = 'MinervaHooks::onRegistration'; - -# cleanup -minervaSkinData['namemsg'] = 'skinname-minerva' -minervaSkinData['descriptionmsg'] = "minerva-skin-desc" -minervaSkinData['ConfigRegistry']['minerva'] = 'GlobalVarConfig::newInstance' -del minervaSkinData['ResourceModuleSkinStyles']['minerva-neue'] -del minervaSkinData['ConfigRegistry']['minerva-neue'] - -# setup registration -minervaSkinData["callback"] = "MinervaHooks::onRegistration"; - -saveJSON('skin.json', minervaSkinData) -saveJSON(mfdir + '/extension.json', mfExtensionData) - -# migrate i18n -print('migrating i18n') -for root, dirs, files in os.walk(mfdir + '/i18n/'): - for language in files: - try: - f = open('/i18n/' + language, 'r') - newLanguageData = json.load(f, object_pairs_hook=OrderedDict) - except FileNotFoundError: - newLanguageData = { - "@metadata": { - "authors": [] - } - } - f.close() - - f = open(mfdir + '/i18n/' + language, 'r') - languageData = json.load(f, object_pairs_hook=OrderedDict) - f.close() - messages.sort() - if language == 'en.json': - print("Moving %s messages"%len(messages)) - for msgKey in messages: - if language == 'en.json': - print("\t\tMap message %s"%(msgKey)) - try: - newLanguageData[msgKey] = languageData[msgKey] - del languageData[msgKey] - except KeyError: - pass - - # save to mf - saveJSON( mfdir + '/i18n/' + language, languageData ) - - # save to minerva - saveJSON( 'i18n/' + language, newLanguageData, True ) diff --git a/tests/browser/README.mediawiki b/tests/browser/README.mediawiki index 4c8af26..8874a78 100644 --- a/tests/browser/README.mediawiki +++ b/tests/browser/README.mediawiki @@ -7,7 +7,7 @@ Include the LocalSettings.php in this folder into your MediaWiki LocalSettings.p Note including this in a production instance is not advised given it fiddles with permissions.
-include_once "$IP/extensions/MobileFrontend/tests/browser/LocalSettings.php";
+include_once "$IP/skins/MinervaNeue/tests/browser/LocalSettings.php";
 
Further tweaks may be necessary to run tests that are not tagged @integration: @@ -19,11 +19,6 @@ Further tweaks may be necessary to run tests that are not tagged @integration: ** an edit count of greater than 0 ** Ensure user has bureaucrat and admin rights (set via Special:UserRights) -= MobileFrontend Extension = - -For general information about MobileFrontend Extension please see -README.mediawiki file in the root of the repository. - ==== Selenium tests ==== To run the Selenium tests you will have to install Ruby (for the exact @@ -58,9 +53,9 @@ Tests that use steps that create pages (create_page_api_steps.rb) need to set the MEDIAWIKI_API_URL environment variable, e.g. export MEDIAWIKI_API_URL=http://en.wikipedia.beta.wmflabs.org/w/api.php -Run the tests from the MobileFrontend directory with: +Run the tests from the Minerva directory with: - make cucumber + bundle exec cucumber tests/browser/features If you want to run a single set of tests, go to the tests/browser directory and call 'bundle exec cucumber' with the path to the test file. For example, to run diff --git a/tests/browser/features/step_definitions/common_steps.rb b/tests/browser/features/step_definitions/common_steps.rb index a27d3fc..5139e54 100644 --- a/tests/browser/features/step_definitions/common_steps.rb +++ b/tests/browser/features/step_definitions/common_steps.rb @@ -62,7 +62,7 @@ Given(/^my browser doesn't support JavaScript$/) do end Given(/^the "(.*?)" page is protected\.$/) do |page| - api.protect_page(page, 'MobileFrontend Selenium test protected this page') + api.protect_page(page, 'MinervaNeue Selenium test protected this page') end When(/^I click the browser back button$/) do diff --git a/tests/browser/features/step_definitions/create_page_api_steps.rb b/tests/browser/features/step_definitions/create_page_api_steps.rb index 2cbb858..7faf837 100644 --- a/tests/browser/features/step_definitions/create_page_api_steps.rb +++ b/tests/browser/features/step_definitions/create_page_api_steps.rb @@ -1,6 +1,6 @@ # export MEDIAWIKI_API_URL = http://en.wikipedia.beta.wmflabs.org/w/api.php Given(/^I go to a page that has references$/) do - wikitext = "MobileFrontend is a MediaWiki extension. + wikitext = "MinervaNeue is a MediaWiki skin. {{#tag:ref|This is a note.This is a nested ref.|group=note}} ==Notes== diff --git a/tests/phpunit/MenuBuilderTest.php b/tests/phpunit/MenuBuilderTest.php index da6430c..dc9b07c 100644 --- a/tests/phpunit/MenuBuilderTest.php +++ b/tests/phpunit/MenuBuilderTest.php @@ -6,7 +6,7 @@ use MediaWiki\Minerva\MenuBuilder; use MediaWiki\Minerva\MenuEntry; /** - * @group MobileFrontend + * @group MinervaNeue */ class MenuTest extends \PHPUnit_Framework_TestCase { private $homeComponent = [ diff --git a/tests/phpunit/skins/SkinMinervaPageActionsTest.php b/tests/phpunit/skins/SkinMinervaPageActionsTest.php index c807593..14bdc66 100644 --- a/tests/phpunit/skins/SkinMinervaPageActionsTest.php +++ b/tests/phpunit/skins/SkinMinervaPageActionsTest.php @@ -1,5 +1,13 @@