LLWiki正在建设中,欢迎加入我们

“MediaWiki:Gadget-site-shared.js”的版本间差异

来自LLWiki
跳转到导航 跳转到搜索
(mediawiki.Uri的使用體驗還是比URL API好)
标签撤销
标签移动版网页编辑 移动版编辑
第5行: 第5行:
* @Functions: 1. 除[[Special:前缀索引]]外移除页面名称最后的"/"
* @Functions: 1. 除[[Special:前缀索引]]外移除页面名称最后的"/"
* 2. [[MediaWiki:Edittools]]可定制的快速插入工具
* 2. [[MediaWiki:Edittools]]可定制的快速插入工具
* 3. 防止错误创建其他用户的用户页
* 3. 取消编辑按钮添加边框
* 4. 正确显示[[特殊:前缀索引/LLWiki:首页/当年今日/]]
* 4. 防止错误创建其他用户的用户页
* 5. 正确显示[[特殊:前缀索引/LLWiki:首页/当年今日/]]
* 5. 分类栏正确显示小写标题
* 6. 分类栏正确显示小写标题
* 6. 分类栏正确显示词曲作者的日文名
* 7. 触摸屏将packed-hover模式的gallery替换为packed
* 7. 分类栏正确显示词曲作者的日文名
* 8. 移除Widget造成的多余<p>标签
* 8. 触摸屏将packed-hover模式的gallery替换为packed
* 9. 禁止使用InPageEdit快速编辑和快速重定向
* 9. 移除Widget造成的多余<p>标签
* 10. 禁止使用InPageEdit快速编辑和快速重定向
* @Dependencies: mediawiki.api, mediawiki.Uri, mediawiki.Title, ext.gadget.site-lib
* @Dependencies: mediawiki.api, mediawiki.Uri, mediawiki.Title, ext.gadget.site-lib
* @Author: 如无特殊说明,均为[[User:Bhsd]]
* @Author: 如无特殊说明,均为[[User:Bhsd]]
第46行: 第45行:
$('#wpTextbox1').textSelection( 'encapsulateSelection', {pre: this.dataset.start, post: this.dataset.end} );
$('#wpTextbox1').textSelection( 'encapsulateSelection', {pre: this.dataset.start, post: this.dataset.end} );
});
});
/**
* @Function: 取消编辑按钮添加边框
*/
$('#mw-editform-cancel').toggleClass('oo-ui-buttonElement-frameless oo-ui-buttonElement-framed');
}


/**
/**

2021年11月9日 (二) 08:19的版本

//<nowiki>
// 由ResourceLoader直接调用,不可使用ES6语法
/**
 * @Description: 这里是桌面版和手机版通用的全局JS
 * @Functions: 1. 除[[Special:前缀索引]]外移除页面名称最后的"/"
 *			 2. [[MediaWiki:Edittools]]可定制的快速插入工具
 *			 3. 防止错误创建其他用户的用户页
 *			 4. 正确显示[[特殊:前缀索引/LLWiki:首页/当年今日/]]
 *			 5. 分类栏正确显示小写标题
 *			 6. 分类栏正确显示词曲作者的日文名
 *			 7. 触摸屏将packed-hover模式的gallery替换为packed
 *			 8. 移除Widget造成的多余<p>标签
 *			 9. 禁止使用InPageEdit快速编辑和快速重定向
 * @Dependencies: mediawiki.api, mediawiki.Uri, mediawiki.Title, ext.gadget.site-lib
 * @Author: 如无特殊说明,均为[[User:Bhsd]]
 */
"use strict";
/* global wgULS */
const pagename = mw.config.get( 'wgPageName' ),
	action = mw.config.get( 'wgAction' ),
	specialPage = mw.config.get( 'wgCanonicalSpecialPageName' ),
	hook = mw.hook( 'wikipage.content' );

/**
 * @Function: 除[[Special:前缀索引]]外去掉地址栏最后的"/"
 * @Dependencies: mediawiki.Uri
 * @Author: [[wikipedia:User:Majavah]]
 * @EditedBy: [[User:Bhsd]]
 */
if (pagename.endsWith( '/' ) && specialPage != 'Prefixindex') {
	const uri = new mw.Uri();
	uri.query.title = pagename.slice(0, -1);
	uri.path = '/zh'; // 原本title可能不在query参数里,而是在path里
	location.replace( uri.toString() );
}

