diff --git a/boards/locale/ru/LC_MESSAGES/django.mo b/boards/locale/ru/LC_MESSAGES/django.mo index 23760b7bfab87a0782a339e5bbeb7ac363d700c2..852413174f969212b45ce47dad09a911f8b7cfd9 GIT binary patch literal 11195 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 diff --git a/boards/locale/ru/LC_MESSAGES/django.po b/boards/locale/ru/LC_MESSAGES/django.po --- a/boards/locale/ru/LC_MESSAGES/django.po +++ b/boards/locale/ru/LC_MESSAGES/django.po @@ -578,3 +578,6 @@ msgstr[2] "Вы можете отправить не более %(files)d файлов." msgid "Max file number is %(max_files)s." msgstr "Максимальное количество файлов %(max_files)s." +msgid "Moderation" +msgstr "Модерация" + diff --git a/boards/static/css/3party/font/context-menu-icons.eot b/boards/static/css/3party/font/context-menu-icons.eot new file mode 100644 index 0000000000000000000000000000000000000000..1fda2aba5355432eba5e82bd783a8e0a85f9ab3e GIT binary patch literal 3528 zc%0=|eQaA-6+h>F+fEZFvENIZ#CdV@?3UCY^=CiUrZidFY+17PZmFqYk!?C@@ zDa{5`p!?LSZc6tDnh+AuYMUYu327ivqXvXvfJnNo&&hOlF?!D)pci#2oO#pwd0YKn@JsgO<$q@1?vVP!U*zlm;S1#TVHtGO6 zAqzz)KpApyif9O?h%3M>ag(-ghQ`&x5aHv5=OF{rgs3n=$TVpu%~3k+fG|Y=2cP!h zTrdwjL=O%>dO$y8%n`Vg&?AGxk=Xv?;BQDiL-I&=DpPt{S^f*{S|RL{@%-G_Th-@3 z1mOP+AbBQonbDfvS7jReTWYBZ0^|?*%fx@c7Bw+dKBdFT7i9Z8Cg+RUjP!l^4`hFx zWY1LQR0+4hS<*L=tQRsUg})VxOeEL%Ijw6X*skk^%} zz^#RP^>LU8HQ~m^%JI7U{su1V2(G^Jv!AZ^WVjD~cJ9$7wJ7*Cn346sxU#A>1afEtBR2=6|~d;R)ORaYE6= zc@_b}1vAOm4hXL(D-@FoGHUM2dO3LFMB16m_Kecq*ZqI>)R?qnOA3pb)yybzR%4k~ z;jP9_qas+1#kC?@jh$3QvKq^siflEOs};p+W~Q+x24`>tf5jc*zRCTPcUou4pX0v) z9W=4mBXwECAJ~f>j3iQfFv&T1ak!7>imBdukJQo5CLxlnPo%nWA6gTo;&m8DIj*IX9p-xK+i4M4Zwvg# z%=@kDnqDPNbKh{MHCjW^-@mw6J-4`6dgmHVj)um?uIuVD_j?-L&rHti8qRBJG9a_} zwWk*G`NfakS*FES&n;-_YA?4yeyR%~v${l8AWV^a5FVpKI}K06x6O5XB!3{0(nM9N zL&+aBWJy-#T9l;@e=v~Vhv`&2rqO1Cfgppz#H38jhngzK+R#W5@u4iH0>MCsUzSu& zjmP+XXiBxnq(&{7AQv*t(S{fly>c6hX*L&U)T(N$s{RE1Zn3^!X;7-O-2$iZ!p_LR z(BT~kS=bpK7>))-xvx(agVEuE@J@l(Hb)1C1|q~MoY0LglU;wk=)U#XmX=6jSC?va z&5@QZYS*rW)xDl>R6<^X7oJYz`TlDEF-HsD?63YhhY~KaHMFY6XRd7yLl8d=aM;qk z{SjX@6z%I8@~F_Ko zD(RF_?KDzprhI#=64EYdA!X~^iu1>~z_4n8dH4@J*L^@jlpduCZhaQLzbC@!=4{8k zKA-ov3s(34FWSFE5!glFnnRS2>7eY5doe({sCHwj(Yv~(L@M6Sa*h;~SM62^2ujgL zX`sq$*pWmzm}c3idhnk;M-Qa1#o@f{Y;;_98kydz(VNNi;PBlqdj^Wzeg?{jpU~KZr*axo2eBV$pbH>0+x$I zvS>J*_&W1|$>fEE+kMm>GHc(;C;T%17POP#spb4(E}5Wr%3Di?$;ZX^kr)UjeH_0$ z`0S-Cm!2IgE}eYljXjwcUwbjL=Z$AhE){VpM=)t~PhEYf;q>M!ryn2{jd|i2=^zt zz=7dm#U?^khDd;w21eM?+2>bBWrH7fKSW3I=9@$wa&GW=)2E6j!_ zNtzkTjnC#Y(|0QFL`HJcGn2)Fz9SsHQ+Y5~$W3R;xl#SZoIZ1MJXS7`>0{HyDZP)4 z&F71HX}b7CE?W*yl*^^vk;s^hhqJ}0d%B9>ezm_Bi+dS!_rC}CVtLTSn03Y+IZDqlHfNu* z?m%`9-TiSOhdc@>(pO1F1s&)FJ~KKhWQ(OaK08~MMsxXGIVa>sC(Clam>HccjEkkr N3_(xMPL|2VzX4lNPz3-0 diff --git a/boards/static/css/3party/font/context-menu-icons.ttf b/boards/static/css/3party/font/context-menu-icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0c305fc428b9efa2775ded926f064a948720749d GIT binary patch literal 3320 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 diff --git a/boards/static/css/3party/jquery.contextMenu.min.css b/boards/static/css/3party/jquery.contextMenu.min.css new file mode 100644 --- /dev/null +++ b/boards/static/css/3party/jquery.contextMenu.min.css @@ -0,0 +1,16 @@ +@charset "UTF-8";/*! + * jQuery contextMenu - Plugin for simple contextMenu handling + * + * Version: v2.4.2 + * + * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF) + * Web: http://swisnl.github.io/jQuery-contextMenu/ + * + * Copyright (c) 2011-2017 SWIS BV and contributors + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * + * Date: 2017-01-02T09:03:00.383Z + */@-webkit-keyframes cm-spin{0%{-webkit-transform:translateY(-50%) rotate(0);transform:translateY(-50%) rotate(0)}100%{-webkit-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@-o-keyframes cm-spin{0%{-webkit-transform:translateY(-50%) rotate(0);-o-transform:translateY(-50%) rotate(0);transform:translateY(-50%) rotate(0)}100%{-webkit-transform:translateY(-50%) rotate(359deg);-o-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}@keyframes cm-spin{0%{-webkit-transform:translateY(-50%) rotate(0);-o-transform:translateY(-50%) rotate(0);transform:translateY(-50%) rotate(0)}100%{-webkit-transform:translateY(-50%) rotate(359deg);-o-transform:translateY(-50%) rotate(359deg);transform:translateY(-50%) rotate(359deg)}}.context-menu-icon.context-menu-icon--fa::before,.context-menu-icon::before{left:0;width:2em;font-size:1em;font-style:normal;font-weight:400;line-height:1;text-align:center;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%}@font-face{font-family:context-menu-icons;font-style:normal;font-weight:400;src:url(font/context-menu-icons.eot?3lfph);src:url(font/context-menu-icons.eot?3lfph#iefix) format("embedded-opentype"),url(font/context-menu-icons.woff2?3lfph) format("woff2"),url(font/context-menu-icons.woff?3lfph) format("woff"),url(font/context-menu-icons.ttf?3lfph) format("truetype")}.context-menu-icon-add:before{content:"\EA01"}.context-menu-icon-copy:before{content:"\EA02"}.context-menu-icon-cut:before{content:"\EA03"}.context-menu-icon-delete:before{content:"\EA04"}.context-menu-icon-edit:before{content:"\EA05"}.context-menu-icon-loading:before{content:"\EA06"}.context-menu-icon-paste:before{content:"\EA07"}.context-menu-icon-quit:before{content:"\EA08"}.context-menu-icon::before{font-family:context-menu-icons;color:#2980b9;transform:translateY(-50%)}.context-menu-icon.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-disabled::before{color:#bbb}.context-menu-icon.context-menu-icon-loading:before{-webkit-animation:cm-spin 2s infinite;-o-animation:cm-spin 2s infinite;animation:cm-spin 2s infinite}.context-menu-icon.context-menu-icon--fa{display:list-item;font-family:inherit}.context-menu-icon.context-menu-icon--fa::before{font-family:FontAwesome;color:#2980b9;transform:translateY(-50%)}.context-menu-icon.context-menu-icon--fa.context-menu-hover:before{color:#fff}.context-menu-icon.context-menu-icon--fa.context-menu-disabled::before{color:#bbb}.context-menu-list{position:absolute;display:inline-block;min-width:13em;max-width:26em;padding:.25em 0;margin:.3em;font-family:inherit;font-size:inherit;list-style-type:none;background:#fff;border:1px solid #bebebe;border-radius:.2em;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.5);box-shadow:0 2px 5px rgba(0,0,0,.5)}.context-menu-item{position:relative;padding:.2em 2em;color:#2f2f2f;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.context-menu-separator{padding:0;margin:.35em 0;border-bottom:1px solid #e6e6e6}.context-menu-item>label>input,.context-menu-item>label>textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.context-menu-item.context-menu-hover{color:#fff;cursor:pointer;background-color:#2980b9}.context-menu-item.context-menu-disabled{color:#bbb;cursor:default;background-color:#fff}.context-menu-input.context-menu-hover{color:#2f2f2f;cursor:default}.context-menu-submenu:after{position:absolute;top:50%;right:.5em;z-index:1;width:0;height:0;content:'';border-color:transparent transparent transparent #2f2f2f;border-style:solid;border-width:.25em 0 .25em .25em;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.context-menu-item.context-menu-input{padding:.3em .6em}.context-menu-input>label>*{vertical-align:top}.context-menu-input>label>input[type=checkbox],.context-menu-input>label>input[type=radio]{position:relative;top:.12em;margin-right:.4em}.context-menu-input>label{margin:0}.context-menu-input>label,.context-menu-input>label>input[type=text],.context-menu-input>label>select,.context-menu-input>label>textarea{display:block;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.context-menu-input>label>textarea{height:7em}.context-menu-item>.context-menu-list{top:.3em;right:-.3em;display:none}.context-menu-item.context-menu-visible>.context-menu-list{display:block}.context-menu-accesskey{text-decoration:underline} +/*# sourceMappingURL=jquery.contextMenu.min.css.map */ diff --git a/boards/static/js/3party/jquery.contextMenu.min.js b/boards/static/js/3party/jquery.contextMenu.min.js new file mode 100755 --- /dev/null +++ b/boards/static/js/3party/jquery.contextMenu.min.js @@ -0,0 +1,18 @@ +/*! + * jQuery contextMenu v2.4.2 - Plugin for simple contextMenu handling + * + * Version: v2.4.2 + * + * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF) + * Web: http://swisnl.github.io/jQuery-contextMenu/ + * + * Copyright (c) 2011-2017 SWIS BV and contributors + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * GPL v3 http://opensource.org/licenses/GPL-3.0 + * + * Date: 2017-01-02T09:03:00.678Z + */ +!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e("object"==typeof exports?require("jquery"):jQuery)}(function(e){"use strict";function t(e){for(var t,n=e.split(/\s+/),a=[],o=0;t=n[o];o++)t=t.charAt(0).toUpperCase(),a.push(t);return a}function n(t){return t.id&&e('label[for="'+t.id+'"]').val()||t.name}function a(t,o,s){return s||(s=0),o.each(function(){var o,i,c=e(this),r=this,l=this.nodeName.toLowerCase();switch("label"===l&&c.find("input, textarea, select").length&&(o=c.text(),c=c.children().first(),r=c.get(0),l=r.nodeName.toLowerCase()),l){case"menu":i={name:c.attr("label"),items:{}},s=a(i.items,c.children(),s);break;case"a":case"button":i={name:c.text(),disabled:!!c.attr("disabled"),callback:function(){return function(){c.click()}}()};break;case"menuitem":case"command":switch(c.attr("type")){case void 0:case"command":case"menuitem":i={name:c.attr("label"),disabled:!!c.attr("disabled"),icon:c.attr("icon"),callback:function(){return function(){c.click()}}()};break;case"checkbox":i={type:"checkbox",disabled:!!c.attr("disabled"),name:c.attr("label"),selected:!!c.attr("checked")};break;case"radio":i={type:"radio",disabled:!!c.attr("disabled"),name:c.attr("label"),radio:c.attr("radiogroup"),value:c.attr("id"),selected:!!c.attr("checked")};break;default:i=void 0}break;case"hr":i="-------";break;case"input":switch(c.attr("type")){case"text":i={type:"text",name:o||n(r),disabled:!!c.attr("disabled"),value:c.val()};break;case"checkbox":i={type:"checkbox",name:o||n(r),disabled:!!c.attr("disabled"),selected:!!c.attr("checked")};break;case"radio":i={type:"radio",name:o||n(r),disabled:!!c.attr("disabled"),radio:!!c.attr("name"),value:c.val(),selected:!!c.attr("checked")};break;default:i=void 0}break;case"select":i={type:"select",name:o||n(r),disabled:!!c.attr("disabled"),selected:c.val(),options:{}},c.children().each(function(){i.options[this.value]=e(this).text()});break;case"textarea":i={type:"textarea",name:o||n(r),disabled:!!c.attr("disabled"),value:c.val()};break;case"label":break;default:i={type:"html",html:c.clone(!0)}}i&&(s++,t["key"+s]=i)}),s}e.support.htmlMenuitem="HTMLMenuItemElement"in window,e.support.htmlCommand="HTMLCommandElement"in window,e.support.eventSelectstart="onselectstart"in document.documentElement,e.ui&&e.widget||(e.cleanData=function(t){return function(n){var a,o,s;for(s=0;null!=n[s];s++){o=n[s];try{a=e._data(o,"events"),a&&a.remove&&e(o).triggerHandler("remove")}catch(e){}}t(n)}}(e.cleanData));var o=null,s=!1,i=e(window),c=0,r={},l={},u={},d={selector:null,appendTo:null,trigger:"right",autoHide:!1,delay:200,reposition:!0,selectableSubMenu:!1,classNames:{hover:"context-menu-hover",disabled:"context-menu-disabled",visible:"context-menu-visible",notSelectable:"context-menu-not-selectable",icon:"context-menu-icon",iconEdit:"context-menu-icon-edit",iconCut:"context-menu-icon-cut",iconCopy:"context-menu-icon-copy",iconPaste:"context-menu-icon-paste",iconDelete:"context-menu-icon-delete",iconAdd:"context-menu-icon-add",iconQuit:"context-menu-icon-quit",iconLoadingClass:"context-menu-icon-loading"},determinePosition:function(t){if(e.ui&&e.ui.position)t.css("display","block").position({my:"center top",at:"center bottom",of:this,offset:"0 5",collision:"fit"}).css("display","none");else{var n=this.offset();n.top+=this.outerHeight(),n.left+=this.outerWidth()/2-t.outerWidth()/2,t.css(n)}},position:function(e,t,n){var a;if(!t&&!n)return void e.determinePosition.call(this,e.$menu);a="maintain"===t&&"maintain"===n?e.$menu.position():{top:n,left:t};var o=i.scrollTop()+i.height(),s=i.scrollLeft()+i.width(),c=e.$menu.outerHeight(),r=e.$menu.outerWidth();a.top+c>o&&(a.top-=c),a.top<0&&(a.top=0),a.left+r>s&&(a.left-=r),a.left<0&&(a.left=0),e.$menu.css(a)},positionSubmenu:function(t){if(void 0!==t)if(e.ui&&e.ui.position)t.css("display","block").position({my:"left top-5",at:"right top",of:this,collision:"flipfit fit"}).css("display","");else{var n={top:-9,left:this.outerWidth()-5};t.css(n)}},zIndex:1,animation:{duration:50,show:"slideDown",hide:"slideUp"},events:{show:e.noop,hide:e.noop},callback:null,items:{}},m={timer:null,pageX:null,pageY:null},p=function(e){for(var t=0,n=e;;)if(t=Math.max(t,parseInt(n.css("z-index"),10)||0),n=n.parent(),!n||!n.length||"html body".indexOf(n.prop("nodeName").toLowerCase())>-1)break;return t},f={abortevent:function(e){e.preventDefault(),e.stopImmediatePropagation()},contextmenu:function(t){var n=e(this);if("right"===t.data.trigger&&(t.preventDefault(),t.stopImmediatePropagation()),!("right"!==t.data.trigger&&"demand"!==t.data.trigger&&t.originalEvent||!(void 0===t.mouseButton||!t.data||"left"===t.data.trigger&&0===t.mouseButton||"right"===t.data.trigger&&2===t.mouseButton)||n.hasClass("context-menu-active")||n.hasClass("context-menu-disabled"))){if(o=n,t.data.build){var a=t.data.build(o,t);if(a===!1)return;if(t.data=e.extend(!0,{},d,t.data,a||{}),!t.data.items||e.isEmptyObject(t.data.items))throw window.console&&(console.error||console.log).call(console,"No items specified to show in contextMenu"),new Error("No Items specified");t.data.$trigger=o,h.create(t.data)}var s=!1;for(var i in t.data.items)if(t.data.items.hasOwnProperty(i)){var c;c=e.isFunction(t.data.items[i].visible)?t.data.items[i].visible.call(e(t.currentTarget),i,t.data):"undefined"==typeof t.data.items[i]||!t.data.items[i].visible||t.data.items[i].visible===!0,c&&(s=!0)}s&&h.show.call(n,t.data,t.pageX,t.pageY)}},click:function(t){t.preventDefault(),t.stopImmediatePropagation(),e(this).trigger(e.Event("contextmenu",{data:t.data,pageX:t.pageX,pageY:t.pageY}))},mousedown:function(t){var n=e(this);o&&o.length&&!o.is(n)&&o.data("contextMenu").$menu.trigger("contextmenu:hide"),2===t.button&&(o=n.data("contextMenuActive",!0))},mouseup:function(t){var n=e(this);n.data("contextMenuActive")&&o&&o.length&&o.is(n)&&!n.hasClass("context-menu-disabled")&&(t.preventDefault(),t.stopImmediatePropagation(),o=n,n.trigger(e.Event("contextmenu",{data:t.data,pageX:t.pageX,pageY:t.pageY}))),n.removeData("contextMenuActive")},mouseenter:function(t){var n=e(this),a=e(t.relatedTarget),s=e(document);a.is(".context-menu-list")||a.closest(".context-menu-list").length||o&&o.length||(m.pageX=t.pageX,m.pageY=t.pageY,m.data=t.data,s.on("mousemove.contextMenuShow",f.mousemove),m.timer=setTimeout(function(){m.timer=null,s.off("mousemove.contextMenuShow"),o=n,n.trigger(e.Event("contextmenu",{data:m.data,pageX:m.pageX,pageY:m.pageY}))},t.data.delay))},mousemove:function(e){m.pageX=e.pageX,m.pageY=e.pageY},mouseleave:function(t){var n=e(t.relatedTarget);if(!n.is(".context-menu-list")&&!n.closest(".context-menu-list").length){try{clearTimeout(m.timer)}catch(e){}m.timer=null}},layerClick:function(t){var n,a,o=e(this),s=o.data("contextMenuRoot"),c=t.button,r=t.pageX,l=t.pageY;t.preventDefault(),t.stopImmediatePropagation(),setTimeout(function(){var o,u="left"===s.trigger&&0===c||"right"===s.trigger&&2===c;if(document.elementFromPoint&&s.$layer){if(s.$layer.hide(),n=document.elementFromPoint(r-i.scrollLeft(),l-i.scrollTop()),n.isContentEditable){var d=document.createRange(),m=window.getSelection();d.selectNode(n),d.collapse(!0),m.removeAllRanges(),m.addRange(d)}s.$layer.show()}if(s.reposition&&u)if(document.elementFromPoint){if(s.$trigger.is(n)||s.$trigger.has(n).length)return void s.position.call(s.$trigger,s,r,l)}else if(a=s.$trigger.offset(),o=e(window),a.top+=o.scrollTop(),a.top<=t.pageY&&(a.left+=o.scrollLeft(),a.left<=t.pageX&&(a.bottom=a.top+s.$trigger.outerHeight(),a.bottom>=t.pageY&&(a.right=a.left+s.$trigger.outerWidth(),a.right>=t.pageX))))return void s.position.call(s.$trigger,s,r,l);n&&u&&s.$trigger.one("contextmenu:hidden",function(){e(n).contextMenu({x:r,y:l,button:c})}),null!=s&&null!=s.$menu&&s.$menu.trigger("contextmenu:hide")},50)},keyStop:function(e,t){t.isInput||e.preventDefault(),e.stopPropagation()},key:function(e){var t={};o&&(t=o.data("contextMenu")||{}),void 0===t.zIndex&&(t.zIndex=0);var n=0,a=function(e){""!==e.style.zIndex?n=e.style.zIndex:null!==e.offsetParent&&void 0!==e.offsetParent?a(e.offsetParent):null!==e.parentElement&&void 0!==e.parentElement&&a(e.parentElement)};if(a(e.target),!(n>t.zIndex)){switch(e.keyCode){case 9:case 38:if(f.keyStop(e,t),t.isInput){if(9===e.keyCode&&e.shiftKey)return e.preventDefault(),t.$selected&&t.$selected.find("input, textarea, select").blur(),void(null!=t.$menu&&t.$menu.trigger("prevcommand"));if(38===e.keyCode&&"checkbox"===t.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault()}else if(9!==e.keyCode||e.shiftKey)return void(null!=t.$menu&&t.$menu.trigger("prevcommand"));break;case 40:if(f.keyStop(e,t),!t.isInput)return void(null!=t.$menu&&t.$menu.trigger("nextcommand"));if(9===e.keyCode)return e.preventDefault(),t.$selected&&t.$selected.find("input, textarea, select").blur(),void(null!=t.$menu&&t.$menu.trigger("nextcommand"));if(40===e.keyCode&&"checkbox"===t.$selected.find("input, textarea, select").prop("type"))return void e.preventDefault();break;case 37:if(f.keyStop(e,t),t.isInput||!t.$selected||!t.$selected.length)break;if(!t.$selected.parent().hasClass("context-menu-root")){var s=t.$selected.parent().parent();return t.$selected.trigger("contextmenu:blur"),void(t.$selected=s)}break;case 39:if(f.keyStop(e,t),t.isInput||!t.$selected||!t.$selected.length)break;var i=t.$selected.data("contextMenu")||{};if(i.$menu&&t.$selected.hasClass("context-menu-submenu"))return t.$selected=null,i.$selected=null,void i.$menu.trigger("nextcommand");break;case 35:case 36:return t.$selected&&t.$selected.find("input, textarea, select").length?void 0:((t.$selected&&t.$selected.parent()||t.$menu).children(":not(."+t.classNames.disabled+", ."+t.classNames.notSelectable+")")[36===e.keyCode?"first":"last"]().trigger("contextmenu:focus"),void e.preventDefault());case 13:if(f.keyStop(e,t),t.isInput){if(t.$selected&&!t.$selected.is("textarea, select"))return void e.preventDefault();break}return void("undefined"!=typeof t.$selected&&null!==t.$selected&&t.$selected.trigger("mouseup"));case 32:case 33:case 34:return void f.keyStop(e,t);case 27:return f.keyStop(e,t),void(null!=t.$menu&&t.$menu.trigger("contextmenu:hide"));default:var c=String.fromCharCode(e.keyCode).toUpperCase();if(t.accesskeys&&t.accesskeys[c])return void t.accesskeys[c].$node.trigger(t.accesskeys[c].$menu?"contextmenu:focus":"mouseup")}e.stopPropagation(),"undefined"!=typeof t.$selected&&null!==t.$selected&&t.$selected.trigger(e)}},prevItem:function(t){t.stopPropagation();var n=e(this).data("contextMenu")||{},a=e(this).data("contextMenuRoot")||{};if(n.$selected){var o=n.$selected;n=n.$selected.parent().data("contextMenu")||{},n.$selected=o}for(var s=n.$menu.children(),i=n.$selected&&n.$selected.prev().length?n.$selected.prev():s.last(),c=i;i.hasClass(a.classNames.disabled)||i.hasClass(a.classNames.notSelectable)||i.is(":hidden");)if(i=i.prev().length?i.prev():s.last(),i.is(c))return;n.$selected&&f.itemMouseleave.call(n.$selected.get(0),t),f.itemMouseenter.call(i.get(0),t);var r=i.find("input, textarea, select");r.length&&r.focus()},nextItem:function(t){t.stopPropagation();var n=e(this).data("contextMenu")||{},a=e(this).data("contextMenuRoot")||{};if(n.$selected){var o=n.$selected;n=n.$selected.parent().data("contextMenu")||{},n.$selected=o}for(var s=n.$menu.children(),i=n.$selected&&n.$selected.next().length?n.$selected.next():s.first(),c=i;i.hasClass(a.classNames.disabled)||i.hasClass(a.classNames.notSelectable)||i.is(":hidden");)if(i=i.next().length?i.next():s.first(),i.is(c))return;n.$selected&&f.itemMouseleave.call(n.$selected.get(0),t),f.itemMouseenter.call(i.get(0),t);var r=i.find("input, textarea, select");r.length&&r.focus()},focusInput:function(){var t=e(this).closest(".context-menu-item"),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.$selected=a.$selected=t,o.isInput=a.isInput=!0},blurInput:function(){var t=e(this).closest(".context-menu-item"),n=t.data(),a=n.contextMenu,o=n.contextMenuRoot;o.isInput=a.isInput=!1},menuMouseenter:function(){var t=e(this).data().contextMenuRoot;t.hovering=!0},menuMouseleave:function(t){var n=e(this).data().contextMenuRoot;n.$layer&&n.$layer.is(t.relatedTarget)&&(n.hovering=!1)},itemMouseenter:function(t){var n=e(this),a=n.data(),o=a.contextMenu,s=a.contextMenuRoot;return s.hovering=!0,t&&s.$layer&&s.$layer.is(t.relatedTarget)&&(t.preventDefault(),t.stopImmediatePropagation()),(o.$menu?o:s).$menu.children("."+s.classNames.hover).trigger("contextmenu:blur").children(".hover").trigger("contextmenu:blur"),n.hasClass(s.classNames.disabled)||n.hasClass(s.classNames.notSelectable)?void(o.$selected=null):void n.trigger("contextmenu:focus")},itemMouseleave:function(t){var n=e(this),a=n.data(),o=a.contextMenu,s=a.contextMenuRoot;return s!==o&&s.$layer&&s.$layer.is(t.relatedTarget)?("undefined"!=typeof s.$selected&&null!==s.$selected&&s.$selected.trigger("contextmenu:blur"),t.preventDefault(),t.stopImmediatePropagation(),void(s.$selected=o.$selected=o.$node)):void n.trigger("contextmenu:blur")},itemClick:function(t){var n,a=e(this),o=a.data(),s=o.contextMenu,i=o.contextMenuRoot,c=o.contextMenuKey;if(!(!s.items[c]||a.is("."+i.classNames.disabled+", .context-menu-separator, ."+i.classNames.notSelectable)||a.is(".context-menu-submenu")&&i.selectableSubMenu===!1)){if(t.preventDefault(),t.stopImmediatePropagation(),e.isFunction(s.callbacks[c])&&Object.prototype.hasOwnProperty.call(s.callbacks,c))n=s.callbacks[c];else{if(!e.isFunction(i.callback))return;n=i.callback}n.call(i.$trigger,c,i)!==!1?i.$menu.trigger("contextmenu:hide"):i.$menu.parent().length&&h.update.call(i.$trigger,i)}},inputClick:function(e){e.stopImmediatePropagation()},hideMenu:function(t,n){var a=e(this).data("contextMenuRoot");h.hide.call(a.$trigger,a,n&&n.force)},focusItem:function(t){t.stopPropagation();var n=e(this),a=n.data(),o=a.contextMenu,s=a.contextMenuRoot;n.hasClass(s.classNames.disabled)||n.hasClass(s.classNames.notSelectable)||(n.addClass([s.classNames.hover,s.classNames.visible].join(" ")).parent().find(".context-menu-item").not(n).removeClass(s.classNames.visible).filter("."+s.classNames.hover).trigger("contextmenu:blur"),o.$selected=s.$selected=n,o.$node&&s.positionSubmenu.call(o.$node,o.$menu))},blurItem:function(t){t.stopPropagation();var n=e(this),a=n.data(),o=a.contextMenu,s=a.contextMenuRoot;o.autoHide&&n.removeClass(s.classNames.visible),n.removeClass(s.classNames.hover),o.$selected=null}},h={show:function(t,n,a){var s=e(this),i={};if(e("#context-menu-layer").trigger("mousedown"),t.$trigger=s,t.events.show.call(s,t)===!1)return void(o=null);if(h.update.call(s,t),t.position.call(s,t,n,a),t.zIndex){var c=t.zIndex;"function"==typeof t.zIndex&&(c=t.zIndex.call(s,t)),i.zIndex=p(s)+c}h.layer.call(t.$menu,t,i.zIndex),t.$menu.find("ul").css("zIndex",i.zIndex+1),t.$menu.css(i)[t.animation.show](t.animation.duration,function(){s.trigger("contextmenu:visible")}),s.data("contextMenu",t).addClass("context-menu-active"),e(document).off("keydown.contextMenu").on("keydown.contextMenu",f.key),t.autoHide&&e(document).on("mousemove.contextMenuAutoHide",function(e){var n=s.offset();n.right=n.left+s.outerWidth(),n.bottom=n.top+s.outerHeight(),!t.$layer||t.hovering||e.pageX>=n.left&&e.pageX<=n.right&&e.pageY>=n.top&&e.pageY<=n.bottom||setTimeout(function(){t.hovering||null==t.$menu||t.$menu.trigger("contextmenu:hide")},50)})},hide:function(t,n){var a=e(this);if(t||(t=a.data("contextMenu")||{}),n||!t.events||t.events.hide.call(a,t)!==!1){if(a.removeData("contextMenu").removeClass("context-menu-active"),t.$layer){setTimeout(function(e){return function(){e.remove()}}(t.$layer),10);try{delete t.$layer}catch(e){t.$layer=null}}o=null,t.$menu.find("."+t.classNames.hover).trigger("contextmenu:blur"),t.$selected=null,t.$menu.find("."+t.classNames.visible).removeClass(t.classNames.visible),e(document).off(".contextMenuAutoHide").off("keydown.contextMenu"),t.$menu&&t.$menu[t.animation.hide](t.animation.duration,function(){t.build&&(t.$menu.remove(),e.each(t,function(e){switch(e){case"ns":case"selector":case"build":case"trigger":return!0;default:t[e]=void 0;try{delete t[e]}catch(e){}return!0}})),setTimeout(function(){a.trigger("contextmenu:hidden")},10)})}},create:function(n,a){function o(t){var n=e("");if(t._accesskey)t._beforeAccesskey&&n.append(document.createTextNode(t._beforeAccesskey)),e("").addClass("context-menu-accesskey").text(t._accesskey).appendTo(n),t._afterAccesskey&&n.append(document.createTextNode(t._afterAccesskey));else if(t.isHtmlName){if("undefined"!=typeof t.accesskey)throw new Error("accesskeys are not compatible with HTML names and cannot be used together in the same item");n.html(t.name)}else n.text(t.name);return n}void 0===a&&(a=n),n.$menu=e('
    ').addClass(n.className||"").data({contextMenu:n,contextMenuRoot:a}),e.each(["callbacks","commands","inputs"],function(e,t){n[t]={},a[t]||(a[t]={})}),a.accesskeys||(a.accesskeys={}),e.each(n.items,function(s,i){var c=e('
  • ').addClass(i.className||""),r=null,l=null;if(c.on("click",e.noop),"string"!=typeof i&&"cm_separator"!==i.type||(i={type:"cm_seperator"}),i.$node=c.data({contextMenu:n,contextMenuRoot:a,contextMenuKey:s}),"undefined"!=typeof i.accesskey)for(var d,m=t(i.accesskey),p=0;d=m[p];p++)if(!a.accesskeys[d]){a.accesskeys[d]=i;var x=i.name.match(new RegExp("^(.*?)("+d+")(.*)$","i"));x&&(i._beforeAccesskey=x[1],i._accesskey=x[2],i._afterAccesskey=x[3]);break}if(i.type&&u[i.type])u[i.type].call(c,i,n,a),e.each([n,a],function(t,a){a.commands[s]=i,!e.isFunction(i.callback)||void 0!==a.callbacks[s]&&void 0!==n.type||(a.callbacks[s]=i.callback)});else{switch("cm_seperator"===i.type?c.addClass("context-menu-separator "+a.classNames.notSelectable):"html"===i.type?c.addClass("context-menu-html "+a.classNames.notSelectable):"sub"===i.type||(i.type?(r=e("").appendTo(c),o(i).appendTo(r),c.addClass("context-menu-input"),n.hasTypes=!0,e.each([n,a],function(e,t){t.commands[s]=i,t.inputs[s]=i})):i.items&&(i.type="sub")),i.type){case"cm_seperator":break;case"text":l=e('').attr("name","context-menu-input-"+s).val(i.value||"").appendTo(r);break;case"textarea":l=e('').attr("name","context-menu-input-"+s).val(i.value||"").appendTo(r),i.height&&l.height(i.height);break;case"checkbox":l=e('').attr("name","context-menu-input-"+s).val(i.value||"").prop("checked",!!i.selected).prependTo(r);break;case"radio":l=e('').attr("name","context-menu-input-"+i.radio).val(i.value||"").prop("checked",!!i.selected).prependTo(r);break;case"select":l=e('').attr("name","context-menu-input-"+s).appendTo(r),i.options&&(e.each(i.options,function(t,n){e("").val(t).text(n).appendTo(l)}),l.val(i.selected));break;case"sub":o(i).appendTo(c),i.appendTo=i.$node,c.data("contextMenu",i).addClass("context-menu-submenu"),i.callback=null,"function"==typeof i.items.then?h.processPromises(i,a,i.items):h.create(i,a);break;case"html":e(i.html).appendTo(c);break;default:e.each([n,a],function(t,a){a.commands[s]=i,!e.isFunction(i.callback)||void 0!==a.callbacks[s]&&void 0!==n.type||(a.callbacks[s]=i.callback)}),o(i).appendTo(c)}i.type&&"sub"!==i.type&&"html"!==i.type&&"cm_seperator"!==i.type&&(l.on("focus",f.focusInput).on("blur",f.blurInput),i.events&&l.on(i.events,n)),i.icon&&(e.isFunction(i.icon)?i._icon=i.icon.call(this,this,c,s,i):"string"==typeof i.icon&&"fa-"===i.icon.substring(0,3)?i._icon=a.classNames.icon+" "+a.classNames.icon+"--fa fa "+i.icon:i._icon=a.classNames.icon+" "+a.classNames.icon+"-"+i.icon,c.addClass(i._icon))}i.$input=l,i.$label=r,c.appendTo(n.$menu),!n.hasTypes&&e.support.eventSelectstart&&c.on("selectstart.disableTextSelect",f.abortevent)}),n.$node||n.$menu.css("display","none").addClass("context-menu-root"),n.$menu.appendTo(n.appendTo||document.body)},resize:function(t,n){var a;t.css({position:"absolute",display:"block"}),t.data("width",(a=t.get(0)).getBoundingClientRect?Math.ceil(a.getBoundingClientRect().width):t.outerWidth()+1),t.css({position:"static",minWidth:"0px",maxWidth:"100000px"}),t.find("> li > ul").each(function(){h.resize(e(this),!0)}),n||t.find("ul").addBack().css({position:"",display:"",minWidth:"",maxWidth:""}).outerWidth(function(){return e(this).data("width")})},update:function(t,n){var a=this;void 0===n&&(n=t,h.resize(t.$menu)),t.$menu.children().each(function(){var o,s=e(this),i=s.data("contextMenuKey"),c=t.items[i],r=e.isFunction(c.disabled)&&c.disabled.call(a,i,n)||c.disabled===!0;if(o=e.isFunction(c.visible)?c.visible.call(a,i,n):"undefined"==typeof c.visible||c.visible===!0,s[o?"show":"hide"](),s[r?"addClass":"removeClass"](n.classNames.disabled),e.isFunction(c.icon)&&(s.removeClass(c._icon),c._icon=c.icon.call(this,a,s,i,c),s.addClass(c._icon)),c.type)switch(s.find("input, select, textarea").prop("disabled",r),c.type){case"text":case"textarea":c.$input.val(c.value||"");break;case"checkbox":case"radio":c.$input.val(c.value||"").prop("checked",!!c.selected);break;case"select":c.$input.val(c.selected||"")}c.$menu&&h.update.call(a,c,n)})},layer:function(t,n){var a=t.$layer=e('
    ').css({height:i.height(),width:i.width(),display:"block"}).data("contextMenuRoot",t).insertBefore(this).on("contextmenu",f.abortevent).on("mousedown",f.layerClick);return void 0===document.body.style.maxWidth&&a.css({position:"absolute",height:e(document).height()}),a},processPromises:function(e,t,n){function a(e,t,n){void 0===n&&o(void 0),s(e,t,n)}function o(e,t,n){void 0===n?(n={error:{name:"No items and no error item",icon:"context-menu-icon context-menu-icon-quit"}},window.console&&(console.error||console.log).call(console,'When you reject a promise, provide an "items" object, equal to normal sub-menu items')):"string"==typeof n&&(n={error:{name:n}}),s(e,t,n)}function s(e,t,n){void 0!==t.$menu&&t.$menu.is(":visible")&&(e.$node.removeClass(t.classNames.iconLoadingClass),e.items=n,h.create(e,t,!0),h.update(e,t),t.positionSubmenu.call(e.$node,e.$menu))}e.$node.addClass(t.classNames.iconLoadingClass),n.then(a.bind(this,e,t),o.bind(this,e,t))}};e.fn.contextMenu=function(t){var n=this,a=t;if(this.length>0)if(void 0===t)this.first().trigger("contextmenu");else if(void 0!==t.x&&void 0!==t.y)this.first().trigger(e.Event("contextmenu",{pageX:t.x,pageY:t.y,mouseButton:t.button}));else if("hide"===t){var o=this.first().data("contextMenu")?this.first().data("contextMenu").$menu:null;o&&o.trigger("contextmenu:hide")}else"destroy"===t?e.contextMenu("destroy",{context:this}):e.isPlainObject(t)?(t.context=this,e.contextMenu("create",t)):t?this.removeClass("context-menu-disabled"):t||this.addClass("context-menu-disabled");else e.each(l,function(){this.selector===n.selector&&(a.data=this,e.extend(a.data,{trigger:"demand"}))}),f.contextmenu.call(a.target,a);return this},e.contextMenu=function(t,n){"string"!=typeof t&&(n=t,t="create"),"string"==typeof n?n={selector:n}:void 0===n&&(n={});var a=e.extend(!0,{},d,n||{}),o=e(document),i=o,u=!1;switch(a.context&&a.context.length?(i=e(a.context).first(),a.context=i.get(0),u=!e(a.context).is(document)):a.context=document,t){case"create":if(!a.selector)throw new Error("No selector specified");if(a.selector.match(/.context-menu-(list|item|input)($|\s)/))throw new Error('Cannot bind to selector "'+a.selector+'" as it contains a reserved className');if(!a.build&&(!a.items||e.isEmptyObject(a.items)))throw new Error("No Items specified");if(c++,a.ns=".contextMenu"+c,u||(r[a.selector]=a.ns),l[a.ns]=a,a.trigger||(a.trigger="right"),!s){var m="click"===a.itemClickEvent?"click.contextMenu":"mouseup.contextMenu",p={"contextmenu:focus.contextMenu":f.focusItem,"contextmenu:blur.contextMenu":f.blurItem,"contextmenu.contextMenu":f.abortevent,"mouseenter.contextMenu":f.itemMouseenter,"mouseleave.contextMenu":f.itemMouseleave};p[m]=f.itemClick,o.on({"contextmenu:hide.contextMenu":f.hideMenu,"prevcommand.contextMenu":f.prevItem,"nextcommand.contextMenu":f.nextItem,"contextmenu.contextMenu":f.abortevent,"mouseenter.contextMenu":f.menuMouseenter,"mouseleave.contextMenu":f.menuMouseleave},".context-menu-list").on("mouseup.contextMenu",".context-menu-input",f.inputClick).on(p,".context-menu-item"),s=!0}switch(i.on("contextmenu"+a.ns,a.selector,a,f.contextmenu),u&&i.on("remove"+a.ns,function(){e(this).contextMenu("destroy")}),a.trigger){case"hover":i.on("mouseenter"+a.ns,a.selector,a,f.mouseenter).on("mouseleave"+a.ns,a.selector,a,f.mouseleave);break;case"left":i.on("click"+a.ns,a.selector,a,f.click)}a.build||h.create(a);break;case"destroy":var x;if(u){var g=a.context;e.each(l,function(t,n){if(!n)return!0;if(!e(g).is(n.selector))return!0;x=e(".context-menu-list").filter(":visible"),x.length&&x.data().contextMenuRoot.$trigger.is(e(n.context).find(n.selector))&&x.trigger("contextmenu:hide",{force:!0});try{l[n.ns].$menu&&l[n.ns].$menu.remove(),delete l[n.ns]}catch(e){l[n.ns]=null}return e(n.context).off(n.ns),!0})}else if(a.selector){if(r[a.selector]){x=e(".context-menu-list").filter(":visible"),x.length&&x.data().contextMenuRoot.$trigger.is(a.selector)&&x.trigger("contextmenu:hide",{force:!0});try{l[r[a.selector]].$menu&&l[r[a.selector]].$menu.remove(),delete l[r[a.selector]]}catch(e){l[r[a.selector]]=null}o.off(r[a.selector])}}else o.off(".contextMenu .contextMenuAutoHide"),e.each(l,function(t,n){e(n.context).off(n.ns)}),r={},l={},c=0,s=!1,e("#context-menu-layer, .context-menu-list").remove();break;case"html5":(!e.support.htmlCommand&&!e.support.htmlMenuitem||"boolean"==typeof n&&n)&&e('menu[type="context"]').each(function(){this.id&&e.contextMenu({selector:"[contextmenu="+this.id+"]",items:e.contextMenu.fromMenu(this)})}).css("display","none");break;default:throw new Error('Unknown operation "'+t+'"')}return this},e.contextMenu.setInputValues=function(t,n){void 0===n&&(n={}),e.each(t.inputs,function(e,t){switch(t.type){case"text":case"textarea":t.value=n[e]||"";break;case"checkbox":t.selected=!!n[e];break;case"radio":t.selected=(n[t.radio]||"")===t.value;break;case"select":t.selected=n[e]||""}})},e.contextMenu.getInputValues=function(t,n){return void 0===n&&(n={}),e.each(t.inputs,function(e,t){switch(t.type){case"text":case"textarea":case"select":n[e]=t.$input.val();break;case"checkbox":n[e]=t.$input.prop("checked");break;case"radio":t.$input.prop("checked")&&(n[t.radio]=t.value)}}),n},e.contextMenu.fromMenu=function(t){var n=e(t),o={};return a(o,n.children()),o},e.contextMenu.defaults=d,e.contextMenu.types=u,e.contextMenu.handle=f,e.contextMenu.op=h,e.contextMenu.menus=l}); +//# sourceMappingURL=jquery.contextMenu.min.js.map diff --git a/boards/templates/boards/base.html b/boards/templates/boards/base.html --- a/boards/templates/boards/base.html +++ b/boards/templates/boards/base.html @@ -9,6 +9,7 @@ + {% if rss_url %} @@ -63,9 +64,11 @@
    {% trans "Loading..." %}
    + + + {% block content %}{% endblock %} - diff --git a/boards/templates/boards/post.html b/boards/templates/boards/post.html --- a/boards/templates/boards/post.html +++ b/boards/templates/boards/post.html @@ -50,22 +50,50 @@ {% endif %} {% if perms.boards.change_post or perms.boards.delete_post or perms.boards.change_thread or perms_boards.delete_thread %} - - {% if perms.boards.change_post or perms.boards.delete_post %} - | {% trans 'Edit' %} - {% endif %} - {% if perms.boards.change_thread or perms_boards.delete_thread %} - {% if is_opening %} - | {% trans 'Edit thread' %} - | {% trans 'Delete thread' %} - {% else %} - | {% trans 'Delete post' %} - {% endif %} - {% endif %} - {% if post.global_id_id %} - | RAW - {% endif %} - + {% trans 'Moderation' %} + {% endif %} {% comment %}