查看“MediaWiki:Gadget-colortoggle.js”的源代码
←
MediaWiki:Gadget-colortoggle.js
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于这些用户组的用户使用:
用户
,
管理员
,Editor
该页提供此wiki软件的界面文字,它已被保护以防止恶意修改。如欲修改所有wiki的翻译,请到
translatewiki.net
上的MediaWiki本地化计划。
您可以查看与复制此页面的源代码。
var dropMenu = $('<div id="p-colorconv" role="navigation" class="vectorMenu" aria-labelledby="p-colorconv-label" style="background: linear-gradient(rgba(255,255,255,0),#fff);"><h3 id="p-colorconv-label" tabindex="0"><span data-color="yellow" style="padding:1px 3px;margin-left: 0.7em;margin-top: 1.375em;">颜表立</span><a href="#" tabindex="-1"></a></h3><div class="menu"><ul></ul></div></div>'); function cachedFactory(factory) { var cache = {}; return function(key) { if (!(key in cache)) { cache[key] = factory(key); } return cache[key]; }; } var colorToRgba = (function() { var canvas = $('<canvas>')[0]; canvas.width = canvas.height = 1; var ctx = canvas.getContext('2d'); return cachedFactory(function(col) { ctx.clearRect(0, 0, 1, 1); ctx.fillStyle = col; ctx.fillRect(0, 0, 1, 1); var ret = $.makeArray(ctx.getImageData(0, 0, 1, 1).data); ret[3] /= 255; return ret; }); })(); function rgbaToColor(color) { if (color.length === 3) { return 'rgb(' + color[0] + ',' + color[1] + ',' + color[2] + ')'; } else { return 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + color[3] + ')'; } } function luminance(color) { var output = []; for (var i = 0; i < 3; i++) { var c = color[i] / 255; if (c <= 0.03928) output[i] = c / 12.92; else output[i] = Math.pow((c + 0.055) / 1.055, 2.4); } return 0.2126 * output[0] + 0.7152 * output[1] + 0.0722 * output[2]; } function contrastRatio(c1, c2) { var l1 = luminance(c1) + 0.05; var l2 = luminance(c2) + 0.05; if (l1 > l2) { return l1 / l2; } else { return l2 / l1; } } function hslToRgb(color) { var h = color[0], s = color[1], l = color[2]; var r, g, b; if (s === 0) { r = g = b = l; } else { var hue2rgb = function hue2rgb(p, q, t) { if (t < 0) t += 1; if (t > 1) t -= 1; if (t < 1 / 6) return p + (q - p) * 6 * t; if (t < 1 / 2) return q; if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; return p; }; var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hue2rgb(p, q, h + 1 / 3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1 / 3); } return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)]; } function rgbToHsl(color) { var r = color[0] / 255, g = color[1] / 255, b = color[2] / 255; var max = Math.max(r, g, b), min = Math.min(r, g, b); var h, s, l = (max + min) / 2; if (max == min) { h = s = 0; // achromatic } else { var d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); switch (max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return [h, s, l]; } var white = colorToRgba('#f6f6f6'); var lessBrightColor = cachedFactory(function(colortxt) { var rgb = colorToRgba(colortxt); var lum = contrastRatio(rgb, white); if (lum >= 2) { return colortxt; } var hsl = rgbToHsl(rgb); do { hsl[2] -= 0.02; rgb = hslToRgb(hsl); } while (contrastRatio(rgb, white) < 2); return rgbaToColor(rgb); }); var highContrastColor = cachedFactory(function(colortxt) { var rgb = colorToRgba(colortxt); var lum = contrastRatio(rgb, white); if (lum >= 3) { return colortxt; } var hsl = rgbToHsl(rgb); do { hsl[2] -= 0.02; rgb = hslToRgb(hsl); } while (contrastRatio(rgb, white) < 3); return rgbaToColor(rgb); }); function black(span) { span.css('color', 'black'); span.css('background-color', ''); span.css('text-shadow', ''); } function lowBrightness(span) { var color = lessBrightColor(span.attr('data-color')); span.css('color', color); span.css('background-color', ''); span.css('text-shadow', ''); } function highContrast(span) { var color = highContrastColor(span.attr('data-color')); span.css('color', color); span.css('background-color', ''); span.css('text-shadow', ''); } function original(span) { span.css('color', span.attr('data-color')); span.css('background-color', ''); span.css('text-shadow', ''); } function originalWBackground(span) { var color = span.attr('data-color'); span.css('color', color); if (contrastRatio(white, colorToRgba(color)) < 3) { span.css('background-color', '#3D3D3D'); } else { span.css('background-color', ''); } span.css('text-shadow', ''); } function originalWShadow(span) { var color = span.attr('data-color'); span.css('color', color); if (contrastRatio(white, colorToRgba(color)) < 3) { span.css('text-shadow', 'black 0 0 0.2em, black 0 0 0.2em, black 0 0 0.2em'); } else { span.css('text-shadow', ''); } span.css('background-color', ''); } function makeOption(caption, style) { var item = $('<li id="ca-colorconv-0"><a>' + caption + '</a></li>'); dropMenu.find('ul').append(item); item.click(function() { dropMenu.find('.selected').removeClass('selected'); item.addClass('selected'); localStorage.colorconv = style; applyStyle(style); }); } function applyStyle(style) { $('[data-color]').each(function(i, obj) { var item = $(obj); styles[style](item); }); } var styles = { 'black': black, 'lowBrightness': lowBrightness, 'highContrast': highContrast, 'original': original, 'originalWBackground': originalWBackground, 'originalWShadow': originalWShadow }; makeOption('黑色', 'black'); makeOption('较高对比度', 'lowBrightness'); makeOption('高对比度', 'highContrast'); makeOption('原色', 'original'); makeOption('原色+背景', 'originalWBackground'); makeOption('原色+阴影', 'originalWShadow'); $(function() { $('#left-navigation').append(dropMenu); applyStyle(localStorage.colorconv || 'lowBrightness'); });
返回至
MediaWiki:Gadget-colortoggle.js
。
导航菜单
个人工具
创建账户
登录
命名空间
消息
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
讨论版
提问求助区
帮助
帮助
沙盒
编辑教程
创建新条目
工具
链入页面
相关更改
特殊页面
页面信息