if (['edit', 'submit'].includes( action ) && mw.config.get( 'wgIsProbablyEditable' )) {
	/**
	 * @Function: 更复杂的快速插入
	 * @Source: [[mw:Extension:CharInsert]]
	 * @Dependencies: jquery.textSelection(已由CharInsert扩展加载)
	 */
	// 这个事件不能重复添加,但#editform可能会重建
	$('#bodyContent').on('click', 'span.mw-charinsert-item', function() {
		$('#wpTextbox1').textSelection( 'encapsulateSelection', {pre: this.dataset.start, post: this.dataset.end} );
	});

/**
 * @Function: 点击其他用户主页面的红链不会进入创建页面
 * @Dependencies: mediawiki.Title
 */
hook.add(function($content) { // 必须立即解决,否则手机版会生成drawer
	console.log('Hook: wikipage.content, 开始处理其他用户主页面的红链');
	$content.find( '.new' ).attr('href', function(_, val) {
		const query = mw.util.getParamValue('title', val);
		if (!query) { return; } // 特殊页面
		const title = new mw.Title( query ),
			name = title.getMainText(); // 借助mediawiki.Title规范用户名格式
		// 不处理非用户空间或用户子页面
		if (title.namespace != 2 || name.includes( '/' ) || name == mw.config.get('wgUserName')) { return; }
		return title.getUrl();
	});
});

/**
 * @Function: 正确显示[[特殊:前缀索引/LLWiki:首页/当年今日/]]
 */
// 非管理员不需要关心未创建的页面
if (pagename.startsWith( 'LLWiki:首页/当年今日/' ) && action == 'view' &&
	(mw.config.get( 'wgArticleId' ) > 0 || mw.config.get( 'wgUserGroups' ).includes( 'sysop' ))) {
	const download = function() {
		if ($('#mainpage-style').length) { return; } // 避免不必要的下载
		console.log('Hook: wikipage.content, 开始下载主页样式表');
		mw.loader.load( '//cdn.jsdelivr.net/gh/bhsd-harry/LLWiki@1.4/widget/mainpage.min.css', 'text/css' );
		hook.remove( download );
	};
	hook.add( download )
		.add(function($content) { $content.children( '.mw-parser-output' ).addClass( 'mainpage-flex' ); });
}

const lcCats = ["Μ's", 'Lily white', 'JQuery'];
mw.hook( 'wikipage.categories' ).add(function($content) {
	/**
	 * @Function: 分类栏显示小写标题
	 */
	console.log('Hook: wikipage.categories, 开始替换小写分类');
	lcCats.forEach(function(ele) {
		const corrected = ele[0].toLowerCase() + ele.slice(1);
		$content.find('a:contains(' + ele + ')').text(function(_, text) {
			return text.replace( RegExp('^' + ele), corrected ); // jshint ignore: line
		});
	});
}).add(function($content) {
	/**
	 * @Function: 分类栏显示词曲作者的日文名
	 */
	if (mw.config.get( 'wgNamespaceNumber' ) !== 0) { return; }
	console.log('Hook: wikipage.categories, 开始替换词曲作者分类');
	$content.children( '#mw-normal-catlinks' ).find('a')
		.filter(function() { return this.textContent.endsWith( '作' ); }).attr('lang', 'ja')
		.text(function() { return this.title.slice(9); });
});

/**
 * @Function: 触摸屏代替gallery的hover效果
 */
if (matchMedia( 'screen and (hover: none)' ).matches) {
	hook.add(function($content) {
		console.log('Hook: wikipage.content, 开始移除gallery的hover效果');
		$content.find( '.mw-gallery-packed-hover ' ).toggleClass( 'mw-gallery-packed-hover mw-gallery-packed' );
	});
}

/**
 * @Function: 移除Widget造成的多余<p>标签
 */
hook.add(function($content) {
	$content.find( 'p:has(script, style, link)' ).after(function() {
		return $(this).children( 'script, style, link' );
	}).filter( ':empty' ).remove();
});

/**
 * @Function: 禁止使用InPageEdit快速编辑和快速重定向
 * @Dependecies: ext.gadget.site-lib
 */
mw.messages.set( wgULS({
	'gadget-ipe-warn': '由于InPageEdit小工具$1,LLWiki暂时限制该小工具的使用。', 'gadget-ipe-edit': '易造成编辑冲突',
	'gadget-ipe-redirect': '无法正确判别页面是否已存在'
}, {
	'gadget-ipe-warn': '由於InPageEdit小工具$1,LLWiki暫時限制該小工具的使用。', 'gadget-ipe-edit': '易造成編輯衝突',
	'gadget-ipe-redirect': '無法正確判別頁面是否已存在'
}) );
const noIPE = function(msg) {
	mw.notify( mw.msg( 'gadget-ipe-warn', mw.msg( 'gadget-ipe-' + (msg || 'redirect') ) ),
		{type: 'warn', autoHide: false, tag: 'InPageEdit'} );
};
mw.hook( 'InPageEdit.quickEdit' ).add(function(data) {
	data.$modalWindow.find( '.save-btn' ).prop('disabled', true);
	noIPE( 'edit' );
});
mw.hook( 'InPageEdit.quickRedirect' ).add( noIPE );
mw.hook( 'InPageEdit.quickRename' ).add( noIPE );

//</nowiki>
// [[category:桌面版小工具]] [[category:手机版小工具]] [[category:作为模块的小工具]] [[category:系统工具]] [[category:不可关闭的小工具]]
// {{DEFAULTSORT:site-shared.js}}