https://ru.prolewiki.org/api.php?action=feedcontributions&user=Forte&feedformat=atom
ПролеВики - Вклад [ru]
2024-03-29T01:50:33Z
Вклад
MediaWiki 1.41.0
https://ru.prolewiki.org/index.php?title=MediaWiki:Citizen.css&diff=263
MediaWiki:Citizen.css
2024-02-06T00:31:43Z
<p>Forte: Added CSS from English ProleWiki</p>
<hr />
<div>/* Размещённый здесь CSS-код будет загружаться для пользователей, использующих тему оформления Citizen */<br />
/***<br />
****<br />
**** CSS Variables<br />
****<br />
***/<br />
@media screen {<br />
:root {<br />
--border-color-1:#b0b0b0;<br />
--border-color-2:#c7c7c7;<br />
--color-surface-2:hsl(0,0%,97%);<br />
--color-surface-4:hsl(213,30%,85%);<br />
--color-surface-5:hsl(220,17%,93%);<br />
--color-surface-6:hsl(200,2%,60%);<br />
--color-surface-7:hsl(180,2%,40%);<br />
--color-surface-subtle-red:hsl(0, 100%, 97%);<br />
--color-success2:hsl(167,70%,31%);<br />
--color-codeeditor-select:#b5d5ff;<br />
--color-codeeditor-similar:#fafaff;<br />
--color-codeeditor-similar-border:#c8c8fa;<br />
--color-red-2:#900010;<br />
--color-red-3:#b50014;<br />
--color-red-light-3:#c33242;<br />
--color-base:#262e35;<br />
--color-base--subtle:#646464;<br />
--color-base--emphasized:#202020;<br />
--color-primary:#143fbf;<br />
}<br />
:root.skin-citizen-dark {<br />
--border-color-1:hsl(220, 28%, 23%);<br />
--border-color-2:hsl(220,25%,20%);<br />
--color-surface-5:hsl(220,25%,15%);<br />
--color-surface-6:hsl(220,12%,35%);<br />
--color-surface-7:hsl(220,12%,40%);<br />
--color-codeeditor-select:#485465;<br />
--color-codeeditor-similar:#394350;<br />
--color-codeeditor-similar-border:#4c5561;<br />
--color-red-2:#900010;<br />
--color-surface-subtle-red:hsl(0, 45%, 28%);<br />
--color-primary:#5c85d6;<br />
}<br />
.skin-citizen-dark .mw-portlet a::before{ /* inverts preprended icon colour in dark theme */<br />
filter:invert(1);<br />
}<br />
}<br />
<br />
/***<br />
****<br />
**** Mobile Citizen CSS<br />
****<br />
***/<br />
@media (max-width: 720px) {<br />
table {<br />
width:100% !important;<br />
display: table;<br />
float: unset !important;<br />
margin: auto !important;<br />
}<br />
}<br />
<br />
/******<br />
****** General theming<br />
****** <br />
*******/<br />
/* Adds bottom border for Title and level 1 headers */<br />
h1,h2 {<br />
border-bottom: 1px solid #a2a9b1;<br />
}<br />
<br />
h1 {<br />
width: 100%;<br />
}<br />
/* Removes bottom border from sticky title heading */<br />
.citizen-body-header--sticky h1 {<br />
border: none;<br />
}<br />
<br />
/***<br />
**** CSS for edit buttons<br />
***/<br />
<br />
@media screen{<br />
#ca-request-account > a::before{<br />
width:var(--size-icon);<br />
height:var(--size-icon);<br />
background-position:var(--size-icon);<br />
background-repeat:var(--size-icon);<br />
background-size:var(--size-icon);<br />
content:'';<br />
filter:invert(1);<br />
opacity:1;<br />
background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2224%22 height=%2224%22 viewBox=%220 0 24 24%22%3E%3Cg fill=%22%23000%22%3E %3Cpath d=%22m19.5 9.8 2.2-2.2c.4-.4.4-1.1 0-1.6L18 2.3c-.4-.4-1.1-.4-1.6 0l-2.2 2.2 5.3 5.3zm-6.4-4.1L2 16.7V22h5.3l11.1-11.1c-.1 0-5.3-5.2-5.3-5.2z%22/%3E %3C/g%3E%3C/svg%3E");<br />
}<br />
}<br />
<br />
#ca-edit > a:hover, #ca-ve-edit > a:hover, #ca-request-account > a:hover {<br />
background-color: var(--color-red-light-3);<br />
}<br />
<br />
#ca-edit > a, #ca-ve-edit > a, #ca-request-account > a{<br />
background-color: var(--color-red-3);<br />
color: #fff;<br />
}<br />
<br />
.citizen-ve-edit-merged#ca-edit {<br />
border-left: 1px solid #a20012;<br />
}<br />
<br />
#citizen-languages__buttonCheckbox::after {<br />
background: var(--color-red-3);<br />
}<br />
<br />
/***<br />
**** CSS for article references<br />
***/<br />
.rt-tooltip {<br />
background-color: var(--color-surface-2);<br />
color: var(--color-base);<br />
border:1px solid var(--border-color-1)<br />
}<br />
.rt-tooltipTail::after {<br />
background: var(--color-surface-2);<br />
}<br />
.rt-tooltipTail {<br />
background:linear-gradient(to top right,var(--border-color-1) 50%,rgba(0,0,0,0) 50%)<br />
}<br />
.rt-target {<br />
background-color: var(--color-surface-4);<br />
}<br />
<br />
<br />
.toccolours {<br />
background-color: var(--color-surface-2);<br />
border: 1px solid var(--border-color-1);<br />
}<br />
<br />
blockquote {<br />
font-family: inherit;<br />
color: inherit;<br />
font-style: inherit;<br />
font-size: 95%;<br />
}<br />
/***<br />
**** CSS for input textboxes<br />
***/<br />
.mw-ui-input {<br />
border-color: var(--border-color-1);<br />
}<br />
<br />
/***<br />
**** CSS for wikitables<br />
***/<br />
.wikitable th {<br />
border: 1px solid var(--border-color-2);<br />
background-color: var(--color-surface-3);<br />
}<br />
.wikitable td {<br />
background-color: var(--color-surface-2)<br />
}<br />
.wikitable {<br />
border: 1px solid var(--border-color-2);<br />
}<br />
<br />
/***<br />
**** CSS for Infoboxes<br />
***/<br />
.infobox {<br />
border: 1px solid var(--border-color-1) !important;<br />
background-color: var(--color-surface-2) !important;<br />
color: var(--color-base) !important;<br />
margin: 0.5em 0 0.5em 1em;<br />
border-spacing: 3px;<br />
float: right;<br />
clear: right;<br />
font-size: 88%;<br />
line-height: 1.5em;<br />
padding: 1em;<br />
<br />
}<br />
.infobox td, .infobox th {<br />
vertical-align: top;<br />
text-align: left;<br />
}<br />
.infobox.geography {<br />
border-collapse: collapse;<br />
line-height: 1.2em;<br />
font-size: 90%;<br />
}<br />
.infobox.geography td, .infobox.geography th {<br />
border-top: 1px solid var(--border-color-1);<br />
padding: 0.4em 1.5em 0.4em 1.5em;<br />
}<br />
.infobox.geography .mergedtoprow td, .infobox.geography .mergedtoprow th {<br />
border-top: 1px solid var(--border-color-1);<br />
padding: 0.4em 1.5em 0.2em 1.5em;<br />
}<br />
<br />
.infobox.geography .mergedbottomrow td, .infobox.geography .mergedbottomrow th {<br />
border-top: 0;<br />
border-bottom: 1px solid var(--border-color-1);<br />
padding: 0 1.5em 0.4em 1.5em;<br />
}<br />
.infobox.geography .mergedrow td, .infobox.geography .mergedrow th {<br />
border:0;<br />
padding: 0 1.5em 0.2em 1.5em;<br />
}<br />
<br />
.infobox.geography .maptable td,<br />
.infobox.geography .maptable th {<br />
border: 0;<br />
padding: 0;<br />
}<br />
<br />
<br />
<br />
<br />
/***<br />
**** CSS for Navboxes<br />
***/<br />
.navbox th, .navbox-title {<br />
background-color: var(--color-surface-4);<br />
}<br />
.navbox-abovebelow, th.navbox-group, .navbox-subgroup .navbox-title {<br />
background-color: var(--color-surface-5);<br />
}<br />
.navbox {<br />
background-color: var(--color-surface-1);<br />
border: 1px solid var(--border-color-1);<br />
}<br />
.navbox-list {<br />
border-color: var(--border-color-2);<br />
}<br />
.navbox-even {<br />
background-color: var(--color-surface-2);<br />
}<br />
tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list {<br />
border-top: 2px solid var(--border-color-2);<br />
}<br />
<br />
/***<br />
**** CSS for Message boxes<br />
***/<br />
.mbox {<br />
border: 1px solid var(--border-color-1) !important;<br />
background-color: var(--color-surface-2) !important;<br />
border-left: 10px solid var(--color-red-3) !important;<br />
}<br />
/***<br />
**** Sidebar CSS<br />
***/<br />
.skin-citizen .sidebar {<br />
background: var(--color-surface-2) !important;<br />
border: 1px solid var(--border-color-1) !important;<br />
}<br />
<br />
<br />
<br />
/**<br />
* StructuredDiscussions theming (discussion pages)<br />
* <br />
**/<br />
.flow-post {<br />
color: var(--color-base);<br />
}<br />
.flow-topic-titlebar {<br />
background-color: var(--color-surface-3);<br />
}<br />
div > .flow-menu ul {<br />
background: var(--color-surface-2);<br />
border: 1px solid var(--border-color-1);<br />
}<br />
.flow-topic-moderatestate-lock .flow-topic-titlebar {<br />
background-color: var(--color-surface-4);<br />
}<br />
.flow-component.flow-board-page .flow-board-header {<br />
background-color: var(--color-surface-2);<br />
}<br />
.flow-ui-editorWidget-editor {<br />
border: 1px solid var(--border-color-2);<br />
}<br />
<br />
<br />
@media all and (min-width:1165px) {<br />
.flow-component.flow-board-page .flow-board-navigation,<br />
.flow-component.flow-board-page .flow-board {<br />
float:none;<br />
}<br />
.flow-component.flow-board-page .flow-board-header {<br />
min-height:0;<br />
}<br />
}<br />
<br />
<br />
/**<br />
* ConfirmAcccount theming<br />
* <br />
**/<br />
.mw-confirmaccount-type-0 {<br />
background-color: var(--color-surface-4);<br />
}<br />
.mw-confirmaccount-body-0 {<br />
background-color: var(--color-surface-5);<br />
}<br />
.wpNewBio {<br />
background-color: var(--color-surface-2);<br />
}<br />
.mw-special-ConfirmAccounts fieldset {<br />
border: 1px solid var(--border-color-1);<br />
}<br />
.mw-confirmaccount-bar {<br />
border: 1px solid var(--border-color-1);<br />
background-color: var(--color-surface-2);<br />
}<br />
input, select, textarea {<br />
border: 1px solid var(--border-color-1);<br />
background-color: var(--color-surface-2) !important;<br />
color: var(--color-base--emphasized);<br />
}<br />
<br />
<br />
/***<br />
**** Code editor interface<br />
***/<br />
.ace-tm .ace_gutter {<br />
background-color:var(--color-surface-2);<br />
border-right:1px solid var(--border-color-2);<br />
}<br />
.ace-tm .ace_marker-layer .ace_selection {<br />
background: var(--color-codeeditor-select);<br />
}<br />
.ace-tm .ace_marker-layer .ace_selected-word {<br />
background:var(--color-codeeditor-similar);<br />
border: 1px solid var(--color-codeeditor-similar-border);<br />
}<br />
.ace_search {<br />
background-color: var(--color-surface-2);<br />
color: var(--color-base);<br />
border: 1px solid var(--border-color-2);<br />
}<br />
.ace_search_field {<br />
color: var(--color-base);<br />
background-color: var(--color-surface-1);<br />
border-color: var(--border-color-2)<br />
}<br />
.ace_searchbtn {<br />
color: var(--color-base);<br />
background-color: var(--color-surface-2);<br />
border-color: var(--border-color-2);<br />
}<br />
.ace_searchbtn:hover {<br />
background-color: var(--color-surface-4);<br />
}<br />
.ace_searchbtn:last-child {<br />
border-color: var(--border-color-2);<br />
}<br />
.ace_button {<br />
color: var(--color-base);<br />
}<br />
.ace_button:hover {<br />
background-color: var(--color-surface-4);<br />
}<br />
/*.ace-tm .ace_constant.ace_numeric {*/<br />
/* color: rgb(200, 100, 200);*/<br />
/*}*/<br />
/*.ace-tm .ace_storage,*/<br />
/*.ace-tm .ace_keyword {*/<br />
/* color: rgb(0,150,200);*/<br />
/*}*/<br />
<br />
<br />
/***<br />
****<br />
**** Visual editor interface<br />
****<br />
***/<br />
.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor::before {<br />
border-bottom-color: var(--border-color-1);<br />
}<br />
.oo-ui-popupWidget-popup {<br />
border: 1px solid var(--border-color-2);<br />
}<br />
.oo-ui-tool.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-tool-link {<br />
background-color: var(--color-red-3);<br />
}<br />
.oo-ui-tool.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-tool-link:hover {<br />
background-color:var(--color-red-light-3);<br />
}<br />
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {<br />
background-color:var(--color-red-3);<br />
border-color: var(--color-red-light-3);<br />
}<br />
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover {<br />
border-color: var(--color-red-light-3);<br />
}<br />
.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover{<br />
background-color:var(--color-red-light-3);<br />
}<br />
<br />
/***<br />
****<br />
**** Source editor interface<br />
****<br />
***/<br />
.wikiEditor-ui-toolbar {<br />
padding: 0.25em;<br />
box-shadow: 0px 3px 5px rgba(0,0,0,0.1);<br />
background-color:var(--color-surface-2);<br />
}<br />
.wikiEditor-ui .wikiEditor-ui-view {<br />
border:1px solid var(--border-color-1);<br />
}<br />
.wikiEditor-ui .wikiEditor-ui-top::before {<br />
backdrop-filter: none;<br />
background-color: transparent;<br />
}<br />
.CodeMirror-gutters {<br />
background-color:var(--color-surface-2);<br />
border-right:1px solid var(--border-color-2);<br />
}<br />
.skin-citizen .mw-editform .editOptions {<br />
background-color: var(--color-surface-5);<br />
border: 1px solid var(--border-color-1);<br />
border-top: 0px;<br />
}<br />
.oo-ui-buttonGroupWidget {<br />
border:1px solid var(--border-color-1);<br />
}<br />
.oo-ui-textInputWidget .oo-ui-inputWidget-input {<br />
background-color: var(--color-surface-0);<br />
border: 1px solid var(--border-color-1);<br />
}<br />
.oo-ui-checkboxInputWidget [type="checkbox"] + span {<br />
background-color: var(--color-surface-0);<br />
border: 1px solid var(--border-color-1);<br />
}<br />
.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {<br />
border: 1px solid var(--border-color-1);<br />
}<br />
.oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover {<br />
border-color: var(--border-color-2);<br />
}<br />
<br />
<br />
/***<br />
**** Recent changes theming<br />
***/<br />
.rc-sidebar-user {<br />
color: var(--color-base--subtle);<br />
}<br />
<br />
/***<br />
**** Page view CSS<br />
***/<br />
<br />
/* Image CSS */<br />
.citizen-body a.image:hover:not(.lazy):not(.new) > img{<br />
transform: scale(1.03);<br />
}<br />
<br />
/*not sure why the reduced scaling effect broke and why it needs @media screen, but this is exactly how it renders on a page since 1.4*/<br />
@media screen{<br />
figure[typeof~="mw:File"] > a:first-child:hover:not(.lazy):not(.new) > img, figure[typeof~="mw:File/Frameless"] > a:first-child:hover:not(.lazy):not(.new) > img, figure[typeof~="mw:File/Thumb"] > a:first-child:hover:not(.lazy):not(.new) > img, figure[typeof~="mw:File/Frame"] > a:first-child:hover:not(.lazy):not(.new) > img {<br />
transform:scale(1.03);<br />
}<br />
}<br />
<br />
/* Table of Content styling */<br />
.citizen-toc-level--1 > a{<br />
font-weight:bold;<br />
font-style:normal;<br />
}<br />
<br />
.citizen-toc-level--3 > a{<br />
font-weight:lighter;<br />
font-style:normal;<br />
}<br />
<br />
.citizen-toc-level--4 > a{<br />
font-size:0.9em;<br />
font-style:normal;<br />
font-weight:lighter;<br />
}<br />
<br />
.citizen-toc-level--5 > a{<br />
display:none;<br />
}<br />
<br />
/***<br />
**** Success message after publishing an edit<br />
***/<br />
.oo-ui-messageWidget.oo-ui-flaggedElement-success:not(.oo-ui-messageWidget-block) {<br />
color: var(--color-success2);<br />
}<br />
<br />
/***<br />
****<br />
**** Bug fixes<br />
****<br />
***/<br />
.oo-ui-windowManager-modal > .oo-ui-dialog {<br />
z-index: 12;;<br />
}<br />
/***<br />
****<br />
**** Megamenu icons<br />
****<br />
***/<br />
#n-Library a::before,#n-wantedpages a::before,#n-accrequest a::before,#n-Essays a::before,#n-Articles a::before,#n-Quotes a::before{<br />
background-repeat:no-repeat;<br />
content:"";<br />
height:1rem;<br />
width:1rem;<br />
opacity:var(--opacity-icon-base);<br />
background-size:100%;<br />
}<br />
<br />
/* adding icons for megamenu items */<br />
<br />
#n-Library a::before{ /*Library*/<br />
background-image: linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-editing-citation&image=book&format=original&skin=citizen);<br />
}<br />
<br />
#n-wantedpages a::before { /*Wanted pages*/<br />
background-image: linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-content&image=articleNotFound&format=original&skin=citizen);<br />
}<br />
#n-accrequest a::before { /*Recruitment*/<br />
background-image: linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-user&image=userGroup&format=original&skin=citizen);<br />
}<br />
#n-Essays a::before { /*Essays*/<br />
background-image: linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-editing-citation&image=newspaper&format=original&skin=citizen);<br />
}<br />
#n-Articles a::before { /*All pages*/<br />
background-image:linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-content&image=articles&format=original&skin=citizen);<br />
}<br />
#n-Quotes a::before{<br />
background-image:linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-alerts&image=speechBubbles&format=original&skin=citizen);<br />
}<br />
.prolewiki-ui-icon-sandbox::before { /*Sandbox (in bottom left sidebar)*/<br />
background-image: linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-editing-advanced&image=sandbox&format=original&skin=citizen);<br />
}<br />
<br />
<br />
<br />
/* making "fake" edit button look like normal edit button */<br />
@media screen{<br />
#ca-request-account > a::before{<br />
width:var(--size-icon);<br />
height:var(--size-icon);<br />
background-position:center;<br />
background-repeat:no-repeat;<br />
background-size:var(--size-icon);<br />
content:'';<br />
filter:invert(1);<br />
opacity:1;<br />
background-image:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2224%22 height=%2224%22 viewBox=%220 0 24 24%22%3E%3Cg fill=%22%23000%22%3E %3Cpath d=%22m19.5 9.8 2.2-2.2c.4-.4.4-1.1 0-1.6L18 2.3c-.4-.4-1.1-.4-1.6 0l-2.2 2.2 5.3 5.3zm-6.4-4.1L2 16.7V22h5.3l11.1-11.1c-.1 0-5.3-5.2-5.3-5.2z%22/%3E %3C/g%3E%3C/svg%3E");<br />
}<br />
}<br />
<br />
/**<br />
* Appended icons in the Citizen sidebar (see Common.js for code)<br />
**/<br />
.sidebar-library > div, .sidebar-essays > div, .sidebar-upload > div{<br />
height:40px;<br />
width:100%;<br />
background-repeat:no-repeat;<br />
background-size:auto;<br />
background-position:center;<br />
opacity:var(--opacity-icon-base);<br />
content:"";<br />
filter:var(--filter-invert); /* for dark mode */<br />
}<br />
<br />
.sidebar-library > div{<br />
background-image:linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-editing-citation&image=book&format=original&skin=citizen);<br />
}<br />
<br />
.sidebar-essays > div {<br />
background-image: linear-gradient(transparent,transparent),url(/load.php?modules=oojs-ui.styles.icons-editing-citation&image=newspaper&format=original&skin=citizen);<br />
}<br />
<br />
.sidebar-upload > div{<br />
background-image:linear-gradient(transparent,transparent),url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%2220%22 height=%2220%22 viewBox=%220 0 20 20%22%3E%3Ctitle%3E upload %3C/title%3E%3Cpath d=%22M17 12v5H3v-5H1v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5z%22/%3E%3Cpath d=%22M10 1 5 7h4v8h2V7h4z%22/%3E%3C/svg%3E");<br />
}<br />
<br />
/***<br />
**** Custom pages/templates specific CSS<br />
**** for responsiveness, custom skin and dark mode use<br />
****<br />
***/<br />
<br />
/* New library */<br />
.library-card-content{<br />
background:var(--color-surface-0);<br />
}<br />
<br />
/* New essays page */<br />
.mw-parser-output .essays-sidebar-item > div{<br />
background:var(--color-surface-2)!important;<br />
}</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89:Forte&diff=260
Товарищ:Forte
2024-01-29T16:14:35Z
<p>Forte: Test 2</p>
<hr />
<div>Здравствуйте, меня зовут Фелипе Форте. Я изучаю марксизм-ленинизм с 2019 года и был организован в Бразильской Коммунистической Партии до 2021 года.<br />
<br />
Я могу произносить русские слова, как трехлетний младенец, но я не могу понять ни одного русского слова. Для общения с русскими редакторами я использую переводчик [https://www.deepl.com/translator DeepL], поэтому "мой" русский может иногда звучать странно.</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89:Forte&diff=259
Товарищ:Forte
2024-01-29T16:13:20Z
<p>Forte: Test</p>
<hr />
<div>Здравствуйте, меня зовут Фелипе Форте. Я изучаю марксизм-ленинизм с 2019 года и был организован в Бразильской Коммунистической Партии до 2021 года.<br />
<br />
Я могу произносить русские слова, как трехлетний младенец, но я не могу понять ни одного русского слова. Для общения с русскими редакторами я использую переводчик [https://www.deepl.com/translator DeepL], поэтому "мой" русский может иногда звучать странно. 😅️</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%BB%D0%B5%D0%92%D0%B8%D0%BA%D0%B8:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=247
ПролеВики:Заглавная страница
2023-07-13T19:59:21Z
<p>Forte: </p>
<hr />
<div>__NOTOC__<br />
<templatestyles src="ПролеВики:Заглавная_страница/styles.css"/><br />
{{ПролеВики:Заглавная страница/Содержимое}}<br />
{{#seo:<br />
|type = website<br />
|title = ПролеВики<br />
|keywords = вики,марксизм-ленинизм,энциклопедия,пролетарий,пролетариат,политика,революция,ленин,сталин,ссср,кпсс,мао цзэдун,хо ши мин,ким ир сен,фидель кастро,че гевара<br />
|description = ПролеВики: Марксистско-ленинская пролетарская энциклопедия, построенная совместным трудом<br />
|site_name = ПролеВики<br />
|locale = ru<br />
|image = ProleWiki_SEO_RU.png<br />
}}</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Gadget-recentChanges.js&diff=233
MediaWiki:Gadget-recentChanges.js
2022-11-10T00:38:14Z
<p>Forte: Updated recent changes javascript</p>
<hr />
<div>//<nowiki><br />
/**<br />
* Adds a recent changes widget to the sidebar<br />
*<br />
* @author JaydenKieran<br />
*/<br />
'use strict';<br />
<br />
;<br />
(function($, mw) {<br />
var $prependTo<br />
var $rcContainer<br />
var recentChanges<br />
var $recentChangesDOM<br />
<br />
function init() {<br />
$prependTo = $('#p-Navigation')<br />
var api = new mw.Api()<br />
<br />
// Build our container<br />
$rcContainer = $('<nav>')<br />
.addClass('vector-menu vector-menu-portal portal')<br />
.attr('id', 'p-RecentChanges')<br />
.append(<br />
$('<label>').text('Свежие правки')<br />
.addClass('vector-menu-heading')<br />
.attr('id', 'p-RecentChanges-label')<br />
)<br />
<br />
// Add the container to the sidebar<br />
$prependTo.after($rcContainer)<br />
<br />
api.get({<br />
action: "query",<br />
list: "recentchanges",<br />
rcprop: "title|timestamp|sizes|user",<br />
rcnamespace: 0,<br />
rclimit: "5",<br />
rctype: "edit|new",<br />
rcshow: "!bot",<br />
rctoponly: 1,<br />
format: "json"<br />
})<br />
.done(function(data) {<br />
if (data.query && data.query.recentchanges) {<br />
recentChanges = data.query.recentchanges<br />
}<br />
<br />
if (recentChanges.length > 0) {<br />
var Time = 1;<br />
$recentChangesDOM = recentChanges.map(function(rc) {<br />
const timeMatch = rc.timestamp.match(/([0-9]+)-([0-9]+)-([0-9]+)T([0-9]+):([0-9]+):([0-9]+)Z/);<br />
var editYear = timeMatch[1];<br />
var editMonth = timeMatch[2];<br />
var editDay = timeMatch[3];<br />
var editHour = timeMatch[4];<br />
var editMinute = timeMatch[5];<br />
var editSecond = timeMatch[6];<br />
<br />
var editDate = new Date(editYear, (editMonth-1), editDay, editHour, editMinute, editSecond);<br />
var currentDate = new Date();<br />
currentDate = currentDate.getTime() + (currentDate.getTimezoneOffset() * 60000)<br />
var diffDate = currentDate - editDate;<br />
var diffDays = Math.floor(diffDate/(1000*60*60*24));<br />
var diffHours = Math.floor(diffDate/(1000*60*60));<br />
var diffMinutes = Math.floor(diffDate/(1000*60));<br />
var diffSeconds = Math.floor(diffDate/(1000));<br />
<br />
if (diffDays > 0) {<br />
Time = diffDays + 'д назад – ';<br />
} else if (diffHours > 0) {<br />
Time = diffHours + 'ч назад – ';<br />
} else if (diffMinutes > 0) {<br />
Time = diffMinutes + 'м назад – ';<br />
} else if (diffSeconds > 0) {<br />
Time = diffSeconds + 'с назад – ';<br />
} else {<br />
Time = 1 + Math.floor(Math.random() * 10) + 'м назад – ';<br />
}<br />
<br />
return $('<div>').addClass('rc-sidebar-item').append(<br />
$('<a>')<br />
.addClass('rc-sidebar-page')<br />
.text(' ' + rc.title)<br />
.attr('href', new mw.Title(rc.title).getUrl()),<br />
$('<p>')<br />
.addClass('rc-sidebar-user')<br />
.text(Time)<br />
.append(<br />
$('<a>')<br />
.text(rc.user)<br />
.attr('href', new mw.Title(rc.user, 2).getUrl())<br />
)<br />
)<br />
})<br />
} else {<br />
$recentChangesDOM = $('<p>').text('Нет свежих правок.')<br />
}<br />
$rcContainer.append($recentChangesDOM)<br />
var $showMore<br />
$showMore = $('<div>')<br />
.addClass('rc-sidebar-item rc-sidebar-more')<br />
.append(<br />
$('<a>')<br />
.addClass('rc-sidebar-page')<br />
.text('Ещё...')<br />
.attr('href', '/wiki/Служебная:Свежие правки')<br />
)<br />
$rcContainer.append($showMore)<br />
})<br />
.fail(function(_, data) {<br />
alert(data.error.info)<br />
});<br />
}<br />
<br />
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function() {<br />
$(init)<br />
})<br />
}(jQuery, mediaWiki));<br />
//</nowiki></div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Visualeditor-cite-tool-name-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8&diff=231
MediaWiki:Visualeditor-cite-tool-name-новости
2022-08-12T02:17:55Z
<p>Forte: "Website and newspaper article"</p>
<hr />
<div>Веб-сайт или газетная статья</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Visualeditor-cite-tool-name-%D1%86%D0%B8%D1%82%D0%B0%D1%82%D0%B0&diff=230
MediaWiki:Visualeditor-cite-tool-name-цитата
2022-08-12T02:14:54Z
<p>Forte: "Book and scientific article"</p>
<hr />
<div>Книга или научная статья</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Sidebar&diff=226
MediaWiki:Sidebar
2022-08-11T00:33:55Z
<p>Forte: Changed About link</p>
<hr />
<div><br />
* Navigation<br />
** mainpage|mainpage-description<br />
** recentchanges-url|recentchanges<br />
** Категория:Черновики|Черновики<br />
** Special:WantedPages|wantedpages<br />
** Special:AllPages|allpages<br />
** randompage-url|randompage<br />
** Special:ConfirmAccounts|Рекрутинг<br />
* Содержание<br />
** ПролеВики:Статьи|Статьи<br />
** ПролеВики:Эссе|Эссе<br />
** ПролеВики:Библиотека|Библиотека<br />
** ПролеВики:Цитаты|Цитаты<br />
* About<br />
** ПролеВики:Описание|О ПролеВики<br />
** ПролеВики:Принципы|Принципы<br />
** ПролеВики:Как внести свой вклад|Внесите свой вклад в ПролеВики<br />
** ПролеВики:Пожертвовать|Пожертвуйте на содержание ПролеВики<br />
* Социальные сети<br />
** https://lemmygrad.ml/c/prolewiki|Леммиград<br />
** https://twitter.com/prolewiki|Твиттер<br />
** https://www.reddit.com/r/prolewiki/|Reddit<br />
** https://www.facebook.com/groups/747910359442297|Группа в Facebook<br />
** https://discord.gg/ZQTBNRU9v5|Сервер в Discord<br />
** https://matrix.to/#/%23prolewiki:matrix.org|Пространство в Matrix<br />
* SEARCH<br />
* TOOLBOX</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%BB%D0%B5%D0%92%D0%B8%D0%BA%D0%B8:%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5&diff=224
ПролеВики:Описание
2022-08-11T00:32:27Z
<p>Forte: Новая страница: «{{заголовок|''О ПролеВики''}} == Что такое ПролеВики? == ПролеВики - это марксистско-ленинская энциклопедия, основанная в сентябре 2020 с целью сделать информацию доступной для революционеров и желающих изучить революционную теорию. Мы...»</p>
<hr />
<div>{{заголовок|''О ПролеВики''}}<br />
== Что такое ПролеВики? ==<br />
[[ПролеВики]] - это [[Марксизм-ленинизм|марксистско-ленинская]] энциклопедия, основанная в сентябре 2020 с целью сделать информацию доступной для революционеров и желающих изучить революционную теорию. Мы придерживаемся принципов антиимпериализма, и мы оказываем сопротивление либеральной гегемонии в западном обществе, представляя марксистско-ленинское понимание политической экономии.<br />
<br />
ПролеВики появился из другого коммунистического проекта, [[Lemmygrad]], и у нас очень схожие взгляды с товарищами оттуда.<br />
<br />
== Что означает "ПролеВики"? ==<br />
Имя, выбранное для ПролеВики, основанно на термине "пролетариат", его корень ''"проле"'' присутствует в самых разных западных языках: ''пролетариат, proletariat, proletariado, prolétariat, proletariato, proletariaat, etc.''. Этот лингвистический феномен прекрасно отражает интернационалистические цели этой энциклопедии, и так как нашей целью является распространение революционной теории, мы всегда готовы принять помощь от товарищей из всех стран и на любом языке.<br />
<br />
== Что движет ПролеВики? ==<br />
ПролеВики следует [[ПролеВики:Принципы|определённым принципам]], демократически определённым её участниками, и наше развитие и внутренняя демократия будут зависеть от доступных участников.<br />
<br />
Наука марксизм-ленинизма должна быть нашим проводником к освобождению всего человечества от классового общества и классовой эксплуатации, дать возможность нашему обществу разрешить собственные противоречия в интересах всех рабочих и производителей.<br />
<br />
== Чем я могу помочь? ==<br />
Вы можете прочитать нашу инструкцию [[ПролеВики:Как внести свой вклад|''Как внести свой вклад'']]. Чтобы ПролеВики выросла и стала актуальным источником знаний, нам необходимо коллективно принять участие в развитии проекта. Вы также можете помочь нам содержать ПролеВики через [[ПролеВики:Пожертвовать|страницу пожертвований]]. Лучшее, что вы можете сделать - это [[Служебная:Запросить_учётную_запись|запросить аккаунт]], чтобы вы могли быть с нами на связи и узнать, как можно наиболее эффективно нам помочь.</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Sidebar&diff=222
MediaWiki:Sidebar
2022-08-11T00:24:21Z
<p>Forte: Testing something</p>
<hr />
<div><br />
* Navigation<br />
** mainpage|mainpage-description<br />
** recentchanges-url|recentchanges<br />
** Категория:Черновики|Черновики<br />
** Special:WantedPages|wantedpages<br />
** Special:AllPages|allpages<br />
** randompage-url|randompage<br />
** Special:ConfirmAccounts|Рекрутинг<br />
* Содержание<br />
** ПролеВики:Статьи|Статьи<br />
** ПролеВики:Эссе|Эссе<br />
** ПролеВики:Библиотека|Библиотека<br />
** ПролеВики:Цитаты|Цитаты<br />
* About<br />
** ПролеВики:О нас|О ПролеВики<br />
** ПролеВики:Принципы|Принципы<br />
** ПролеВики:Как внести свой вклад|Внесите свой вклад в ПролеВики<br />
** ПролеВики:Пожертвовать|Пожертвуйте на содержание ПролеВики<br />
* Социальные сети<br />
** https://lemmygrad.ml/c/prolewiki|Леммиград<br />
** https://twitter.com/prolewiki|Твиттер<br />
** https://www.reddit.com/r/prolewiki/|Reddit<br />
** https://www.facebook.com/groups/747910359442297|Группа в Facebook<br />
** https://discord.gg/ZQTBNRU9v5|Сервер в Discord<br />
** https://matrix.to/#/%23prolewiki:matrix.org|Пространство в Matrix<br />
* SEARCH<br />
* TOOLBOX</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A7%D0%B8%D1%81%D0%BB%D0%BE&diff=215
Шаблон:Число
2022-08-10T20:55:39Z
<p>Forte: Removed line break from <noinclude></p>
<hr />
<div><includeonly>{{#invoke:Число|plural}}</includeonly><noinclude><br />
Пример: {{trim|{{Число|число=22|1=пакет|2=пакета|5=пакетов}}}}.<br />
<templatedata><br />
{<br />
"params": {<br />
"число": {<br />
"label": "Число",<br />
"description": "Число, которое необходимо отобразить",<br />
"type": "number",<br />
"example": "22",<br />
"required": true,<br />
"suggested": true<br />
},<br />
"1": {<br />
"label": "Слово в ед. ч.",<br />
"description": "Слово в единственном числе",<br />
"type": "string",<br />
"example": "пакет",<br />
"required": true,<br />
"suggested": true<br />
},<br />
"2": {<br />
"label": "Слово в мн. ч. (2)",<br />
"description": "Слово в множественном числе, если число - 2",<br />
"type": "string",<br />
"example": "пакета",<br />
"required": true,<br />
"suggested": true<br />
},<br />
"5": {<br />
"label": "Слово в мн. ч. (5)",<br />
"description": "Слово в множественном числе, если число - 5",<br />
"type": "string",<br />
"example": "пакетов",<br />
"required": true,<br />
"suggested": true<br />
}<br />
},<br />
"description": "Правильно склоняет слово в зависимости от заданного числа.",<br />
"paramOrder": [<br />
"число",<br />
"1",<br />
"2",<br />
"5"<br />
]<br />
}<br />
</templatedata><br />
</noinclude></div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%A2%D0%B5%D0%BC%D0%B0:X0s20tv5lwfz7t43&topic_postId=x0s20tv5m0e1fx2b&topic_revId=x0s20tv5m0e1fx2b&action=single-view
Тема:X0s20tv5lwfz7t43
2022-08-07T13:30:41Z
<span class="plainlinks"><a href="/wiki/%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89:Forte" class="mw-userlink" title="Товарищ:Forte"><bdi>Forte</bdi></a> <span class="mw-usertoollinks">(<a href="/index.php?title=%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%BE:Forte&action=edit&redlink=1" class="new mw-usertoollinks-talk" title="Товарищество:Forte (страница не существует)">обсуждение</a> | <a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Forte" class="mw-usertoollinks-contribs" title="Служебная:Вклад/Forte">вклад</a>)</span> <a rel="nofollow" class="external text" href="https://ru.prolewiki.org/index.php?title=%D0%A2%D0%B5%D0%BC%D0%B0:X0s20tv5lwfz7t43&topic_showPostId=x0s20tv5m0e1fx2b#flow-post-x0s20tv5m0e1fx2b">прокомментировал</a> «Я добавил вас в группу "delegate"» (<em>К сожалению, система приглашений не является централизованной, и каждый язык ПролеВики имеет свою собственную систему "найма". Группа пол...</em>)</span>
Forte
https://ru.prolewiki.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%BB%D0%B5%D0%92%D0%B8%D0%BA%D0%B8:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=165
ПролеВики:Заглавная страница
2022-08-07T00:51:58Z
<p>Forte: Пробовал разные варианты написания</p>
<hr />
<div><templatestyles src="ПролеВики:Заглавная_страница/styles.css"/><br />
{{ПролеВики:Заглавная страница/Содержимое}}<br />
{{#seo:<br />
|type = website<br />
|title = ПролеВики<br />
|keywords = вики,марксизм-ленинизм,энциклопедия,пролетарий,пролетариат,политика,революция,ленин,сталин,ссср,кпсс,мао цзэдун,хо ши мин,ким ир сен,фидель кастро,че гевара<br />
|description = ПролеВики: Марксистско-ленинская пролетарская энциклопедия, построенная совместным трудом<br />
|site_name = ПролеВики<br />
|locale = ru<br />
|image = ProleWiki_SEO_RU.png<br />
}}</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%BB%D0%B5%D0%92%D0%B8%D0%BA%D0%B8:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=164
ПролеВики:Заглавная страница
2022-08-07T00:51:04Z
<p>Forte: Использование русского SEO-образа</p>
<hr />
<div><templatestyles src="ПролеВики:Заглавная_страница/styles.css"/><br />
{{ПролеВики:Заглавная страница/Содержимое}}<br />
{{#seo:<br />
|type = website<br />
|title = ПролеВики<br />
|keywords = вики,марксизм-ленинизм,энциклопедия,пролетарий,пролетариат,политика,революция,ленин,сталин,ссср,кпсс,мао цзэдун,хо ши мин,ким ир сен,фидель кастро,че гевара<br />
|description = ПролеВики: Марксистско-ленинская пролетарская энциклопедия, построенная совместным трудом<br />
|site_name = ПролеВики<br />
|locale = ru<br />
|image = ProleWiki SEO RU.png<br />
}}</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Gadget-ReferenceTooltips.css&diff=163
MediaWiki:Gadget-ReferenceTooltips.css
2022-08-07T00:08:07Z
<p>Forte: Наряду со стилем CSS</p>
<hr />
<div>/* See [[mw:Reference Tooltips]] */<br />
<br />
.rt-tooltip {<br />
position: absolute;<br />
z-index: 100;<br />
max-width: 350px;<br />
background: #fff;<br />
color: #222;<br />
font-size: 13px;<br />
line-height: 1.5em;<br />
border: 1px solid #c8ccd1;<br />
border-radius: 3px;<br />
box-shadow: 0 15px 45px -10px rgba(0, 0, 0, 0.3);<br />
overflow-wrap: break-word;<br />
}<br />
<br />
.rt-tooltip.rt-tooltip-insideWindow {<br />
z-index: 110;<br />
}<br />
<br />
.rt-tooltipContent {<br />
padding: 8px 11px;<br />
}<br />
<br />
.rt-tooltip-above .rt-tooltipContent {<br />
margin-bottom: -8px;<br />
padding-bottom: 16px;<br />
}<br />
<br />
.rt-tooltip-below .rt-tooltipContent {<br />
margin-top: -10px;<br />
padding-top: 18px;<br />
}<br />
<br />
.rt-tooltipTail,<br />
.rt-tooltipTail:after {<br />
position: absolute;<br />
width: 12px;<br />
height: 12px;<br />
}<br />
<br />
.rt-tooltipTail {<br />
background: #c8ccd1;<br />
background: -webkit-linear-gradient(bottom left, #c8ccd1 50%, rgba(0, 0, 0, 0) 50%);<br />
background: linear-gradient(to top right, #c8ccd1 50%, rgba(0, 0, 0, 0) 50%);<br />
}<br />
<br />
.rt-tooltipTail:after {<br />
content: "";<br />
background: #fff;<br />
bottom: 1px;<br />
left: 1px;<br />
}<br />
<br />
.rt-tooltip-above .rt-tooltipTail {<br />
-webkit-transform: rotate(-45deg);<br />
transform: rotate(-45deg);<br />
-webkit-transform-origin: 100% 100%;<br />
transform-origin: 100% 100%;<br />
bottom: 0;<br />
left: 15px;<br />
}<br />
<br />
.rt-tooltip-below .rt-tooltipTail {<br />
-webkit-transform: rotate(135deg);<br />
transform: rotate(135deg);<br />
-webkit-transform-origin: 0 0;<br />
transform-origin: 0 0;<br />
top: 0;<br />
left: 27px;<br />
}<br />
<br />
.rt-settingsLink {<br />
background-image: linear-gradient(transparent,transparent),url(data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0D%0A%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%23555%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);<br />
float: right;<br />
cursor: pointer;<br />
margin: -4px -4px 0 8px;<br />
height: 24px;<br />
width: 24px;<br />
border-radius: 2px;<br />
background-position: center center;<br />
background-repeat: no-repeat;<br />
background-size: 24px 24px;<br />
}<br />
<br />
.rt-settingsLink:hover {<br />
background-color: #eee;<br />
}<br />
<br />
.rt-target {<br />
background-color: #def;<br />
}<br />
<br />
.rt-enableSelect {<br />
font-weight: bold;<br />
}<br />
<br />
.rt-settingsFormSeparator {<br />
margin: 0.85714286em 0;<br />
}<br />
<br />
.rt-numberInput.rt-numberInput {<br />
width: 150px;<br />
}<br />
<br />
.rt-tooltipsForCommentsField.rt-tooltipsForCommentsField.rt-tooltipsForCommentsField {<br />
margin-top: 1.64285714em;<br />
}<br />
<br />
.rt-disabledHelp {<br />
border-collapse: collapse;<br />
}<br />
<br />
.rt-disabledHelp td {<br />
padding: 0;<br />
}<br />
<br />
.rt-disabledNote.rt-disabledNote {<br />
vertical-align: bottom;<br />
padding-left: 0.36em;<br />
font-weight: bold;<br />
}<br />
<br />
@-webkit-keyframes rt-fade-in-up {<br />
0% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, 20px);<br />
-moz-transform: translate(0, 20px);<br />
transform: translate(0, 20px)<br />
}<br />
100% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
}<br />
<br />
@-moz-keyframes rt-fade-in-up {<br />
0% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, 20px);<br />
-moz-transform: translate(0, 20px);<br />
transform: translate(0, 20px)<br />
}<br />
100% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
}<br />
<br />
@keyframes rt-fade-in-up {<br />
0% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, 20px);<br />
-moz-transform: translate(0, 20px);<br />
transform: translate(0, 20px)<br />
}<br />
100% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
}<br />
<br />
@-webkit-keyframes rt-fade-in-down {<br />
0% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, -20px);<br />
-moz-transform: translate(0, -20px);<br />
transform: translate(0, -20px)<br />
}<br />
100% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
}<br />
<br />
@-moz-keyframes rt-fade-in-down {<br />
0% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, -20px);<br />
-moz-transform: translate(0, -20px);<br />
transform: translate(0, -20px)<br />
}<br />
100% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
}<br />
<br />
@keyframes rt-fade-in-down {<br />
0% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, -20px);<br />
-moz-transform: translate(0, -20px);<br />
transform: translate(0, -20px)<br />
}<br />
100% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
}<br />
<br />
@-webkit-keyframes rt-fade-out-down {<br />
0% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
100% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, 20px);<br />
-moz-transform: translate(0, 20px);<br />
transform: translate(0, 20px)<br />
}<br />
}<br />
<br />
@-moz-keyframes rt-fade-out-down {<br />
0% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
100% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, 20px);<br />
-moz-transform: translate(0, 20px);<br />
transform: translate(0, 20px)<br />
}<br />
}<br />
<br />
@keyframes rt-fade-out-down {<br />
0% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
100% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, 20px);<br />
-moz-transform: translate(0, 20px);<br />
transform: translate(0, 20px)<br />
}<br />
}<br />
<br />
@-webkit-keyframes rt-fade-out-up {<br />
0% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
100% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, -20px);<br />
-moz-transform: translate(0, -20px);<br />
transform: translate(0, -20px)<br />
}<br />
}<br />
<br />
@-moz-keyframes rt-fade-out-up {<br />
0% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
100% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, -20px);<br />
-moz-transform: translate(0, -20px);<br />
transform: translate(0, -20px)<br />
}<br />
}<br />
<br />
@keyframes rt-fade-out-up {<br />
0% {<br />
opacity: 1;<br />
-webkit-transform: translate(0, 0);<br />
-moz-transform: translate(0, 0);<br />
transform: translate(0, 0)<br />
}<br />
100% {<br />
opacity: 0;<br />
-webkit-transform: translate(0, -20px);<br />
-moz-transform: translate(0, -20px);<br />
transform: translate(0, -20px)<br />
}<br />
}<br />
<br />
.rt-fade-in-up {<br />
-webkit-animation: rt-fade-in-up 0.2s ease forwards;<br />
-moz-animation: rt-fade-in-up 0.2s ease forwards;<br />
animation: rt-fade-in-up 0.2s ease forwards<br />
}<br />
<br />
.rt-fade-in-down {<br />
-webkit-animation: rt-fade-in-down 0.2s ease forwards;<br />
-moz-animation: rt-fade-in-down 0.2s ease forwards;<br />
animation: rt-fade-in-down 0.2s ease forwards<br />
}<br />
<br />
.rt-fade-out-down {<br />
-webkit-animation: rt-fade-out-down 0.2s ease forwards;<br />
-moz-animation: rt-fade-out-down 0.2s ease forwards;<br />
animation: rt-fade-out-down 0.2s ease forwards<br />
}<br />
<br />
.rt-fade-out-up {<br />
-webkit-animation: rt-fade-out-up 0.2s ease forwards;<br />
-moz-animation: rt-fade-out-up 0.2s ease forwards;<br />
animation: rt-fade-out-up 0.2s ease forwards<br />
}</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Gadget-ReferenceTooltips.js&diff=162
MediaWiki:Gadget-ReferenceTooltips.js
2022-08-07T00:07:35Z
<p>Forte: Добавлен гаджет для предварительного просмотра ссылок</p>
<hr />
<div>// See [[mw:Reference Tooltips]]<br />
// Source https://en.wikipedia.org/wiki/MediaWiki:Gadget-ReferenceTooltips.js<br />
<br />
( function () {<br />
<br />
// enwiki settings<br />
var REF_LINK_SELECTOR = '.reference, a[href^="#CITEREF"]',<br />
COMMENTED_TEXT_CLASS = 'rt-commentedText',<br />
COMMENTED_TEXT_SELECTOR = ( COMMENTED_TEXT_CLASS ? '.' + COMMENTED_TEXT_CLASS + ', ' : '') +<br />
'abbr[title]';<br />
<br />
mw.messages.set( {<br />
'rt-settings': 'Reference Tooltips settings',<br />
'rt-enable-footer': 'Enable Reference Tooltips',<br />
'rt-settings-title': 'Reference Tooltips',<br />
'rt-save': 'Save',<br />
'rt-cancel': 'Cancel',<br />
'rt-enable': 'Enable',<br />
'rt-disable': 'Disable',<br />
'rt-activationMethod': 'Tooltip appears when',<br />
'rt-hovering': 'hovering',<br />
'rt-clicking': 'clicking',<br />
'rt-delay': 'Delay before the tooltip appears (in milliseconds)',<br />
'rt-tooltipsForComments': 'Show tooltips 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)',<br />
'rt-disabledNote': 'You can re-enable Reference Tooltips using a link in the footer of the page.',<br />
'rt-done': 'Done',<br />
'rt-enabled': 'Reference Tooltips are enabled'<br />
} );<br />
<br />
// "Global" variables<br />
var SECONDS_IN_A_DAY = 60 * 60 * 24,<br />
CLASSES = {<br />
FADE_IN_DOWN: 'rt-fade-in-down',<br />
FADE_IN_UP: 'rt-fade-in-up',<br />
FADE_OUT_DOWN: 'rt-fade-out-down',<br />
FADE_OUT_UP: 'rt-fade-out-up'<br />
},<br />
IS_TOUCHSCREEN = 'ontouchstart' in document.documentElement,<br />
// Quite a rough check for mobile browsers, a mix of what is advised at<br />
// https://stackoverflow.com/a/24600597 (sends to<br />
// https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent)<br />
// and https://stackoverflow.com/a/14301832<br />
IS_MOBILE = /Mobi|Android/i.test( navigator.userAgent ) ||<br />
typeof window.orientation !== 'undefined',<br />
CLIENT_NAME = $.client.profile().name,<br />
settingsString, settings, enabled, delay, activatedByClick, tooltipsForComments, cursorWaitCss,<br />
windowManager,<br />
$body = $( document.body ),<br />
$window = $( window );<br />
<br />
function rt( $content ) {<br />
// Popups gadget<br />
if ( window.pg ) {<br />
return;<br />
}<br />
<br />
var teSelector,<br />
settingsDialogOpening = false;<br />
<br />
function setSettingsCookie() {<br />
mw.cookie.set(<br />
'RTsettings',<br />
Number( enabled ) + '|' + delay + '|' + Number( activatedByClick ) + '|' +<br />
Number( tooltipsForComments ),<br />
{ path: '/', expires: 90 * SECONDS_IN_A_DAY, prefix: '' }<br />
);<br />
}<br />
<br />
function enableRt() {<br />
enabled = true;<br />
setSettingsCookie();<br />
$( '.rt-enableItem' ).remove();<br />
rt( $content );<br />
mw.notify( mw.msg( 'rt-enabled' ) );<br />
}<br />
<br />
function disableRt() {<br />
$content.find( teSelector ).removeClass( 'rt-commentedText' ).off( '.rt' );<br />
$body.off( '.rt' );<br />
$window.off( '.rt' );<br />
}<br />
<br />
function addEnableLink() {<br />
// #footer-places – Vector<br />
// #f-list – Timeless, Monobook, Modern<br />
// parent of #footer li – Cologne Blue<br />
var $footer = $( '#footer-places, #f-list' );<br />
if ( !$footer.length ) {<br />
$footer = $( '#footer li' ).parent();<br />
}<br />
$footer.append(<br />
$( '<li>' )<br />
.addClass( 'rt-enableItem' )<br />
.append(<br />
$( '<a>' )<br />
.text( mw.msg( 'rt-enable-footer' ) )<br />
.attr( 'href', 'javascript:' )<br />
.click( function ( e ) {<br />
e.preventDefault();<br />
enableRt();<br />
} )<br />
)<br />
);<br />
}<br />
<br />
function TooltippedElement( $element ) {<br />
var tooltip,<br />
events,<br />
te = this;<br />
<br />
function onStartEvent( e ) {<br />
var showRefArgs;<br />
<br />
if ( activatedByClick && te.type !== 'commentedText' && e.type !== 'contextmenu' ) {<br />
e.preventDefault();<br />
}<br />
if ( !te.noRef ) {<br />
showRefArgs = [ $( this ) ];<br />
if ( te.type !== 'supRef' ) {<br />
showRefArgs.push( e.pageX, e.pageY );<br />
}<br />
te.showRef.apply( te, showRefArgs );<br />
}<br />
}<br />
<br />
function onEndEvent() {<br />
if ( !te.noRef ) {<br />
te.hideRef();<br />
}<br />
}<br />
<br />
if ( !$element ) {<br />
return;<br />
}<br />
<br />
// TooltippedElement.$element and TooltippedElement.$originalElement will be different when<br />
// the first is changed after its cloned version is hovered in a tooltip<br />
this.$element = $element;<br />
this.$originalElement = $element;<br />
if ( this.$element.is( REF_LINK_SELECTOR ) ) {<br />
if ( this.$element.prop( 'tagName' ) === 'SUP' ) {<br />
this.type = 'supRef';<br />
} else {<br />
this.type = 'harvardRef';<br />
}<br />
} else {<br />
this.type = 'commentedText';<br />
this.comment = this.$element.attr( 'title' );<br />
if ( !this.comment ) {<br />
return;<br />
}<br />
this.$element.addClass('rt-commentedText');<br />
}<br />
<br />
if ( activatedByClick ) {<br />
events = {<br />
'click.rt': onStartEvent<br />
};<br />
// Adds an ability to see tooltips for links<br />
if ( this.type === 'commentedText' &&<br />
( this.$element.closest( 'a' ).length ||<br />
this.$element.has( 'a' ).length<br />
)<br />
) {<br />
events[ 'contextmenu.rt' ] = onStartEvent;<br />
}<br />
} else {<br />
events = {<br />
'mouseenter.rt': onStartEvent,<br />
'mouseleave.rt': onEndEvent<br />
};<br />
}<br />
<br />
this.$element.on( events );<br />
<br />
this.hideRef = function ( immediately ) {<br />
clearTimeout( te.showTimer );<br />
<br />
if ( this.type === 'commentedText' ) {<br />
this.$element.attr( 'title', this.comment );<br />
}<br />
<br />
if ( this.tooltip && this.tooltip.isPresent ) {<br />
if ( activatedByClick || immediately ) {<br />
this.tooltip.hide();<br />
} else {<br />
this.hideTimer = setTimeout( function () {<br />
te.tooltip.hide();<br />
}, 200 );<br />
}<br />
} else if ( this.$ref && this.$ref.hasClass( 'rt-target' ) ) {<br />
this.$ref.removeClass( 'rt-target' );<br />
if ( activatedByClick ) {<br />
$body.off( 'click.rt touchstart.rt', this.onBodyClick );<br />
}<br />
}<br />
};<br />
<br />
this.showRef = function ( $element, ePageX, ePageY ) {<br />
// Popups gadget<br />
if ( window.pg ) {<br />
disableRt();<br />
return;<br />
}<br />
<br />
if ( this.tooltip && !this.tooltip.$content.length ) {<br />
return;<br />
}<br />
<br />
var tooltipInitiallyPresent = this.tooltip && this.tooltip.isPresent;<br />
<br />
function reallyShow() {<br />
var viewportTop, refOffsetTop, teHref;<br />
<br />
if ( !te.$ref && !te.comment ) {<br />
teHref = te.type === 'supRef' ?<br />
te.$element.find( 'a' ).attr( 'href' ) :<br />
te.$element.attr( 'href' ); // harvardRef<br />
te.$ref = teHref &&<br />
$( '#' + $.escapeSelector( teHref.slice( 1 ) ) );<br />
if ( !te.$ref || !te.$ref.length || !te.$ref.text() ) {<br />
te.noRef = true;<br />
return;<br />
}<br />
}<br />
<br />
if ( !tooltipInitiallyPresent && !te.comment ) {<br />
viewportTop = $window.scrollTop();<br />
refOffsetTop = te.$ref.offset().top;<br />
if ( !activatedByClick &&<br />
viewportTop < refOffsetTop &&<br />
viewportTop + $window.height() > refOffsetTop + te.$ref.height() &&<br />
// There can be gadgets/scripts that make references horizontally scrollable.<br />
$window.width() > te.$ref.offset().left + te.$ref.width()<br />
) {<br />
// Highlight the reference itself<br />
te.$ref.addClass( 'rt-target' );<br />
return;<br />
}<br />
}<br />
<br />
if ( !te.tooltip ) {<br />
te.tooltip = new Tooltip( te );<br />
if ( !te.tooltip.$content.length ) {<br />
return;<br />
}<br />
}<br />
<br />
// If this tooltip is called from inside another tooltip. We can't define it<br />
// in the constructor since a ref can be cloned but have the same Tooltip object;<br />
// so, Tooltip.parent is a floating value.<br />
te.tooltip.parent = te.$element.closest( '.rt-tooltip' ).data( 'tooltip' );<br />
if ( te.tooltip.parent && te.tooltip.parent.disappearing ) {<br />
return;<br />
}<br />
<br />
te.tooltip.show();<br />
<br />
if ( tooltipInitiallyPresent ) {<br />
if ( te.tooltip.$element.hasClass( 'rt-tooltip-above' ) ) {<br />
te.tooltip.$element.addClass( CLASSES.FADE_IN_DOWN );<br />
} else {<br />
te.tooltip.$element.addClass( CLASSES.FADE_IN_UP );<br />
}<br />
return;<br />
}<br />
<br />
te.tooltip.calculatePosition( ePageX, ePageY );<br />
<br />
$window.on( 'resize.rt', te.onWindowResize );<br />
}<br />
<br />
// We redefine this.$element here because e.target can be a reference link inside<br />
// a reference tooltip, not a link that was initially assigned to this.$element<br />
this.$element = $element;<br />
<br />
if ( this.type === 'commentedText' ) {<br />
this.$element.attr( 'title', '' );<br />
}<br />
<br />
if ( activatedByClick ) {<br />
if ( tooltipInitiallyPresent ||<br />
( this.$ref && this.$ref.hasClass( 'rt-target' ) )<br />
) {<br />
return;<br />
} else {<br />
setTimeout( function () {<br />
$body.on( 'click.rt touchstart.rt', te.onBodyClick );<br />
}, 0 );<br />
}<br />
}<br />
<br />
if ( activatedByClick || tooltipInitiallyPresent ) {<br />
reallyShow();<br />
} else {<br />
this.showTimer = setTimeout( reallyShow, delay );<br />
}<br />
};<br />
<br />
this.onBodyClick = function ( e ) {<br />
if ( !te.tooltip && !te.$ref.hasClass( 'rt-target' ) ) {<br />
return;<br />
}<br />
<br />
var $current = $( e.target );<br />
<br />
function contextMatchesParameter( parameter ) {<br />
return this === parameter;<br />
}<br />
<br />
// The last condition is used to determine cases when a clicked tooltip is the current<br />
// element's tooltip or one of its descendants<br />
while ( $current.length &&<br />
( !$current.hasClass( 'rt-tooltip' ) ||<br />
!$current.data( 'tooltip' ) ||<br />
!$current.data( 'tooltip' ).upToTopParent(<br />
contextMatchesParameter, [ te.tooltip ],<br />
true<br />
)<br />
)<br />
) {<br />
$current = $current.parent();<br />
}<br />
if ( !$current.length ) {<br />
te.hideRef();<br />
}<br />
};<br />
<br />
this.onWindowResize = function () {<br />
te.tooltip.calculatePosition();<br />
};<br />
}<br />
<br />
function Tooltip( te ) {<br />
function openSettingsDialog() {<br />
var settingsDialog, settingsWindow;<br />
<br />
if ( cursorWaitCss ) {<br />
cursorWaitCss.disabled = true;<br />
}<br />
<br />
function SettingsDialog() {<br />
SettingsDialog.parent.call( this );<br />
}<br />
OO.inheritClass( SettingsDialog, OO.ui.ProcessDialog );<br />
<br />
SettingsDialog.static.name = 'settingsDialog';<br />
SettingsDialog.static.title = mw.msg( 'rt-settings-title' );<br />
SettingsDialog.static.actions = [<br />
{<br />
modes: 'basic',<br />
action: 'save',<br />
label: mw.msg( 'rt-save' ),<br />
flags: [ 'primary', 'progressive' ]<br />
},<br />
{<br />
modes: 'basic',<br />
label: mw.msg( 'rt-cancel' ),<br />
flags: 'safe'<br />
},<br />
{<br />
modes: 'disabled',<br />
action: 'deactivated',<br />
label: mw.msg( 'rt-done' ),<br />
flags: [ 'primary', 'progressive' ]<br />
}<br />
];<br />
<br />
SettingsDialog.prototype.initialize = function () {<br />
var dialog = this;<br />
<br />
SettingsDialog.parent.prototype.initialize.apply( this, arguments );<br />
<br />
this.enableOption = new OO.ui.RadioOptionWidget( {<br />
label: mw.msg( 'rt-enable' )<br />
} );<br />
this.disableOption = new OO.ui.RadioOptionWidget( {<br />
label: mw.msg( 'rt-disable' )<br />
} );<br />
this.enableSelect = new OO.ui.RadioSelectWidget( {<br />
items: [ this.enableOption, this.disableOption ],<br />
classes: [ 'rt-enableSelect' ]<br />
} );<br />
this.enableSelect.selectItem( this.enableOption );<br />
this.enableSelect.on( 'choose', function ( item ) {<br />
if ( item === dialog.disableOption ) {<br />
dialog.activationMethodSelect.setDisabled( true );<br />
dialog.delayInput.setDisabled( true );<br />
dialog.tooltipsForCommentsCheckbox.setDisabled( true );<br />
} else {<br />
dialog.activationMethodSelect.setDisabled( false );<br />
dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );<br />
dialog.tooltipsForCommentsCheckbox.setDisabled( false );<br />
}<br />
} );<br />
<br />
this.hoverOption = new OO.ui.RadioOptionWidget( {<br />
label: mw.msg( 'rt-hovering' )<br />
} );<br />
this.clickOption = new OO.ui.RadioOptionWidget( {<br />
label: mw.msg( 'rt-clicking' )<br />
} );<br />
this.activationMethodSelect = new OO.ui.RadioSelectWidget( {<br />
items: [ this.hoverOption, this.clickOption ]<br />
} );<br />
this.activationMethodSelect.selectItem( activatedByClick ?<br />
this.clickOption :<br />
this.hoverOption<br />
);<br />
this.activationMethodSelect.on( 'choose', function ( item ) {<br />
if ( item === dialog.clickOption ) {<br />
dialog.delayInput.setDisabled( true );<br />
} else {<br />
dialog.delayInput.setDisabled( dialog.clickOption.isSelected() );<br />
}<br />
} );<br />
this.activationMethodField = new OO.ui.FieldLayout( this.activationMethodSelect, {<br />
label: mw.msg( 'rt-activationMethod' ),<br />
align: 'top'<br />
} );<br />
<br />
this.delayInput = new OO.ui.NumberInputWidget( {<br />
input: { value: delay },<br />
step: 50,<br />
min: 0,<br />
max: 5000,<br />
disabled: activatedByClick,<br />
classes: [ 'rt-numberInput' ]<br />
} );<br />
this.delayField = new OO.ui.FieldLayout( this.delayInput, {<br />
label: mw.msg( 'rt-delay' ),<br />
align: 'top'<br />
} );<br />
<br />
this.tooltipsForCommentsCheckbox = new OO.ui.CheckboxInputWidget( {<br />
selected: tooltipsForComments<br />
} );<br />
this.tooltipsForCommentsField = new OO.ui.FieldLayout(<br />
this.tooltipsForCommentsCheckbox,<br />
{<br />
label: new OO.ui.HtmlSnippet( mw.msg( 'rt-tooltipsForComments' ) ),<br />
align: 'inline',<br />
classes: [ 'rt-tooltipsForCommentsField' ]<br />
}<br />
);<br />
new TooltippedElement(<br />
this.tooltipsForCommentsField.$element.find(<br />
'.' + ( COMMENTED_TEXT_CLASS || 'rt-commentedText' )<br />
)<br />
);<br />
<br />
this.fieldset = new OO.ui.FieldsetLayout();<br />
this.fieldset.addItems( [<br />
this.activationMethodField,<br />
this.delayField,<br />
this.tooltipsForCommentsField<br />
] );<br />
<br />
this.panelSettings = new OO.ui.PanelLayout( {<br />
padded: true,<br />
expanded: false<br />
} );<br />
this.panelSettings.$element.append(<br />
this.enableSelect.$element,<br />
$( '<hr>' ).addClass( 'rt-settingsFormSeparator' ),<br />
this.fieldset.$element<br />
);<br />
<br />
this.panelDisabled = new OO.ui.PanelLayout( {<br />
padded: true,<br />
expanded: false<br />
} );<br />
this.panelDisabled.$element.append(<br />
$( '<table>' )<br />
.addClass( 'rt-disabledHelp' )<br />
.append(<br />
$( '<tr>' ).append(<br />
$( '<td>' ).append(<br />
$( '<img>' ).attr( 'src', 'https://en.wikipedia.org/w/load.php?modules=ext.popups.images&image=footer&format=rasterized&lang=ru&skin=vector&version=0uotisb' )<br />
),<br />
$( '<td>' )<br />
.addClass( 'rt-disabledNote' )<br />
.text( mw.msg( 'rt-disabledNote' ) )<br />
)<br />
)<br />
);<br />
<br />
this.stackLayout = new OO.ui.StackLayout( {<br />
items: [ this.panelSettings, this.panelDisabled ]<br />
} );<br />
<br />
this.$body.append( this.stackLayout.$element );<br />
};<br />
<br />
SettingsDialog.prototype.getSetupProcess = function ( data ) {<br />
return SettingsDialog.parent.prototype.getSetupProcess.call( this, data )<br />
.next( function () {<br />
this.stackLayout.setItem( this.panelSettings );<br />
this.actions.setMode( 'basic' );<br />
}, this );<br />
};<br />
<br />
SettingsDialog.prototype.getActionProcess = function ( action ) {<br />
var dialog = this;<br />
<br />
if ( action === 'save' ) {<br />
return new OO.ui.Process( function () {<br />
var newDelay = Number( dialog.delayInput.getValue() );<br />
<br />
enabled = dialog.enableOption.isSelected();<br />
if ( newDelay >= 0 && newDelay <= 5000 ) {<br />
delay = newDelay;<br />
}<br />
activatedByClick = dialog.clickOption.isSelected();<br />
tooltipsForComments = dialog.tooltipsForCommentsCheckbox.isSelected();<br />
<br />
setSettingsCookie();<br />
<br />
if ( enabled ) {<br />
dialog.close();<br />
disableRt();<br />
rt( $content );<br />
} else {<br />
dialog.actions.setMode( 'disabled' );<br />
dialog.stackLayout.setItem( dialog.panelDisabled );<br />
disableRt();<br />
addEnableLink();<br />
}<br />
} );<br />
} else if ( action === 'deactivated' ) {<br />
dialog.close();<br />
}<br />
return SettingsDialog.parent.prototype.getActionProcess.call( this, action );<br />
};<br />
<br />
SettingsDialog.prototype.getBodyHeight = function () {<br />
return this.stackLayout.getCurrentItem().$element.outerHeight( true );<br />
};<br />
<br />
tooltip.upToTopParent( function adjustRightAndHide() {<br />
if ( this.isPresent ) {<br />
if ( this.$element[ 0 ].style.right ) {<br />
this.$element.css(<br />
'right',<br />
'+=' + ( window.innerWidth - $window.width() )<br />
);<br />
}<br />
this.te.hideRef( true );<br />
}<br />
} );<br />
<br />
if ( !windowManager ) {<br />
windowManager = new OO.ui.WindowManager();<br />
$body.append( windowManager.$element );<br />
}<br />
<br />
settingsDialog = new SettingsDialog();<br />
windowManager.addWindows( [ settingsDialog ] );<br />
settingsWindow = windowManager.openWindow( settingsDialog );<br />
settingsWindow.opened.then( function () {<br />
settingsDialogOpening = false;<br />
} );<br />
settingsWindow.closed.then( function () {<br />
windowManager.clearWindows();<br />
} );<br />
}<br />
<br />
var tooltip = this;<br />
<br />
// This variable can change: one tooltip can be called from a harvard-style reference link<br />
// that is put into different tooltips<br />
this.te = te;<br />
<br />
switch ( this.te.type ) {<br />
case 'supRef':<br />
this.id = 'rt-' + this.te.$originalElement.attr( 'id' );<br />
this.$content = this.te.$ref<br />
.contents()<br />
.filter( function ( i ) {<br />
var $this = $( this );<br />
return this.nodeType === Node.TEXT_NODE ||<br />
!( $this.is( '.mw-cite-backlink' ) ||<br />
( i === 0 &&<br />
// Template:Cnote, Template:Note<br />
( $this.is( 'b' ) ||<br />
// Template:Note_label<br />
$this.is( 'a' ) &&<br />
$this.attr( 'href' ).indexOf( '#ref' ) === 0<br />
)<br />
)<br />
);<br />
} )<br />
.clone( true );<br />
break;<br />
case 'harvardRef':<br />
this.id = 'rt-' + this.te.$originalElement.closest( 'li' ).attr( 'id' );<br />
this.$content = this.te.$ref<br />
.clone( true )<br />
.removeAttr( 'id' );<br />
break;<br />
case 'commentedText':<br />
this.id = 'rt-' + String( Math.random() ).slice( 2 );<br />
this.$content = $( document.createTextNode( this.te.comment ) );<br />
break;<br />
}<br />
if ( !this.$content.length ) {<br />
return;<br />
}<br />
<br />
this.insideWindow = Boolean( this.te.$element.closest( '.oo-ui-window' ).length );<br />
<br />
this.$element = $( '<div>' )<br />
.addClass( 'rt-tooltip' )<br />
.attr( 'id', this.id )<br />
.attr( 'role', 'tooltip' )<br />
.data( 'tooltip', this );<br />
if ( this.insideWindow ) {<br />
this.$element.addClass( 'rt-tooltip-insideWindow' );<br />
}<br />
<br />
// We need the $content interlayer here in order for the settings icon to have correct<br />
// margins<br />
this.$content = this.$content<br />
.wrapAll( '<div>' )<br />
.parent()<br />
.addClass( 'rt-tooltipContent' )<br />
.addClass( 'mw-parser-output' )<br />
.appendTo( this.$element );<br />
<br />
if ( !activatedByClick ) {<br />
this.$element<br />
.mouseenter( function () {<br />
if ( !tooltip.disappearing ) {<br />
tooltip.upToTopParent( function () {<br />
this.show();<br />
} );<br />
}<br />
} )<br />
.mouseleave( function ( e ) {<br />
// https://stackoverflow.com/q/47649442 workaround. Relying on relatedTarget<br />
// alone has pitfalls: when alt-tabbing, relatedTarget is empty too<br />
if ( CLIENT_NAME !== 'chrome' ||<br />
( !e.originalEvent ||<br />
e.originalEvent.relatedTarget !== null ||<br />
!tooltip.clickedTime ||<br />
$.now() - tooltip.clickedTime > 50<br />
)<br />
) {<br />
tooltip.upToTopParent( function () {<br />
this.te.hideRef();<br />
} );<br />
}<br />
} )<br />
.click( function () {<br />
tooltip.clickedTime = $.now();<br />
} );<br />
}<br />
<br />
if ( !this.insideWindow ) {<br />
$( '<div>' )<br />
.addClass( 'rt-settingsLink' )<br />
.attr( 'title', mw.msg( 'rt-settings' ) )<br />
.click( function () {<br />
if ( settingsDialogOpening ) {<br />
return;<br />
}<br />
settingsDialogOpening = true;<br />
<br />
if ( mw.loader.getState( 'oojs-ui' ) !== 'ready' ) {<br />
if ( cursorWaitCss ) {<br />
cursorWaitCss.disabled = false;<br />
} else {<br />
cursorWaitCss = mw.util.addCSS( 'body { cursor: wait; }' );<br />
}<br />
}<br />
mw.loader.using( [ 'oojs', 'oojs-ui' ], openSettingsDialog );<br />
} )<br />
.prependTo( this.$content );<br />
}<br />
<br />
// Tooltip tail element is inside tooltip content element in order for the tooltip<br />
// not to disappear when the mouse is above the tail<br />
this.$tail = $( '<div>' )<br />
.addClass( 'rt-tooltipTail' )<br />
.prependTo( this.$element );<br />
<br />
this.disappearing = false;<br />
<br />
this.show = function () {<br />
this.disappearing = false;<br />
clearTimeout( this.te.hideTimer );<br />
clearTimeout( this.te.removeTimer );<br />
<br />
this.$element<br />
.removeClass( CLASSES.FADE_OUT_DOWN )<br />
.removeClass( CLASSES.FADE_OUT_UP );<br />
<br />
if ( !this.isPresent ) {<br />
$body.append( this.$element );<br />
}<br />
<br />
this.isPresent = true;<br />
};<br />
<br />
this.hide = function () {<br />
var tooltip = this;<br />
<br />
tooltip.disappearing = true;<br />
<br />
if ( tooltip.$element.hasClass( 'rt-tooltip-above' ) ) {<br />
tooltip.$element<br />
.removeClass( CLASSES.FADE_IN_DOWN )<br />
.addClass( CLASSES.FADE_OUT_UP );<br />
} else {<br />
tooltip.$element<br />
.removeClass( CLASSES.FADE_IN_UP )<br />
.addClass( CLASSES.FADE_OUT_DOWN );<br />
}<br />
<br />
tooltip.te.removeTimer = setTimeout( function () {<br />
if ( tooltip.isPresent ) {<br />
tooltip.$element.detach();<br />
<br />
tooltip.$tail.css( 'left', '' );<br />
<br />
if ( activatedByClick ) {<br />
$body.off( 'click.rt touchstart.rt', tooltip.te.onBodyClick );<br />
}<br />
$window.off( 'resize.rt', tooltip.te.onWindowResize );<br />
<br />
tooltip.isPresent = false;<br />
}<br />
}, 200 );<br />
};<br />
<br />
this.calculatePosition = function ( ePageX, ePageY ) {<br />
var teElement, teOffsets, teOffset, tooltipTailOffsetX, tooltipTailLeft,<br />
offsetYCorrection = 0;<br />
<br />
this.$tail.css( 'left', '' );<br />
<br />
teElement = this.te.$element.get( 0 );<br />
if ( ePageX !== undefined ) {<br />
tooltipTailOffsetX = ePageX;<br />
teOffsets = teElement.getClientRects &&<br />
teElement.getClientRects() ||<br />
teElement.getBoundingClientRect();<br />
if ( teOffsets.length > 1 ) {<br />
for (var i = teOffsets.length - 1; i >= 0; i--) {<br />
if ( ePageY >= Math.round( $window.scrollTop() + teOffsets[i].top ) &&<br />
ePageY <= Math.round(<br />
$window.scrollTop() + teOffsets[i].top + teOffsets[i].height<br />
)<br />
) {<br />
teOffset = teOffsets[i];<br />
}<br />
}<br />
}<br />
}<br />
<br />
if ( !teOffset ) {<br />
teOffset = teElement.getClientRects &&<br />
teElement.getClientRects()[0] ||<br />
teElement.getBoundingClientRect();<br />
}<br />
teOffset = {<br />
top: $window.scrollTop() + teOffset.top,<br />
left: $window.scrollLeft() + teOffset.left,<br />
width: teOffset.width,<br />
height: teOffset.height<br />
};<br />
if ( !tooltipTailOffsetX ) {<br />
tooltipTailOffsetX = ( teOffset.left * 2 + teOffset.width ) / 2;<br />
}<br />
if ( CLIENT_NAME === 'msie' && this.te.type === 'supRef' ) {<br />
offsetYCorrection = -Number(<br />
this.te.$element.parent().css( 'font-size' ).replace( 'px', '' )<br />
) / 2;<br />
}<br />
this.$element.css( {<br />
top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection,<br />
left: tooltipTailOffsetX - 20,<br />
right: ''<br />
} );<br />
<br />
// Is it squished against the right side of the page?<br />
if ( this.$element.offset().left + this.$element.outerWidth() > $window.width() - 1 ) {<br />
this.$element.css( {<br />
left: '',<br />
right: 0<br />
} );<br />
tooltipTailLeft = tooltipTailOffsetX - this.$element.offset().left - 5;<br />
}<br />
<br />
// Is a part of it above the top of the screen?<br />
if ( teOffset.top < this.$element.outerHeight() + $window.scrollTop() + 6 ) {<br />
this.$element<br />
.removeClass( 'rt-tooltip-above' )<br />
.addClass( 'rt-tooltip-below' )<br />
.addClass( CLASSES.FADE_IN_UP )<br />
.css( {<br />
top: teOffset.top + teOffset.height + 9 + offsetYCorrection<br />
} );<br />
if ( tooltipTailLeft ) {<br />
this.$tail.css( 'left', ( tooltipTailLeft + 12 ) + 'px' );<br />
}<br />
} else {<br />
this.$element<br />
.removeClass( 'rt-tooltip-below' )<br />
.addClass( 'rt-tooltip-above' )<br />
.addClass( CLASSES.FADE_IN_DOWN )<br />
// A fix for cases when a tooltip shown once is then wrongly positioned when it<br />
// is shown again after a window resize. We just repeat what is above.<br />
.css( {<br />
top: teOffset.top - this.$element.outerHeight() - 7 + offsetYCorrection<br />
} );<br />
if ( tooltipTailLeft ) {<br />
// 12 is the tail element width/height<br />
this.$tail.css( 'left', tooltipTailLeft + 'px' );<br />
}<br />
}<br />
};<br />
<br />
// Run some function for all the tooltips up to the top one in a tree. Its context will be<br />
// the tooltip, while its parameters may be passed to Tooltip.upToTopParent as an array<br />
// in the second parameter. If the third parameter passed to ToolTip.upToTopParent is true,<br />
// the execution stops when the function in question returns true for the first time,<br />
// and ToolTip.upToTopParent returns true as well.<br />
this.upToTopParent = function ( func, parameters, stopAtTrue ) {<br />
var returnValue,<br />
currentTooltip = this;<br />
<br />
do {<br />
returnValue = func.apply( currentTooltip, parameters );<br />
if ( stopAtTrue && returnValue ) {<br />
break;<br />
}<br />
} while ( currentTooltip = currentTooltip.parent );<br />
<br />
if ( stopAtTrue ) {<br />
return returnValue;<br />
}<br />
};<br />
}<br />
<br />
if ( !enabled ) {<br />
addEnableLink();<br />
return;<br />
}<br />
<br />
teSelector = REF_LINK_SELECTOR;<br />
if ( tooltipsForComments ) {<br />
teSelector += ', ' + COMMENTED_TEXT_SELECTOR;<br />
}<br />
$content.find( teSelector ).each( function () {<br />
new TooltippedElement( $( this ) );<br />
} );<br />
}<br />
<br />
settingsString = mw.cookie.get( 'RTsettings', '' );<br />
if ( settingsString ) {<br />
settings = settingsString.split( '|' );<br />
enabled = Boolean( Number( settings[ 0 ] ) );<br />
delay = Number( settings[ 1 ] );<br />
activatedByClick = Boolean( Number( settings[ 2 ] ) );<br />
// The forth value was added later, so we provide for a default value. See comments below<br />
// for why we use "IS_TOUCHSCREEN && IS_MOBILE".<br />
tooltipsForComments = settings[ 3 ] === undefined ?<br />
IS_TOUCHSCREEN && IS_MOBILE :<br />
Boolean( Number( settings[ 3 ] ) );<br />
} else {<br />
enabled = true;<br />
delay = 200;<br />
// Since the mobile browser check is error-prone, adding IS_MOBILE condition here would probably<br />
// leave cases where a user interacting with the browser using touches doesn't know how to call<br />
// a tooltip in order to switch to activation by click. Some touch-supporting laptop users<br />
// interacting by touch (though probably not the most popular use case) would not be happy too.<br />
activatedByClick = IS_TOUCHSCREEN;<br />
// Arguably we shouldn't convert native tooltips into gadget tooltips for devices that have<br />
// mouse support, even if they have touchscreens (there are laptops with touchscreens).<br />
// IS_TOUCHSCREEN check here is for reliability, since the mobile check is prone to false<br />
// positives.<br />
tooltipsForComments = IS_TOUCHSCREEN && IS_MOBILE;<br />
}<br />
<br />
mw.hook( 'wikipage.content' ).add( rt );<br />
<br />
}() );</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89:Forte&diff=157
Товарищ:Forte
2022-08-06T02:25:07Z
<p>Forte: Созданная страница</p>
<hr />
<div>Здравствуйте, меня зовут Фелипе Форте. Я изучаю марксизм-ленинизм с 2019 года и был организован в Бразильской Коммунистической Партии до 2021 года.<br />
<br />
Я могу произносить русские слова, как трехлетний младенец, но я не могу понять ни одного русского слова. Для общения с русскими редакторами я использую переводчик [https://www.deepl.com/translator DeepL], поэтому "мой" русский может иногда звучать странно.</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%A2%D0%B5%D0%BC%D0%B0:X0oseeia2qw29737&topic_postId=x0oseeia2uu4hb1f&topic_revId=x0oseeia2uu4hb1f&action=single-view
Тема:X0oseeia2qw29737
2022-08-06T02:18:36Z
<span class="plainlinks"><a href="/wiki/%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89:Forte" class="mw-userlink" title="Товарищ:Forte"><bdi>Forte</bdi></a> <span class="mw-usertoollinks">(<a href="/index.php?title=%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%BE:Forte&action=edit&redlink=1" class="new mw-usertoollinks-talk" title="Товарищество:Forte (страница не существует)">обсуждение</a> | <a href="/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Forte" class="mw-usertoollinks-contribs" title="Служебная:Вклад/Forte">вклад</a>)</span> <a rel="nofollow" class="external text" href="https://ru.prolewiki.org/index.php?title=%D0%A2%D0%B5%D0%BC%D0%B0:X0oseeia2qw29737&topic_showPostId=x0oseeia2uu4hb1f#flow-post-x0oseeia2uu4hb1f">прокомментировал</a> «Перевод параметров» (<em>Если в этом есть необходимость, параметры шаблона (author, title, year) могут быть изменены. На странице модуля есть несколько деклараций...</em>)</span>
Forte
https://ru.prolewiki.org/index.php?title=%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D1%89:Forte/%D0%BF%D0%B5%D1%81%D0%BE%D1%87%D0%BD%D0%B8%D1%86%D0%B0&diff=154
Товарищ:Forte/песочница
2022-08-06T02:11:16Z
<p>Forte: Новая страница: «Test to see if citations work<ref>{{Цитата|author=Author|year=2022|title=Title|chapter=Chapter|section=Section|page=10|quote=Quote|city=City|publisher=publisher|series=Series|volume=1}}</ref> == References == <references/>»</p>
<hr />
<div>Test to see if citations work<ref>{{Цитата|author=Author|year=2022|title=Title|chapter=Chapter|section=Section|page=10|quote=Quote|city=City|publisher=publisher|series=Series|volume=1}}</ref><br />
<br />
== References ==<br />
<references/></div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A6%D0%B8%D1%82%D0%B0%D1%82%D0%B0&diff=153
Шаблон:Цитата
2022-08-06T02:06:45Z
<p>Forte: Использование русского названия для модуля</p>
<hr />
<div><includeonly>{{#invoke:Цитата|cite}}</includeonly><br />
<noinclude><br />
<templatedata><br />
{<br />
"params": {<br />
"author": {<br />
"label": "Автор(ы)",<br />
"description": "Автор работы",<br />
"example": "Владимир Ленин",<br />
"type": "string",<br />
"suggested": true<br />
},<br />
"year": {<br />
"label": "Год",<br />
"description": "Год публикации",<br />
"example": "1916",<br />
"type": "date",<br />
"suggested": true<br />
},<br />
"title": {<br />
"label": "Название",<br />
"description": "Название работы",<br />
"example": "Империализм: высшая стадия капитализма",<br />
"type": "string",<br />
"required": true,<br />
"suggested": true<br />
},<br />
"page": {<br />
"label": "Страница(ы)",<br />
"description": "Страницы, где может быть найдена эта информация",<br />
"type": "number",<br />
"suggested": true<br />
},<br />
"chapter": {<br />
"label": "Глава",<br />
"description": "Глава работы",<br />
"example": "Финансовый капитал и финансовая олигархия",<br />
"type": "string",<br />
"suggested": true<br />
},<br />
"title-url": {<br />
"label": "Ссылка",<br />
"description": "Ссылка, где книгу можно прочитать в интернете",<br />
"example": "https://ru.wikisource.org/wiki/%D0%98%D0%BC%D0%BF%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%BC,_%D0%BA%D0%B0%D0%BA_%D0%B2%D1%8B%D1%81%D1%88%D0%B0%D1%8F_%D1%81%D1%82%D0%B0%D0%B4%D0%B8%D1%8F_%D0%BA%D0%B0%D0%BF%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D0%B7%D0%BC%D0%B0_(%D0%9B%D0%B5%D0%BD%D0%B8%D0%BD)",<br />
"type": "url",<br />
"suggested": true<br />
},<br />
"chapter-url": {<br />
"label": "Ссылка на главу",<br />
"description": "Ссылка, где можно прочитать указанную главу",<br />
"example": "https://ru.wikisource.org/wiki/%D0%98%D0%BC%D0%BF%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%BC,_%D0%BA%D0%B0%D0%BA_%D0%B2%D1%8B%D1%81%D1%88%D0%B0%D1%8F_%D1%81%D1%82%D0%B0%D0%B4%D0%B8%D1%8F_%D0%BA%D0%B0%D0%BF%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D0%B7%D0%BC%D0%B0_(%D0%9B%D0%B5%D0%BD%D0%B8%D0%BD)/III",<br />
"type": "url",<br />
"suggested": true<br />
},<br />
"isbn": {<br />
"label": "Номер ISBN",<br />
"description": "ISBN номер работы",<br />
"example": "9785010004392",<br />
"type": "number",<br />
"suggested": true<br />
},<br />
"city": {<br />
"label": "Место публикации",<br />
"description": "Город, где была опубликована работа",<br />
"example": "Москва",<br />
"type": "string",<br />
"suggested": true<br />
},<br />
"publisher": {<br />
"label": "Издатель",<br />
"description": "Издатель работы",<br />
"example": "Издательство «Парус»",<br />
"type": "string",<br />
"suggested": true<br />
},<br />
"doi": {<br />
"label": "Код DOI",<br />
"description": "DOI код работы",<br />
"example": "10.1093/ajae/aaq063",<br />
"suggested": true<br />
},<br />
"lg": {<br />
"label": "Ссылка Library Genesis",<br />
"description": "Ссылка на Library Genesis, где можно скачать данную работу",<br />
"example": "http://libgen.rs/book/index.php?md5=32555E73BCBBC279F6B74AB83BDD1C57",<br />
"type": "url",<br />
"suggested": true<br />
},<br />
"mia": {<br />
"label": "Ссылка на Marxists Internet Archive",<br />
"description": "Ссылка на MIA, где можно получить доступ к данной работе",<br />
"example": "https://www.marxists.org/russkij/downloads/lenin_imperialism_rus.epub",<br />
"type": "url",<br />
"suggested": true<br />
},<br />
"pdf": {<br />
"label": "PDF ссылка",<br />
"description": "Ссылка на PDF версию данной работы",<br />
"example": "https://libgen.rocks/get.php?md5=32555e73bcbbc279f6b74ab83bdd1c57&key=VEI29ZRRA6QWRF38",<br />
"type": "url",<br />
"suggested": true<br />
},<br />
"trans-title": {<br />
"label": "Заголовок на иностранном языке",<br />
"description": "Оригинальный заголовок, если работа была впервые издана на иностранном языке",<br />
"type": "string",<br />
"suggested": true<br />
},<br />
"trans-lang": {<br />
"label": "Оригинальный язык",<br />
"description": "Оригинальный язык цитируемой работы, если она была впервые издана на иностранном языке",<br />
"type": "string",<br />
"suggested": true,<br />
"example": "Английский, испанский, китайский, и т.д."<br />
},<br />
"quote": {<br />
"label": "Цитата",<br />
"description": "Цитата из работы",<br />
"type": "string",<br />
"suggested": true<br />
},<br />
"section": {<br />
"label": "Секция",<br />
"description": "Секция в главе",<br />
"type": "string",<br />
"suggested": true<br />
},<br />
"image": {<br />
"label": "Изображение",<br />
"description": "Добавить изображение к цитате (полезно для таблиц, графиков, и т.д.)",<br />
"type": "wiki-file-name"<br />
},<br />
"series": {<br />
"label": "Серия",<br />
"description": "Название серии работ, если эта работа является её частью",<br />
"type": "string",<br />
"suggested": true<br />
},<br />
"volume": {<br />
"label": "Том",<br />
"description": "Номер тома, если работа является частью большой коллекции книг",<br />
"example": "\"1\", \"2\", или \"I\", \"II\"",<br />
"type": "string",<br />
"suggested": true<br />
}<br />
},<br />
"description": "Создаёт цитату книги или научной работы",<br />
"paramOrder": [<br />
"author",<br />
"year",<br />
"title",<br />
"title-url",<br />
"chapter",<br />
"chapter-url",<br />
"section",<br />
"page",<br />
"quote",<br />
"pdf",<br />
"city",<br />
"publisher",<br />
"isbn",<br />
"doi",<br />
"lg",<br />
"mia",<br />
"series",<br />
"volume",<br />
"trans-title",<br />
"trans-lang",<br />
"image"<br />
]<br />
}<br />
</templatedata><br />
</noinclude></div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%A6%D0%B8%D1%82%D0%B0%D1%82%D0%B0&diff=152
Модуль:Цитата
2022-08-06T02:05:47Z
<p>Forte: Импорт модуля из английской версии</p>
<hr />
<div>local p = {}<br />
<br />
local function is_set (var)<br />
return not (var == nil or var == '');<br />
end<br />
<br />
local function italics (var)<br />
return "<i>" .. var .. "</i>"<br />
end<br />
<br />
local function parenthesis (var)<br />
return "(" .. var .. ")"<br />
end<br />
<br />
function p.cite( frame )<br />
local pframe = frame:getParent()<br />
<br />
local Author = pframe.args.author<br />
local Year = pframe.args.year<br />
local Chapter = pframe.args.chapter<br />
local ChapterURL = pframe.args['chapter-url']<br />
local Section = pframe.args.section<br />
local Title = pframe.args.title<br />
local TitleURL = pframe.args['title-url']<br />
local Volume = pframe.args.volume<br />
local Series = pframe.args.series<br />
local Trans = pframe.args['trans-title']<br />
local TransLang = pframe.args['trans-lang']<br />
local Page = pframe.args.page<br />
local PDF = pframe.args.pdf<br />
local City = pframe.args.city<br />
local Publisher = pframe.args.publisher<br />
local ISBN = pframe.args.isbn<br />
local DOI = pframe.args.doi<br />
local LG = pframe.args.lg<br />
local MIA = pframe.args.mia<br />
local Quote = pframe.args.quote<br />
local Image = pframe.args.image<br />
local ImageCaption = pframe.args['image-caption']<br />
<br />
<br />
if is_set (Author) then<br />
if is_set (Year) then<br />
first_part = Author .. " " .. parenthesis (Year) .. "."<br />
else<br />
first_part = Author .. "."<br />
end<br />
else<br />
first_part = ''<br />
end<br />
<br />
if is_set (Quote) then<br />
Quote = string.gsub(Quote,"\n","<br>")<br />
Quote = "“" .. Quote .. "”"<br />
local div = mw.html.create ('div')<br />
div<br />
:attr("style", "width:80%; margin-left:10%;")<br />
:wikitext(Quote)<br />
local br = mw.html.create ('br', selfClosing)<br />
first_part = italics(tostring(div)) .. tostring(br) .. first_part<br />
end<br />
<br />
if is_set (Image) then<br />
local span = mw.html.create ( 'span' )<br />
span<br />
:wikitext('[[File:' .. Image .. '|center|300px|frameless]]')<br />
<br />
if is_set(ImageCaption) then <br />
local caption = mw.html.create ('div')<br />
caption<br />
:attr("style", "text-align:center;font-size:85%;")<br />
:wikitext(ImageCaption)<br />
first_part = tostring(span) .. tostring(caption) .. first_part<br />
else<br />
first_part = tostring(span) .. first_part<br />
end<br />
<br />
end<br />
<br />
<br />
if is_set (Title) then<br />
if is_set (TitleURL) then<br />
Title = "[" .. TitleURL .. " " .. Title .. "]"<br />
end<br />
Title = italics(Title)<br />
if not is_set (Series) then<br />
if is_set (Volume) then<br />
Title = Title .. ", vol. " .. Volume<br />
end<br />
end<br />
second_part = Title<br />
if is_set (Chapter) then<br />
if is_set (ChapterURL) then<br />
Chapter = "[" .. ChapterURL .. " " .. Chapter .. "]"<br />
end<br />
if is_set (Section) then<br />
Chapter = Chapter .. "; " .. Section<br />
end<br />
second_part = second_part .. ": " .. "'" .. Chapter .. "'"<br />
end<br />
<br />
if not is_set (Author) then<br />
if is_set (Year) then<br />
second_part = second_part .. " " .. parenthesis (Year)<br />
end<br />
end<br />
<br />
if is_set (Trans) then<br />
if is_set (TransLang) then<br />
second_part = second_part .. " " .. "(" .. TransLang .. ": " .. Trans .. ")"<br />
else<br />
second_part = second_part .. " " .. parenthesis (Trans)<br />
end<br />
end<br />
<br />
if is_set (Page) then<br />
if tonumber(Page) ~= nil then<br />
Page = "p." .. " " .. Page<br />
else<br />
Page = "pp." .. " " .. Page<br />
end<br />
second_part = second_part .. " " .. parenthesis (Page) .. "."<br />
else<br />
second_part = second_part .. "."<br />
end<br />
end<br />
<br />
if is_set (PDF) then<br />
local span = mw.html.create ( 'span' )<br />
span<br />
:attr( 'title', 'PDF download')<br />
:addClass('plainlinks')<br />
:tag( 'small' )<br />
:wikitext('[' .. PDF .. " " .. mw.text.nowiki('[PDF]') .. ']')<br />
second_part = second_part .. " " .. tostring(span)<br />
end<br />
<br />
if is_set (Series) then<br />
if is_set (Volume) then<br />
Series = Series .. ", vol." .. Volume<br />
end<br />
second_part = second_part .. " " .. Series .. "."<br />
end<br />
<br />
if is_set (City) then<br />
if is_set (Publisher) then<br />
third_part = City .. ": " .. Publisher .. "."<br />
else<br />
third_part = City .. "."<br />
end<br />
end<br />
<br />
if not is_set(City) then<br />
if is_set(Publisher) then<br />
third_part = Publisher .. "."<br />
else<br />
third_part = ''<br />
end<br />
end<br />
<br />
fourth_part = ''<br />
<br />
if is_set (ISBN) then<br />
local span = mw.html.create ( 'span' )<br />
span<br />
:attr( 'title', 'WorldCat')<br />
:addClass('plainlinks')<br />
:tag( 'small' )<br />
:wikitext('[' .. "https://www.worldcat.org/search?qt=worldcat_org_all&q=" .. ISBN .. " " .. "ISBN " .. ISBN .. ']')<br />
fourth_part = fourth_part .. tostring(span)<br />
end<br />
<br />
if is_set (DOI) then<br />
local doispan = mw.html.create ( 'span' )<br />
doispan<br />
:tag('small')<br />
:wikitext("doi: " .. DOI)<br />
fourth_part = fourth_part .. " " .. tostring(doispan)<br />
local span = mw.html.create ( 'span' )<br />
span<br />
:attr( 'title', 'Sci-Hub link')<br />
:addClass('plainlinks')<br />
:tag( 'small' )<br />
:wikitext('[' .. "https://sci-hub.se/" .. DOI .. " " .. mw.text.nowiki('[HUB]') .. ']')<br />
fourth_part = fourth_part .." " .. tostring(span)<br />
end<br />
<br />
if is_set (LG) then<br />
local span = mw.html.create ( 'span' )<br />
span<br />
:attr( 'title', 'Library Genesis link')<br />
:addClass('plainlinks')<br />
:tag( 'small' )<br />
:wikitext('[' .. LG .. " " .. mw.text.nowiki('[LG]') .. ']')<br />
fourth_part = fourth_part .." " .. tostring(span)<br />
end<br />
<br />
if is_set (MIA) then<br />
local span = mw.html.create ( 'span' )<br />
span<br />
:attr( 'title', 'Marxists Internet Archive link')<br />
:addClass('plainlinks')<br />
:tag( 'small' )<br />
:wikitext('[' .. MIA .. " " .. mw.text.nowiki('[MIA]') .. ']')<br />
fourth_part = fourth_part .." " .. tostring(span)<br />
end<br />
<br />
<br />
if is_set (second_part) then<br />
second_part = " " .. second_part<br />
end<br />
<br />
if is_set (third_part) then<br />
third_part = " " .. third_part<br />
end<br />
<br />
if is_set (fourth_part) then<br />
fourth_part = " " .. fourth_part<br />
end <br />
<br />
return first_part .. second_part .. third_part .. fourth_part<br />
end<br />
return p</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Gadget-recentChanges.css&diff=108
MediaWiki:Gadget-recentChanges.css
2022-08-04T21:04:45Z
<p>Forte: Removed min-height</p>
<hr />
<div>/* *****************<br />
Recent changes sidebar widget<br />
by: JaydenKieran<br />
***************** */<br />
<br />
@keyframes blink {<br />
50% {<br />
opacity: 0;<br />
}<br />
}<br />
<br />
#p-RecentChanges h3::after {<br />
content: '';<br />
position: relative;<br />
left: .5em;<br />
<br />
display: inline-block;<br />
background-color: #56b30a;<br />
width: 6px;<br />
height: 6px;<br />
border-radius: 100%;<br />
<br />
animation: blink 5s linear infinite;<br />
}<br />
<br />
.rc-sidebar-item {<br />
position: relative;<br />
font-size: 0.75em;<br />
margin: .5em .25em 0 .66em;<br />
}<br />
<br />
.rc-sidebar-item::before {<br />
position: absolute;<br />
left: -0.75em;<br />
top: .5em;<br />
<br />
/* content: ''; */<br />
background-color: #327ba7;<br />
width: 4px;<br />
height: 4px;<br />
border-radius: 100%;<br />
}<br />
<br />
.rc-sidebar-page {<br />
display: block;<br />
white-space: nowrap;<br />
text-overflow: ellipsis;<br />
overflow: hidden;<br />
max-width: max-content;<br />
}<br />
<br />
.rc-sidebar-user {<br />
color: #555;<br />
margin: 0;<br />
white-space: nowrap;<br />
text-overflow: ellipsis;<br />
overflow: hidden;<br />
}<br />
<br />
.rc-sidebar-user a {<br />
color: inherit;<br />
}<br />
<br />
#p-RecentChanges .rc-sidebar-more {<br />
text-align: right;<br />
}<br />
<br />
#p-RecentChanges .rc-sidebar-more .rc-sidebar-page {<br />
display:inline-block;<br />
}</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Gadget-recentChanges.css&diff=107
MediaWiki:Gadget-recentChanges.css
2022-08-04T21:03:19Z
<p>Forte: Added CSS for Recent Changes sidebar gadget for Russian</p>
<hr />
<div>/* *****************<br />
Recent changes sidebar widget<br />
by: JaydenKieran<br />
***************** */<br />
<br />
#p-RecentChanges {<br />
min-height: 11.3em;<br />
}<br />
<br />
@keyframes blink {<br />
50% {<br />
opacity: 0;<br />
}<br />
}<br />
<br />
#p-RecentChanges h3::after {<br />
content: '';<br />
position: relative;<br />
left: .5em;<br />
<br />
display: inline-block;<br />
background-color: #56b30a;<br />
width: 6px;<br />
height: 6px;<br />
border-radius: 100%;<br />
<br />
animation: blink 5s linear infinite;<br />
}<br />
<br />
.rc-sidebar-item {<br />
position: relative;<br />
font-size: 0.75em;<br />
margin: .5em .25em 0 .66em;<br />
}<br />
<br />
.rc-sidebar-item::before {<br />
position: absolute;<br />
left: -0.75em;<br />
top: .5em;<br />
<br />
/* content: ''; */<br />
background-color: #327ba7;<br />
width: 4px;<br />
height: 4px;<br />
border-radius: 100%;<br />
}<br />
<br />
.rc-sidebar-page {<br />
display: block;<br />
white-space: nowrap;<br />
text-overflow: ellipsis;<br />
overflow: hidden;<br />
max-width: max-content;<br />
}<br />
<br />
.rc-sidebar-user {<br />
color: #555;<br />
margin: 0;<br />
white-space: nowrap;<br />
text-overflow: ellipsis;<br />
overflow: hidden;<br />
}<br />
<br />
.rc-sidebar-user a {<br />
color: inherit;<br />
}<br />
<br />
#p-RecentChanges .rc-sidebar-more {<br />
text-align: right;<br />
}<br />
<br />
#p-RecentChanges .rc-sidebar-more .rc-sidebar-page {<br />
display:inline-block;<br />
}</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Gadget-recentChanges.js&diff=106
MediaWiki:Gadget-recentChanges.js
2022-08-04T21:02:43Z
<p>Forte: Added Recent Changes sidebar gadget JavaScript code for Russian</p>
<hr />
<div>//<nowiki><br />
/**<br />
* Adds a recent changes widget to the sidebar<br />
*<br />
* @author JaydenKieran<br />
*/<br />
'use strict';<br />
<br />
;<br />
(function($, mw) {<br />
var $prependTo<br />
var $rcContainer<br />
var recentChanges<br />
var $recentChangesDOM<br />
<br />
function init() {<br />
$prependTo = $('#p-Navigation')<br />
var api = new mw.Api()<br />
<br />
// Build our container<br />
$rcContainer = $('<nav>')<br />
.addClass('vector-menu vector-menu-portal portal')<br />
.attr('id', 'p-RecentChanges')<br />
.append(<br />
$('<h3>').text('Свежие правки')<br />
)<br />
<br />
// Add the container to the sidebar<br />
$prependTo.after($rcContainer)<br />
<br />
api.get({<br />
action: "query",<br />
list: "recentchanges",<br />
rcprop: "title|timestamp|sizes|user",<br />
rcnamespace: 0,<br />
rclimit: "5",<br />
rctype: "edit|new",<br />
rcshow: "!bot",<br />
rctoponly: 1,<br />
format: "json"<br />
})<br />
.done(function(data) {<br />
if (data.query && data.query.recentchanges) {<br />
recentChanges = data.query.recentchanges<br />
}<br />
<br />
if (recentChanges.length > 0) {<br />
var Time = 1;<br />
$recentChangesDOM = recentChanges.map(function(rc) {<br />
const timeMatch = rc.timestamp.match(/([0-9]+)-([0-9]+)-([0-9]+)T([0-9]+):([0-9]+):([0-9]+)Z/);<br />
var editYear = timeMatch[1];<br />
var editMonth = timeMatch[2];<br />
var editDay = timeMatch[3];<br />
var editHour = timeMatch[4];<br />
var editMinute = timeMatch[5];<br />
var editSecond = timeMatch[6];<br />
<br />
var editDate = new Date(editYear, (editMonth-1), editDay, editHour, editMinute, editSecond);<br />
var currentDate = new Date();<br />
currentDate = currentDate.getTime() + (currentDate.getTimezoneOffset() * 60000)<br />
var diffDate = currentDate - editDate;<br />
var diffDays = Math.floor(diffDate/(1000*60*60*24));<br />
var diffHours = Math.floor(diffDate/(1000*60*60));<br />
var diffMinutes = Math.floor(diffDate/(1000*60));<br />
var diffSeconds = Math.floor(diffDate/(1000));<br />
<br />
if (diffDays > 0) {<br />
Time = diffDays + 'd atrás – ';<br />
} else if (diffHours > 0) {<br />
Time = diffHours + 'h atrás – ';<br />
} else if (diffMinutes > 0) {<br />
Time = diffMinutes + 'm atrás – ';<br />
} else if (diffSeconds > 0) {<br />
Time = diffSeconds + 's atrás – ';<br />
} else {<br />
Time = 1 + Math.floor(Math.random() * 10) + 'm atrás – ';<br />
}<br />
<br />
return $('<div>').addClass('rc-sidebar-item').append(<br />
$('<a>')<br />
.addClass('rc-sidebar-page')<br />
.text(' ' + rc.title)<br />
.attr('href', new mw.Title(rc.title).getUrl()),<br />
$('<p>')<br />
.addClass('rc-sidebar-user')<br />
.text(Time)<br />
.append(<br />
$('<a>')<br />
.text(rc.user)<br />
.attr('href', new mw.Title(rc.user, 2).getUrl())<br />
)<br />
)<br />
})<br />
} else {<br />
$recentChangesDOM = $('<p>').text('Нет свежих правок.')<br />
}<br />
$rcContainer.append($recentChangesDOM)<br />
var $showMore<br />
$showMore = $('<div>')<br />
.addClass('rc-sidebar-item rc-sidebar-more')<br />
.append(<br />
$('<a>')<br />
.addClass('rc-sidebar-page')<br />
.text('Ver mais...')<br />
.attr('href', '/wiki/Служебная:Свежие правки')<br />
)<br />
$rcContainer.append($showMore)<br />
})<br />
.fail(function(_, data) {<br />
alert(data.error.info)<br />
});<br />
}<br />
<br />
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function() {<br />
$(init)<br />
})<br />
}(jQuery, mediaWiki));<br />
//</nowiki></div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Gadget-gadgetLinks.js&diff=105
MediaWiki:Gadget-gadgetLinks.js
2022-08-04T20:59:25Z
<p>Forte: Added gadget links (gives useful links in MediaWiki:Gadgets-definition)</p>
<hr />
<div>$(function() {<br />
function gadgetLink(page) {<br />
return '<a href="/wiki/MediaWiki:Gadget-'+page+'" title="MediaWiki:Gadget-'+page+'">'+page+'</a>';<br />
}<br />
$('.page-MediaWiki_Gadgets-definition #bodyContent ul li').not('#toc li').each(function() {<br />
var txt = this.innerHTML;<br />
var links = txt.replace(/([a-zA-Z0-9-]+)(\[[^\]]+\]\|)(.*)/, function(match, name, options, filelist) {<br />
var files = filelist.split('|');<br />
files = files.map(function(file) { return gadgetLink(file); });<br />
return gadgetLink(name) + options + files.join('|');<br />
});<br />
$(this).html(links);<br />
});<br />
});</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Vector.css&diff=46
MediaWiki:Vector.css
2022-08-03T21:31:38Z
<p>Forte: Imported CSS style from English ProleWiki</p>
<hr />
<div>/* Размещённый здесь CSS будет применяться к векторной теме оформления */<br />
/* All CSS here will be loaded for users of the Vector skin */<br />
.mw-body {<br />
border: 1px solid #c8ccd1;<br />
}<br />
<br />
.vector-menu-tabs a {<br />
background-image: linear-gradient(to bottom,rgba(167,215,249,0) 0,#c8ccd1 100%)<br />
}<br />
<br />
.vector-menu-tabs li {<br />
background-image: linear-gradient(to top,#c8ccd1 0,#eee 1px,#fff 100%);<br />
}<br />
<br />
.references {<br />
font-size:90%;<br />
}<br />
<br />
.vector-body blockquote {<br />
border-left: 3px solid #eee;<br />
padding: 8px 16px;<br />
font-size: 95%;<br />
}</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%BB%D0%B5%D0%92%D0%B8%D0%BA%D0%B8:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0/%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8&diff=45
ПролеВики:Заглавная страница/Новости
2022-08-03T21:30:48Z
<p>Forte: Added news on Russian ProleWiki</p>
<hr />
<div>* '''02 августа 2022 года'''<br />
<blockquote>Русская ПролеВики начала разработку.</blockquote></div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Sidebar&diff=44
MediaWiki:Sidebar
2022-08-03T17:56:19Z
<p>Forte: </p>
<hr />
<div><br />
* Navigation<br />
** mainpage|mainpage-description<br />
** recentchanges-url|recentchanges<br />
** Special:WantedPages|wantedpages<br />
** Special:AllPages|allpages<br />
** randompage-url|randompage<br />
** Special:ConfirmAccounts|Рекрутинг<br />
* Свежие правки<br />
* Содержание<br />
** ПролеВики:Статьи|Статьи<br />
** ПролеВики:Эссе|Эссе<br />
** ПролеВики:Библиотека|Библиотека<br />
** ПролеВики:Цитата|Цитата<br />
* About<br />
** ПролеВики:О нас|О ПролеВики<br />
** ПролеВики:Принципы|Принципы<br />
** ПролеВики:Как внести свой вклад|Внесите свой вклад в ПролеВики<br />
** ПролеВики:Пожертвование|Пожертвуйте на ПролеВики<br />
* Социальная сеть<br />
** https://lemmygrad.ml/c/prolewiki|Леммиград<br />
** https://twitter.com/prolewiki|Твиттер<br />
** https://www.reddit.com/r/prolewiki/|Reddit<br />
** https://www.facebook.com/groups/747910359442297|Группа Facebook<br />
** https://discord.gg/ZQTBNRU9v5|Сервер Discord<br />
** https://matrix.to/#/%23prolewiki:matrix.org|Пространство Matrix<br />
* SEARCH<br />
* TOOLBOX</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Sidebar&diff=43
MediaWiki:Sidebar
2022-08-03T17:54:18Z
<p>Forte: Adapted sidebar</p>
<hr />
<div><br />
* Navigation<br />
** mainpage|mainpage-description<br />
** recentchanges-url|recentchanges<br />
** Special:WantedPages|wantedpages<br />
** Special:AllPages|allpages<br />
** randompage-url|randompage<br />
** Special:ConfirmAccounts|Рекрутинг<br />
* Свежие правки<br />
* Содержание<br />
** ПролеВики:Статьи|Статьи<br />
** ПролеВики:Эссе|Эссе<br />
** ПролеВики:Библиотека|Библиотека<br />
** ПролеВики:Цитата|Цитата<br />
* About<br />
** ProleWiki:About|About ProleWiki<br />
** ProleWiki:Principles|Principles<br />
** ProleWiki:How to contribute|Внесите свой вклад в ПролеВики<br />
** ProleWiki:Пожертвование|Пожертвуйте на ПролеВики<br />
* Социальная сеть<br />
** https://lemmygrad.ml/c/prolewiki|Леммиград<br />
** https://twitter.com/prolewiki|Твиттер<br />
** https://www.reddit.com/r/prolewiki/|Reddit<br />
** https://www.facebook.com/groups/747910359442297|Группа Facebook<br />
** https://discord.gg/ZQTBNRU9v5|Сервер Discord<br />
** https://matrix.to/#/%23prolewiki:matrix.org|Пространство Matrix<br />
* SEARCH<br />
* TOOLBOX</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Sidebar&diff=42
MediaWiki:Sidebar
2022-08-03T17:41:20Z
<p>Forte: Новая страница: « * Navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** Special:WantedPages|wantedpages ** Special:AllPages|allpages ** randompage-url|randompage ** Special:ConfirmAccounts|accrequest * Recent changes * Content ** ProleWiki:Articles|Articles ** ProleWiki:Essays|Essays ** ProleWiki:Library|Library ** ProleWiki:Quote|Quotes * About ** ProleWiki:About|About ProleWiki ** ProleWiki:Principles|Principles ** ProleWiki:How to contribute|...»</p>
<hr />
<div><br />
* Navigation<br />
** mainpage|mainpage-description<br />
** recentchanges-url|recentchanges<br />
** Special:WantedPages|wantedpages<br />
** Special:AllPages|allpages<br />
** randompage-url|randompage<br />
** Special:ConfirmAccounts|accrequest<br />
* Recent changes<br />
* Content<br />
** ProleWiki:Articles|Articles<br />
** ProleWiki:Essays|Essays<br />
** ProleWiki:Library|Library<br />
** ProleWiki:Quote|Quotes<br />
* About<br />
** ProleWiki:About|About ProleWiki<br />
** ProleWiki:Principles|Principles<br />
** ProleWiki:How to contribute|Contribute to ProleWiki<br />
** ProleWiki:Donate|proledonate<br />
* Social<br />
** https://lemmygrad.ml/c/prolewiki|Lemmygrad<br />
** https://twitter.com/prolewiki|Twitter<br />
** https://www.reddit.com/r/prolewiki/|Reddit<br />
** https://www.facebook.com/groups/747910359442297|Facebook group<br />
** https://discord.gg/ZQTBNRU9v5|Discord server<br />
** https://matrix.to/#/%23prolewiki:matrix.org|Matrix space<br />
* SEARCH<br />
* TOOLBOX<br />
** https://shared.prolewiki.org/wiki/Special:ListFiles|List of uploaded files<br />
* LANGUAGES</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Group-comrade-member&diff=41
MediaWiki:Group-comrade-member
2022-08-03T17:33:00Z
<p>Forte: Новая страница: «товарищ»</p>
<hr />
<div>товарищ</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%BB%D0%B5%D0%92%D0%B8%D0%BA%D0%B8:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0/styles.css&diff=40
ПролеВики:Заглавная страница/styles.css
2022-08-03T17:25:38Z
<p>Forte: Replaced Russian language main page banner</p>
<hr />
<div>.mainpage-body {<br />
margin:auto;<br />
}<br />
<br />
#mainpage-banner span<br />
{<br />
display: inline-block;<br />
width: 100%;<br />
content: url(https://shared.prolewiki.org/uploads/3/36/Mainpageheader_ru.png);<br />
border-radius:12px;<br />
<br />
}<br />
.mainpage-banner-overlay {<br />
position: absolute;<br />
top: 65px;<br />
width: 100%;<br />
}<br />
<br />
.mainpage-header {<br />
display: flex;<br />
margin: 2em 5em;<br />
align-items:baseline;<br />
}<br />
<br />
.header-intro {<br />
flex: 2;<br />
}<br />
<br />
.header-intro h1 {<br />
font-size: 2.5em;<br />
border: none;<br />
margin: 0 0 .15em;<br />
}<br />
<br />
.header-intro p {<br />
font-size: 1.1em;<br />
line-height: 1.7em;<br />
}<br />
<br />
.header-stats {<br />
display: flex;<br />
align-items: center;<br />
margin:auto;<br />
}<br />
.header-stats ul {<br />
list-style: none;<br />
}<br />
<br />
@media screen and (max-width: 800px) {<br />
.mainpage-header {<br />
flex-direction: column;<br />
margin:2em;<br />
}<br />
}<br />
<br />
.mainpage-frame {<br />
box-shadow: 0 0 .3em #999;<br />
border-radius: 1em;<br />
width:100%;<br />
}<br />
.mainpage-frame:after {<br />
display: block;<br />
content: "";<br />
clear: both;<br />
}<br />
.separator {<br />
width:5%;<br />
margin:1em auto;<br />
}<br />
.frame-header {<br />
background-color:#b50014;<br />
border-radius: 1em 1em 0.25em 0.25em;<br />
color: #fff;<br />
padding: .4em .8em .5em;<br />
font-weight: bold;<br />
}<br />
.frame-header:before {<br />
display: inline-block;<br />
/* Add some content in order to get normal line height, then make it transparent */<br />
content: "x";<br />
color: transparent;<br />
width: 40px;<br />
opacity: .7;<br />
/*[[File:Hamsickwhite.svg]]*/<br />
background-image: url(https://shared.prolewiki.org/uploads/3/3d/Hamsickwhite.svg);<br />
background-size: contain;<br />
background-repeat: no-repeat;<br />
background-position: left center;<br />
}<br />
.frame-body {<br />
padding: 1em;<br />
}</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Mainpage&diff=39
MediaWiki:Mainpage
2022-08-03T16:47:33Z
<p>Forte: Новая страница: «ПролеВики:Заглавная_страница»</p>
<hr />
<div>ПролеВики:Заглавная_страница</div>
Forte
https://ru.prolewiki.org/index.php?title=MediaWiki:Common.css&diff=38
MediaWiki:Common.css
2022-08-03T16:40:44Z
<p>Forte: Added CSS to remove namespace and name for the main page</p>
<hr />
<div>/* Размещённый здесь CSS будет применяться ко всем темам оформления */<br />
<br />
<br />
.page-ПролеВики_Заглавная_страница .firstHeading, <br />
.page-ПролеВики_Заглавная_страница #siteSub { <br />
display: none; <br />
}</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%9F%D1%80%D0%BE%D0%BB%D0%B5%D0%92%D0%B8%D0%BA%D0%B8:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=37
ПролеВики:Заглавная страница
2022-08-03T16:38:33Z
<p>Forte: </p>
<hr />
<div><templatestyles src="ПролеВики:Заглавная_страница/styles.css"/><br />
{{ПролеВики:Заглавная страница/Содержимое}}<br />
{{#seo:<br />
|type = website<br />
|title = ПролеВики<br />
|keywords = вики,марксизм-ленинизм,энциклопедия,пролетарий,пролетариат,политика,революция,ленин,сталин,ссср,кпсс,мао цзэдун,хо ши мин,ким ир сен,фидель кастро,че гевара<br />
|description = ПролеВики: Марксистско-ленинская пролетарская энциклопедия, построенная совместным трудом<br />
|site_name = ПролеВики<br />
|locale = ru<br />
|image = Prolewiki-logo-v4.2.png<br />
}}</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=36
Заглавная страница
2022-08-03T16:36:19Z
<p>Forte: Перенаправление изменено с ProleWiki:Заглавная страница на ПролеВики:Заглавная страница</p>
<hr />
<div>#REDIRECT [[ПролеВики:Заглавная страница]]</div>
Forte
https://ru.prolewiki.org/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=35
Заглавная страница
2022-08-03T16:14:50Z
<p>Forte: Перенаправление на ProleWiki:Заглавная страница</p>
<hr />
<div>#REDIRECT [[ProleWiki:Заглавная страница]]</div>
Forte