विकिस्रोत hiwikisource https://hi.wikisource.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%95%E0%A4%BF%E0%A4%B8%E0%A5%8D%E0%A4%B0%E0%A5%8B%E0%A4%A4:%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0 MediaWiki 1.47.0-wmf.14 first-letter मीडिया विशेष वार्ता सदस्य सदस्य वार्ता विकिस्रोत विकिस्रोत वार्ता चित्र चित्र वार्ता मीडियाविकि मीडियाविकि वार्ता साँचा साँचा वार्ता सहायता सहायता वार्ता श्रेणी श्रेणी वार्ता लेखक लेखक वार्ता अनुवाद अनुवाद वार्ता पृष्ठ पृष्ठ वार्ता विषयसूची विषयसूची वार्ता TimedText TimedText talk मॉड्यूल मॉड्यूल वार्ता Event Event talk सहायता:अपलोड 12 832 668790 1260 2026-08-08T07:24:52Z सौरभ तिवारी 05 49 अपलोड सहायता। 668790 wikitext text/x-wiki यह विकिस्रोत पर पुस्तकें तथा फाइलें अपलोड करने से जुड़ी सूचनाएं देने के लिए निर्मित सहायता पृष्ठ है। विकिस्रोत पर फाइलें/चित्र (जैसे pdf, djvu, png या jpg) अपलोड करने के लिए आपको [https://commons.wikimedia.org/wiki/Main_Page विकिमीडिया कॉमन्स] का उपयोग करना होता है। ==मुख्य चरण== ===खाता बनाएँ/लॉग इन करें=== फाइल/चित्र अपलोड करने के लिए सदस्य को विकि प्रकल्प पर एक पंजीकृत खाते की आवश्यकता होती है। [[श्रेणी:सहायता]] s9s91u87s67xoivqmc7xymzlebqpv8d मीडियाविकि:Gadget-ReferenceTooltips.css 8 154423 668792 474558 2026-08-08T11:37:50Z Johannnes89 4486 updated per hiwiki 668792 css text/css /* See [[mw:Reference Tooltips]] */ .rt-overlay { position: absolute; width: 100%; font-size: calc(var(--font-size-medium, 1rem) * (13 / 14)); line-height: 1.5em; /* Remove after https://phabricator.wikimedia.org/T369880 is resolved and $teleportTarget is assigned */ z-index: 800; /* match z-index-tooltip in https://doc.wikimedia.org/codex/latest/design-tokens/z-index.html */ top: 0; } /* Remove after https://phabricator.wikimedia.org/T369880 is resolved and $teleportTarget is assigned */ .skin-vector-legacy .rt-overlay { font-size: 13px; } .skin-monobook .rt-overlay { font-size: 12.7px; } .rt-tooltip { position: absolute; max-width: 27em; background: var(--background-color-base, #fff); color: var(--color-base, #202122); border: 1px solid var(--border-color-subtle, #c8ccd1); border-radius: 2px; box-shadow: 0 20px 48px 0 rgba(0, 0, 0, 0.2); } html.skin-theme-clientpref-night .rt-tooltip { box-shadow: 0 20px 48px 0 rgba(0, 0, 0, 1); } /* Extend the tooltip vertically to make sure it doesn't disappear while the user moves the mouse to it */ .rt-tooltip-above .rt-hoverArea { margin-bottom: -0.6em; padding-bottom: 0.6em; } .rt-tooltip-below .rt-hoverArea { margin-top: -0.7em; padding-top: 0.7em; } .rt-scroll { overflow-x: auto; } .rt-content { padding: 0.7em 0.9em; overflow-wrap: break-word; } .rt-tail { /* Use 48%, not 50%, to make the tail start at a right place in Blink browsers in Windows on bigger system font sizes */ background: linear-gradient(to top right, var(--border-color-subtle, #c8ccd1) 48%, rgba(0, 0, 0, 0) 48%); --tail-left: 19px; --tail-side-width: 13px; } .rt-tail, .rt-tail:after { position: absolute; /* Make sure the tail is behind the scrollbar, e.g. [73] at https://en.wikipedia.org/w/index.php?title=Lemniscate_elliptic_functions&oldid=1231701944#cite_ref-73 if .rt-tooltip has width of 25em */ z-index: -1; width: var(--tail-side-width); height: var(--tail-side-width); } .rt-tail:after { content: ''; background: var(--background-color-base, #fff); bottom: 1px; left: 1px; } .rt-tooltip-above .rt-tail { transform: rotate(-45deg); transform-origin: 100% 100%; bottom: 0; left: var(--tail-left); } .rt-tooltip-below .rt-tail { transform: rotate(135deg); transform-origin: 0 0; top: 0; left: calc(var(--tail-left) + var(--tail-side-width)); } .rt-settingsLink { background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%0D%0A%20%20%20%20%3Cpath%20fill%3D%22%2354595d%22%20d%3D%22M20%2014.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5%201.1c-.5-.3-1-.5-1.4-.6L13.5%205h-2.9l-.3%201.8c-.5.1-.9.3-1.4.6L7.4%206.3%205.3%208.4l1%201.5c-.3.5-.4.9-.6%201.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6%201.4l-1%201.5%202.1%202.1%201.5-1c.4.2.9.4%201.4.6l.3%201.8h3l.3-1.8c.5-.1.9-.3%201.4-.6l1.5%201.1%202.1-2.1-1.1-1.5c.3-.5.5-1%20.6-1.4l1.5-.3zM12%2016c-1.7%200-3-1.3-3-3s1.3-3%203-3%203%201.3%203%203-1.3%203-3%203z%22%2F%3E%0D%0A%3C%2Fsvg%3E); float: right; margin: -0.5em -0.5em 0 0.5em; box-sizing: border-box; height: 32px; width: 32px; border: 1px solid transparent; border-radius: 2px; background-position: center center; background-repeat: no-repeat; background-size: 24px 24px; } html.skin-theme-clientpref-night .rt-settingsLink { background-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%0D%0A%20%20%20%20%3Cpath%20fill%3D%22%23c8ccd1%22%20d%3D%22M20%2014.5v-2.9l-1.8-.3c-.1-.4-.3-.8-.6-1.4l1.1-1.5-2.1-2.1-1.5%201.1c-.5-.3-1-.5-1.4-.6L13.5%205h-2.9l-.3%201.8c-.5.1-.9.3-1.4.6L7.4%206.3%205.3%208.4l1%201.5c-.3.5-.4.9-.6%201.4l-1.7.2v2.9l1.8.3c.1.5.3.9.6%201.4l-1%201.5%202.1%202.1%201.5-1c.4.2.9.4%201.4.6l.3%201.8h3l.3-1.8c.5-.1.9-.3%201.4-.6l1.5%201.1%202.1-2.1-1.1-1.5c.3-.5.5-1%20.6-1.4l1.5-.3zM12%2016c-1.7%200-3-1.3-3-3s1.3-3%203-3%203%201.3%203%203-1.3%203-3%203z%22%2F%3E%0D%0A%3C%2Fsvg%3E); } .rt-settingsLink:hover, .rt-settingsLink:active { background-color: var(--background-color-interactive, #eaecf0); } .rt-settingsLink:active { border-color: var(--border-color-interactive, #72777d); } .rt-settingsLink:focus { outline: 1px solid transparent; } .rt-settingsLink:focus:not(:active) { border-color: var(--border-color-progressive--focus, #36c); box-shadow: inset 0 0 0 1px var(--box-shadow-color-progressive--focus, #36c); } .rt-target { background-color: var(--background-color-progressive-subtle, #eaf3ff); } .rt-enableField { font-weight: bold; margin-bottom: 1.25em; } .rt-numberInput.rt-numberInput { width: 10em; } .rt-tooltipsForCommentsField.rt-tooltipsForCommentsField.rt-tooltipsForCommentsField { margin-top: 1.25em; } .rt-disabledHelp { border-collapse: collapse; } .rt-disabledHelp td { padding: 0; } .rt-disabledNote.rt-disabledNote { vertical-align: bottom; padding-left: 0.36em; font-weight: bold; } @keyframes rt-fade-in-up { 0% { opacity: 0; transform: translate(0, 20px); } 100% { opacity: 1; transform: translate(0, 0); } } @keyframes rt-fade-in-down { 0% { opacity: 0; transform: translate(0, -20px); } 100% { opacity: 1; transform: translate(0, 0); } } @keyframes rt-fade-out-down { 0% { opacity: 1; transform: translate(0, 0); } 100% { opacity: 0; transform: translate(0, 20px); } } @keyframes rt-fade-out-up { 0% { opacity: 1; transform: translate(0, 0); } 100% { opacity: 0; transform: translate(0, -20px); } } .rt-fade-in-up { animation: rt-fade-in-up 0.2s ease forwards; } .rt-fade-in-down { animation: rt-fade-in-down 0.2s ease forwards; } .rt-fade-out-down { animation: rt-fade-out-down 0.2s ease forwards; } .rt-fade-out-up { animation: rt-fade-out-up 0.2s ease forwards; } 8zpwcq3vyh7m42hvp1h7840jq6sb25g मीडियाविकि:Gadget-ReferenceTooltips.js 8 154424 668791 619509 2026-08-08T11:37:26Z Johannnes89 4486 updated per hiwiki 668791 javascript text/javascript // See [[mw:Reference Tooltips]] // Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js /*eslint space-in-parens: ["error", "always"], array-bracket-spacing: ["error", "always"]*/ ( function () { // If you're loading the script from another wiki and want to set your settings, do that in `window` // properties with `rt_` prefix, e.g. // window.rt_REF_LINK_SELECTOR = '...'; // They will be used instead of enwiki detaults. var REF_LINK_SELECTOR = window.rt_REF_LINK_SELECTOR || '.reference, a[href^="#CITEREF"]', COMMENTED_TEXT_CLASS = window.rt_COMMENTED_TEXT_CLASS || 'rt-commentedText', COMMENTED_TEXT_SELECTOR = ( window.rt_COMMENTED_TEXT_SELECTOR || ( COMMENTED_TEXT_CLASS ? '.' + COMMENTED_TEXT_CLASS + ', ' : '' ) + 'abbr[title]' ); if ( mw.messages.get( 'rt-settings' ) === null ) { mw.messages.set( { 'rt-settings': 'टूलटिप सेटिंग', 'rt-enable-footer': 'सन्दर्भ टूलटिप सक्षम करें', 'rt-settings-title': 'Reference Tooltips', 'rt-save': 'सेटिंग सहेजें', 'rt-enable': 'सन्दर्भ टूलटिप सक्षम करें', 'rt-activationMethod': 'टूलटिप सक्रिय किया गया, द्वारा: ', 'rt-hovering': 'हूवर', 'rt-clicking': 'क्लिक करना', 'rt-delay': 'टूलटिप में हुआ विलम्ब (मिलिसेकंड में): ', 'rt-tooltipsForComments': 'Show the tooltip over <span title="Tooltip example" class="' + ( COMMENTED_TEXT_CLASS || 'rt-commentedText' ) + '" style="border-bottom: 1px dotted; cursor: help;">text with a dotted underline</span> in Reference Tooltips style (allows to see such tooltips on devices with no mouse support)', 'rt-disabledNote': 'एक बार अक्षम करने पर, पन्ने के निचले हिस्से में दी गयी कड़ी से इसे सक्षम कर सकते हैं।', 'rt-done': 'Done', 'rt-enabled': 'Reference Tooltips are enabled' } ); } // "Global" variables var SECONDS_IN_A_DAY = 60 * 60 * 24, CLASSES = { FADE_IN_DOWN: 'rt-fade-in-down', FADE_IN_UP: 'rt-fade-in-up', FADE_OUT_DOWN: 'rt-fade-out-down', FADE_OUT_UP: 'rt-fade-out-up' }, IS_TOUCHSCREEN = 'ontouchstart' in document.documentElement, // Quite a rough check for mobile browsers, a mix of what is advised at // https://stackoverflow.com/a/24600597 (sends to // https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent) // and https://stackoverflow.com/a/14301832 IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) || typeof window.orientation !== 'undefined', CLIENT_NAME = $.client.profile().name, settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss, windowManager, $teleportTarget, $body = $( document.body ), $window = $( window ), $overlay = $( '<div>' ) .addClass( 'rt-overlay' ) .appendTo( $body ); // Can't use before https://phabricator.wikimedia.org/T369880 is resolved // mw.loader.using( 'mediawiki.page.ready' ).then( function ( require ) { // $teleportTarget = $( require( 'mediawiki.page.ready' ).teleportTarget ); // $overlay.appendTo( $teleportTarget ); // } ); function rt( $content ) { // Popups gadget if ( window.pg ) { return; } var teSelector, settingsDialogOpening = false; function setSettingsCookie() { mw.cookie.set( 'RTsettings', ( Number( enabled ) + '|' + delay + '|' + Number( activatedByClick ) + '|' + Number( tooltipsForComments ) ), { path: '/', expires: 90 * SECONDS_IN_A_DAY, prefix: '' } ); } function enableRt() { enabled = true; setSettingsCookie(); $( '.rt-enableItem' ).remove(); rt( $content ); mw.notify( mw.msg( 'rt-enabled' ) ); } function disableRt() { $content.find( teSelector ).removeClass( 'rt-commentedText' ).off( '.rt' ); $body.off( '.rt' ); $window.off( '.rt' ); } function addEnableLink() { // #footer-places – Vector // #f-list – Timeless, Monobook, Modern // parent of #footer li – Cologne Blue var $footer = $( '#footer-places, #f-list' ); if ( !$footer.length ) { $footer = $( '#footer li' ).parent(); } if ( !$footer.find( '.rt-enableItem' ).length ) { $footer.append( $( '<li>' ) .addClass( 'rt-enableItem' ) .append( $( '<a>' ) .text( mw.msg( 'rt-enable-footer' ) ) .attr( 'href', '#' ) .click( function ( e ) { e.preventDefault(); enableRt(); } ) ) ); } } function TooltippedElement( $element ) { var events, te = this; function onStartEvent( e ) { var showRefArgs; if ( activatedByClick && te.type !== 'commentedText' && e.type !== 'contextmenu' ) { e.preventDefault(); } if ( !te.noRef ) { showRefArgs = [ $( this ) ]; if ( te.type !== 'supRef' ) { showRefArgs.push( e.pageX, e.pageY ); } te.showRef.apply( te, showRefArgs ); } } function onEndEvent() { if ( !te.noRef ) { te.hideRef(); } } if ( !$element ) { return; } // TooltippedElement.$element and TooltippedElement.$originalElement will be different when // the first is changed after its cloned version is hovered in a tooltip this.$element = $element; this.$originalElement = $element; if ( this.$element.is( REF_LINK_SELECTOR ) ) { if ( this.$element.prop( 'tagName' ) === 'SUP' ) { this.type = 'supRef'; } else { this.type = 'harvardRef'; } } else { this.type = 'commentedText'; this.comment = this.$element.attr( 'title' ); if ( !this.comment ) { return; } this.$element.addClass( 'rt-commentedText' ); } if ( activatedByClick ) { events = { 'click.rt': onStartEvent }; // Adds an ability to see tooltips for links if ( this.type === 'commentedText' && ( this.$element.closest( 'a' ).length || this.$element.has( 'a' ).length ) ) { events[ 'contextmenu.rt' ] = onStartEvent; } } else { events = { 'mouseenter.rt': onStartEvent, 'mouseleave.rt': onEndEvent }; } this.$element.on( events ); this.hideRef = function ( immediately ) { clearTimeout( te.showTimer ); if ( this.type === 'commentedText' ) { this.$element.attr( 'title', this.comment ); } if ( this.tooltip && this.tooltip.isPresent ) { if ( activatedByClick || immediately ) { this.tooltip.hide(); } else { this.hideTimer = setTimeout( function () { te.tooltip.hide(); }, 200 ); } } else if ( this.$ref && this.$ref.hasClass( 'rt-target' ) ) { this.$ref.removeClass( 'rt-target' ); if ( activatedByClick ) { $body.off( 'click.rt touchstart.rt', this.onBodyClick ); } } }; this.showRef = function ( $element, ePageX, ePageY ) { // Popups gadget if ( window.pg ) { disableRt(); return; } if ( this.tooltip && !this.tooltip.$content.length ) { return; } var tooltipInitiallyPresent = this.tooltip && this.tooltip.isPresent; function reallyShow() { var viewportTop, refOffsetTop, teHref; if ( !te.$ref && !te.comment ) { teHref = te.type === 'supRef' ? te.$element.find( 'a' ).attr( 'href' ) : te.$element.attr( 'href' ); // harvardRef te.$ref = teHref && $( '#' + $.escapeSelector( teHref.slice( 1 ) ) ); if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) { te.noRef = true; return; } } if ( !tooltipInitiallyPresent && !te.comment ) { viewportTop = $window.scrollTop(); refOffsetTop = te.$ref.offset().top; if ( !activatedByClick && viewportTop < refOffsetTop && viewportTop + $window.height() > refOffsetTop + te.$ref.height() && // There can be gadgets/scripts that make references horizontally scrollable. $window.width() > te.$ref.offset().left + te.$ref.width() ) { // Highlight the reference itself te.$ref.addClass( 'rt-target' ); return; } } if ( !te.tooltip ) { te.tooltip = new Tooltip( te ); if ( !te.tooltip.$content.length ) { return; } } // If this tooltip is called from inside another tooltip. We can't define it // in the constructor since a ref can be cloned but have the same Tooltip object; // so, Tooltip.parent is a floating value. te.tooltip.parent = te.$element.closest( '.rt-tooltip' ).data( 'tooltip' ); if ( te.tooltip.parent && te.tooltip.parent.disappearing ) { return; } te.tooltip.show(); if ( tooltipInitiallyPresent ) { if ( te.tooltip.$element.hasClass( 'rt-tooltip-above' ) ) { te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN ); } else { te.tooltip.$element.addClass( CLASSES.FADE_IN_UP ); } return; } te.tooltip.calculatePosition( ePageX, ePageY ); $window.on( 'resize.rt', te.onWindowResize ); } // We redefine this.$element here because e.target can be a reference link inside // a reference tooltip, not a link that was initially assigned to this.$element this.$element = $element; if ( this.type === 'commentedText' ) { this.$element.attr( 'title', '' ); } if ( activatedByClick ) { if ( tooltipInitiallyPresent || ( this.$ref && this.$ref.hasClass( 'rt-target' ) ) ) { return; } else { setTimeout( function () { $body.on( 'click.rt touchstart.rt', te.onBodyClick ); }, 0 ); } } if ( activatedByClick || tooltipInitiallyPresent ) { reallyShow(); } else { this.showTimer = setTimeout( reallyShow, delay ); } }; this.onBodyClick = function ( e ) { if ( !te.tooltip && !( te.$ref && te.$ref.hasClass( 'rt-target' ) ) ) { return; } var $current = $( e.target ); function contextMatchesParameter( parameter ) { return this === parameter; } // The last condition is used to determine cases when a clicked tooltip is the current // element's tooltip or one of its descendants while ( $current.length && ( !$current.hasClass( 'rt-tooltip' ) || !$current.data( 'tooltip' ) || !$current.data( 'tooltip' ).upToTopParent( contextMatchesParameter, [ te.tooltip ], true ) ) ) { $current = $current.parent(); } if ( !$current.length ) { te.hideRef(); } }; this.onWindowResize = function () { te.tooltip.calculatePosition(); }; } function Tooltip( te ) { function openSettingsDialog() { var settingsDialog, settingsWindow; if ( cursorWaitCss ) { cursorWaitCss.disabled = true; } function SettingsDialog() { SettingsDialog.parent.call( this ); } OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog ); SettingsDialog.static.name = 'settingsDialog'; SettingsDialog.static.title = mw.msg( 'rt-settings-title' ); SettingsDialog.static.actions = [ { modes: 'main', action: 'save', label: mw.msg( 'rt-save' ), flags: [ 'primary', 'progressive' ] }, { modes: 'main', flags: [ 'safe', 'close' ] }, { modes: 'disabled', action: 'deactivated', label: mw.msg( 'rt-done' ), flags: [ 'primary', 'progressive' ] } ]; SettingsDialog.prototype.initialize = function () { var dialog = this; SettingsDialog.parent.prototype.initialize.apply( this, arguments ); this.enableCheckbox = new OO.ui.CheckboxInputWidget( { selected: true } ); this.enableCheckbox.on( 'change', function ( selected ) { dialog.activationMethodSelect.setDisabled( !selected ); dialog.delayInput.setDisabled( !selected || dialog.clickOption.isSelected() ); dialog.tooltipsForCommentsCheckbox.setDisabled( !selected ); } ); this.enableField = new OO.ui.FieldLayout( this.enableCheckbox, { label: mw.msg( 'rt-enable' ), align: 'inline', classes: [ 'rt-enableField' ] } ); this.hoverOption = new OO.ui.RadioOptionWidget( { label: mw.msg( 'rt-hovering' ) } ); this.clickOption = new OO.ui.RadioOptionWidget( { label: mw.msg( 'rt-clicking' ) } ); this.activationMethodSelect = new OO.ui.RadioSelectWidget( { items: [ this.hoverOption, this.clickOption ] } ); this.activationMethodSelect.selectItem( activatedByClick ? this.clickOption : this.hoverOption ); this.activationMethodSelect.on( 'choose', function ( item ) { dialog.delayInput.setDisabled( item === dialog.clickOption ); } ); this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, { label: mw.msg( 'rt-activationMethod' ), align: 'top' } ); this.delayInput = new OO.ui.NumberInputWidget( { input: { value: delay }, step: 50, min: 0, max: 5000, disabled: activatedByClick, classes: [ 'rt-numberInput' ] } ); this.delayField = new OO.ui.FieldLayout( this.delayInput, { label: mw.msg( 'rt-delay' ), align: 'top' } ); this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( { selected: tooltipsForComments } ); this.tooltipsForCommentsField = new OO.ui.FieldLayout( this.tooltipsForCommentsCheckbox, { label: new OO.ui.HtmlSnippet( mw.msg( 'rt-tooltipsForComments' ) ), align: 'inline', classes: [ 'rt-tooltipsForCommentsField' ] } ); new TooltippedElement( this.tooltipsForCommentsField.$element.find( '.' + ( COMMENTED_TEXT_CLASS || 'rt-commentedText' ) ) ); this.fieldset = new OO.ui.FieldsetLayout(); this.fieldset.addItems( [ this.enableField, this.activationMethodField, this.delayField, this.tooltipsForCommentsField ] ); this.panelSettings = new OO.ui.PanelLayout( { padded: true, expanded: false } ); this.panelSettings.$element.append( this.fieldset.$element ); this.panelDisabled = new OO.ui.PanelLayout( { padded: true, expanded: false } ); this.panelDisabled.$element.append( $( '<table>' ) .addClass( 'rt-disabledHelp' ) .append( $( '<tr>' ).append( $( '<td>' ).append( $( '<img>' ).attr( 'src', 'https://upload.wikimedia.org/wikipedia/commons/c/c0/MediaWiki_footer_link_ltr.svg' ) ), $( '<td>' ) .addClass( 'rt-disabledNote' ) .text( mw.msg( 'rt-disabledNote' ) ) ) ) ); this.stackLayout = new OO.ui.StackLayout( { items: [ this.panelSettings, this.panelDisabled ] } ); this.$body.append( this.stackLayout.$element ); }; SettingsDialog.prototype.getSetupProcess = function ( data ) { return SettingsDialog.parent.prototype.getSetupProcess.call( this, data ) .next( function () { this.stackLayout.setItem( this.panelSettings ); this.actions.setMode( 'main' ); }, this ); }; SettingsDialog.prototype.getActionProcess = function ( action ) { var dialog = this; if ( action === 'save' ) { return new OO.ui.Process( function () { var newDelay = Number( dialog.delayInput.getValue() ); enabled = dialog.enableCheckbox.isSelected(); if ( newDelay >= 0 && newDelay <= 5000 ) { delay = newDelay; } activatedByClick = dialog.clickOption.isSelected(); tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected(); setSettingsCookie(); if ( enabled ) { dialog.close(); disableRt(); rt( $content ); } else { dialog.actions.setMode( 'disabled' ); dialog.stackLayout.setItem( dialog.panelDisabled ); disableRt(); addEnableLink(); } } ); } else if ( action === 'deactivated' ) { dialog.close(); } return SettingsDialog.parent.prototype.getActionProcess.call( this, action ); }; SettingsDialog.prototype.getBodyHeight = function () { return this.stackLayout.getCurrentItem().$element.outerHeight( true ); }; tooltip.upToTopParent( function adjustRightAndHide() { if ( this.isPresent ) { if ( this.$element[ 0 ].style.right ) { this.$element.css( 'right', '+=' + ( window.innerWidth - $window.width() ) ); } this.te.hideRef( true ); } } ); if ( !windowManager ) { windowManager = new OO.ui.WindowManager(); $body.append( windowManager.$element ); } settingsDialog = new SettingsDialog(); windowManager.addWindows( [ settingsDialog ] ); settingsWindow = windowManager.openWindow( settingsDialog ); settingsWindow.opened.then( function () { settingsDialogOpening = false; } ); settingsWindow.closed.then( function () { windowManager.clearWindows(); } ); } var tooltip = this; // This variable can change: one tooltip can be called from a harvard-style reference link // that is put into different tooltips this.te = te; switch ( this.te.type ) { case 'supRef': this.id = 'rt-' + this.te.$originalElement.attr( 'id' ); this.$content = this.te.$ref .contents() .filter( function ( i ) { var $this = $( this ); if ( $this.hasClass( 'mw-subreference-list' ) ) { return false; } return ( this.nodeType === Node.TEXT_NODE || !( // `a[href^="#cite_ref-"]` is for Wiktionary and possibly other // sites (not English Wikipedia) where the output of the Cite // extension is slightly different $this.is( '.mw-cite-backlink, a[href^="#cite_ref-"]' ) || ( i === 0 && // Template:Cnote, Template:Note ( $this.is( 'b' ) || // Template:Note_label $this.is( 'a' ) && $this.attr( 'href' ).indexOf( '#ref' ) === 0 ) ) ) ); } ) .clone( true ); const $ol = this.te.$ref.closest( 'ol' ); if ( $ol.hasClass( 'mw-subreference-list' ) ) { this.$content = $( '<div>' ).append( $ol.siblings( '.reference-text' ).clone( true ) .css( { display: 'block', 'margin-bottom': '0.7em' } ), this.$content ); } break; case 'harvardRef': this.id = 'rt-' + this.te.$originalElement.closest( 'li' ).attr( 'id' ); this.$content = this.te.$ref .clone( true ) .removeAttr( 'id' ); break; case 'commentedText': this.id = 'rt-' + String( Math.random() ).slice( 2 ); this.$content = $( document.createTextNode( this.te.comment ) ); break; } if ( !this.$content.length ) { return; } this.isInsideWindow = Boolean( this.te.$element.closest( '.oo-ui-window' ).length ); this.$element = $( '<div>' ) .addClass( 'rt-tooltip' ) .attr( 'id', this.id ) .attr( 'role', 'tooltip' ) .data( 'tooltip', this ); var $hoverArea = $( '<div>' ) .addClass( 'rt-hoverArea' ) .appendTo( this.$element ); var $scroll = $( '<div>' ) .addClass( 'rt-scroll' ) .appendTo( $hoverArea ); this.$content = this.$content .wrapAll( '<div>' ) .parent() .addClass( 'rt-content' ) .addClass( 'mw-parser-output' ) .appendTo( $scroll ); if ( !activatedByClick ) { this.$element .on( 'mouseenter linkPopupHover', function ( e ) { if ( !tooltip.disappearing || e.type === 'linkPopupHover' ) { tooltip.upToTopParent( function () { this.show(); } ); } } ) .on( 'mouseleave', function ( e ) { // https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget // alone has pitfalls: when alt-tabbing, relatedTarget is empty too if ( CLIENT_NAME !== 'chrome' || ( !e.originalEvent || e.originalEvent.relatedTarget !== null || !tooltip.clickedTime || $.now() - tooltip.clickedTime > 50 ) ) { tooltip.upToTopParent( function () { this.te.hideRef(); } ); } } ) .click( function () { tooltip.clickedTime = $.now(); } ); } if ( !this.isInsideWindow ) { $( '<a>' ) .addClass( 'rt-settingsLink' ) .attr( 'role', 'button' ) .attr( 'href', '#' ) .attr( 'title', mw.msg( 'rt-settings' ) ) .click( function ( e ) { e.preventDefault(); if ( settingsDialogOpening ) { return; } settingsDialogOpening = true; if ( mw.loader.getState( 'oojs-ui' ) !== 'ready' ) { if ( cursorWaitCss ) { cursorWaitCss.disabled = false; } else { cursorWaitCss = mw.util.addCSS( 'body { cursor: wait; }' ); } } mw.loader.using( [ 'oojs', 'oojs-ui' ], openSettingsDialog ); } ) .prependTo( this.$content ); } // Tooltip tail element is inside tooltip content element in order for the tooltip // not to disappear when the mouse is above the tail this.$tail = $( '<div>' ) .addClass( 'rt-tail' ) .prependTo( this.$element ); this.disappearing = false; this.show = function () { this.disappearing = false; clearTimeout( this.te.hideTimer ); clearTimeout( this.te.removeTimer ); this.$element .removeClass( CLASSES.FADE_OUT_DOWN ) .removeClass( CLASSES.FADE_OUT_UP ); if ( !this.isPresent ) { $overlay.append( this.$element ); } this.isPresent = true; }; this.hide = function () { var tooltip = this; tooltip.disappearing = true; if ( tooltip.$element.hasClass( 'rt-tooltip-above' ) ) { tooltip.$element .removeClass( CLASSES.FADE_IN_DOWN ) .addClass( CLASSES.FADE_OUT_UP ); } else { tooltip.$element .removeClass( CLASSES.FADE_IN_UP ) .addClass( CLASSES.FADE_OUT_DOWN ); } tooltip.te.removeTimer = setTimeout( function () { if ( tooltip.isPresent ) { tooltip.$element.detach(); tooltip.$tail.css( 'left', '' ); if ( activatedByClick ) { $body.off( 'click.rt touchstart.rt', tooltip.te.onBodyClick ); } $window.off( 'resize.rt', tooltip.te.onWindowResize ); tooltip.isPresent = false; } }, 200 ); }; this.calculatePosition = function ( ePageX, ePageY ) { var teElement, teOffsets, teOffset, targetTailOffsetX, tailLeft; this.$tail.css( 'left', '' ); teElement = this.te.$element.get( 0 ); if ( ePageX !== undefined ) { targetTailOffsetX = ePageX; teOffsets = ( teElement.getClientRects && teElement.getClientRects() ) || teElement.getBoundingClientRect(); if ( teOffsets.length > 1 ) { for ( var i = teOffsets.length - 1; i >= 0; i-- ) { if ( ePageY >= Math.round( $window.scrollTop() + teOffsets[ i ].top ) && ePageY <= Math.round( $window.scrollTop() + teOffsets[i].top + teOffsets[ i ].height ) ) { teOffset = teOffsets[ i ]; } } } } if ( !teOffset ) { teOffset = ( teElement.getClientRects && teElement.getClientRects()[ 0 ] ) || teElement.getBoundingClientRect(); } teOffset = { top: $window.scrollTop() + teOffset.top, left: $window.scrollLeft() + teOffset.left, width: teOffset.width, height: teOffset.height }; if ( !targetTailOffsetX ) { targetTailOffsetX = teOffset.left + ( teOffset.width / 2 ); } // Value of `left` in `.rt-tooltip-above .rt-tail` var defaultTailLeft = 19; // Value of `width` in `.rt-tail` var tailSideWidth = 13; // We tilt the square 45 degrees, so we need square root to calculate the distance. var tailWidth = tailSideWidth * Math.SQRT2; var tailHeight = tailWidth / 2; var tailCenterDelta = tailSideWidth + 1 - ( tailWidth / 2 ); var tooltip = this; var getTop = function ( isBelow ) { var delta = isBelow ? teOffset.height + tailHeight : -tooltip.$element.outerHeight() - tailHeight + 1; return teOffset.top + delta; }; this.$element.css( { top: getTop(), left: targetTailOffsetX - defaultTailLeft - tailCenterDelta, right: '' } ); // Is it squished against the right side of the page? if ( this.$element.offset().left + this.$element.outerWidth() > $window.width() - 1 ) { this.$element.css( { left: '', right: 0 } ); tailLeft = targetTailOffsetX - this.$element.offset().left - tailCenterDelta; } // Is a part of it above the top of the screen? if ( teOffset.top < this.$element.outerHeight() + $window.scrollTop() + tailHeight ) { this.$element .removeClass( 'rt-tooltip-above' ) .addClass( 'rt-tooltip-below' ) .addClass( CLASSES.FADE_IN_UP ) .css( { top: getTop( true ) } ); if ( tailLeft ) { this.$tail.css( 'left', ( tailLeft + tailSideWidth ) + 'px' ); } } else { this.$element .removeClass( 'rt-tooltip-below' ) .addClass( 'rt-tooltip-above' ) .addClass( CLASSES.FADE_IN_DOWN ) // A fix for cases when a tooltip shown once is then wrongly positioned when it // is shown again after a window resize. .css( { top: getTop() } ); if ( tailLeft ) { this.$tail.css( 'left', tailLeft + 'px' ); } } }; // Run some function for all the tooltips up to the top one in a tree. Its context will be // the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array // in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true, // the execution stops when the function in question returns true for the first time, // and ToolTip.upToTopParent returns true as well. this.upToTopParent = function ( func, parameters, stopAtTrue ) { var returnValue, currentTooltip = this; do { returnValue = func.apply( currentTooltip, parameters ); if ( stopAtTrue && returnValue ) { break; } } while ( ( currentTooltip = currentTooltip.parent ) ); if ( stopAtTrue ) { return returnValue; } }; } if ( !enabled ) { addEnableLink(); return; } teSelector = REF_LINK_SELECTOR; if ( tooltipsForComments ) { teSelector += ', ' + COMMENTED_TEXT_SELECTOR; } $content.find( teSelector ).each( function () { new TooltippedElement( $( this ) ); } ); } settingsString = mw.cookie.get( 'RTsettings', '' ); if ( settingsString ) { settings = settingsString.split( '|' ); enabled = Boolean( Number( settings[ 0 ] ) ); delay = Number( settings[ 1 ] ); activatedByClick = Boolean( Number( settings[ 2 ] ) ); // The forth value was added later, so we provide for a default value. See comments below // for why we use "IS_TOUCHSCREEN && IS_MOBILE". tooltipsForComments = settings[ 3 ] === undefined ? IS_TOUCHSCREEN && IS_MOBILE : Boolean( Number( settings[ 3 ] ) ); } else { enabled = true; delay = 200; // Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably // leave cases where a user interacting with the browser using touches doesn't know how to call // a tooltip in order to switch to activation by click. Some touch-supporting laptop users // interacting by touch (though probably not the most popular use case) would not be happy too. activatedByClick = IS_TOUCHSCREEN; // Arguably we shouldn't convert native tooltips into gadget tooltips for devices that have // mouse support, even if they have touchscreens (there are laptops with touchscreens). // IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false // positives. tooltipsForComments = IS_TOUCHSCREEN && IS_MOBILE; } mw.hook( 'wikipage.content' ).add( rt ); }() ); jldhe6u3q8ddv8p2k6i6qhcrfz0p9fe पृष्ठ:सम्पूर्ण गाँधी वांग्मय Sampurna Gandhi, vol. 25.pdf/८ 250 163839 668778 516957 2026-08-07T15:10:34Z अनुश्री साव 80 668778 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Manisha yadav12" /></noinclude>{{c|[[File:महात्मा गांधी.jpg|thumb|Mahatma Gandhi's Photo]]}}<noinclude></noinclude> ipvm8wkli31xdg4vpf2t0kkt649gzwt 668779 668778 2026-08-07T15:12:00Z अनुश्री साव 80 668779 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Manisha yadav12" /></noinclude>{{c|[[File:महात्मा गांधी.jpg|200px|Mahatma Gandhi's Photo]]}}<noinclude></noinclude> h9wrnomdorfkbpof6u2n6smlexm76u8 668780 668779 2026-08-07T18:26:17Z अनुश्री साव 80 668780 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Manisha yadav12" /></noinclude>{{c|[[File:महात्मा गाँधी.jpg|thumb|A photo of Mahatma Gandhi]] उपवासके दिनोंमें, शुश्रूषामें डॉ॰ जीवराज मेहता}}<noinclude></noinclude> 8cg8yyv63kmasixv8h3wbw9rmcvvd3r 668781 668780 2026-08-07T18:27:19Z अनुश्री साव 80 668781 proofread-page text/x-wiki <noinclude><pagequality level="1" user="Manisha yadav12" /></noinclude>{{c|[[File:महात्मा गाँधी.jpg|400px|A photo of Mahatma Gandhi]] उपवासके दिनोंमें, शुश्रूषामें डॉ॰ जीवराज मेहता}}<noinclude></noinclude> 3p55a5okrvtsqphby12z1jb6iy3q2vs 668782 668781 2026-08-07T18:27:49Z अनुश्री साव 80 /* शोधित */ 668782 proofread-page text/x-wiki <noinclude><pagequality level="3" user="अनुश्री साव" /></noinclude>{{c|[[File:महात्मा गाँधी.jpg|400px|A photo of Mahatma Gandhi]] उपवासके दिनोंमें, शुश्रूषामें डॉ॰ जीवराज मेहता}}<noinclude></noinclude> ei4p9qjq9nw5s7q1conl44ewu6upb5c पृष्ठ:सम्पूर्ण गाँधी वांग्मय Sampurna Gandhi, vol. 25.pdf/२२७ 250 166727 668783 523358 2026-08-07T18:49:36Z अनुश्री साव 80 668783 proofread-page text/x-wiki <noinclude><pagequality level="1" user="अमृता कुमारी पाण्डेय" /></noinclude>[[File:पत्र जवाहरलाल नेहरूको (१९-०९-२४).jpg|400px|A letter to Jawaharlal Nehru (19.9.24)]]<noinclude></noinclude> h30dz3cplggvlz52gq1hosgslhtk9rf 668784 668783 2026-08-07T18:50:06Z अनुश्री साव 80 /* शोधित */ 668784 proofread-page text/x-wiki <noinclude><pagequality level="3" user="अनुश्री साव" /></noinclude>[[File:पत्र जवाहरलाल नेहरूको (१९-०९-२४).jpg|400px|A letter to Jawaharlal Nehru (19.9.24)]]<noinclude></noinclude> gtf11bmre5t1csy1y7o6l0armuprjdn पृष्ठ:सम्पूर्ण गाँधी वांग्मय Sampurna Gandhi, vol. 25.pdf/२२८ 250 166728 668788 523359 2026-08-08T04:58:38Z अनुश्री साव 80 668788 proofread-page text/x-wiki <noinclude><pagequality level="1" user="अमृता कुमारी पाण्डेय" /></noinclude>{{c|[[File:उपवासके दिनोंमें, इन्दिराके साथ.jpg|400px|उपवासके दिनोंमें, इन्दिराके साथ]] उपवासके दिनोंमें, इन्दिराके साथ}}<noinclude></noinclude> rtqsklbrchw0mrfv51834bd24d1wdbe 668789 668788 2026-08-08T07:06:38Z सौरभ तिवारी 05 49 /* शोधित */ 668789 proofread-page text/x-wiki <noinclude><pagequality level="3" user="सौरभ तिवारी 05" /></noinclude>&nbsp; {{c|{{Rotate|-90|[[चित्र:उपवासके दिनोंमें, इन्दिराके साथ.jpg|350px]]}}<br>उपवासके दिनोंमें, इन्दिराके साथ}}<noinclude></noinclude> g9b48jsbcegdbgupspkq6tqa7ov1ocn