mirror of
				https://github.com/ether/etherpad-lite.git
				synced 2025-10-31 16:21:11 +01:00 
			
		
		
		
	Merge branch 'require-paths' into plugin
Conflicts: node/server.js src/static/js/Changeset.js src/static/js/ace.js src/static/js/ace2_common.js src/static/js/ace2_inner.js src/static/js/broadcast.js src/static/js/changesettracker.js src/static/js/chat.js src/static/js/collab_client.js src/static/js/contentcollector.js src/static/js/domline.js src/static/js/linestylefilter.js src/static/js/pad.js src/static/js/pad_connectionstatus.js src/static/js/pad_docbar.js src/static/js/pad_editbar.js src/static/js/pad_editor.js src/static/js/pad_impexp.js src/static/js/pad_modals.js src/static/js/pad_savedrevs.js src/static/js/pad_userlist.js src/static/js/pad_utils.js src/static/js/timeslider.js src/static/js/undomodule.js src/static/pad.html src/static/timeslider.html
This commit is contained in:
		
						commit
						ddda347f7a
					
				| @ -12,7 +12,7 @@ | ||||
|   "dependencies"   : { | ||||
|                       "yajsml"              : "1.1.2", | ||||
|                       "request"             : "2.9.100", | ||||
|                       "require-kernel"      : "1.0.3", | ||||
|                       "require-kernel"      : "1.0.5", | ||||
|                       "socket.io"           : "0.8.7", | ||||
|                       "ueberDB"             : "0.1.7", | ||||
|                       "async"               : "0.1.18", | ||||
|  | ||||
| @ -25,7 +25,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var AttributePoolFactory = require("ep_etherpad-lite/static/js/AttributePoolFactory"); | ||||
| var AttributePoolFactory = require("./AttributePoolFactory"); | ||||
| 
 | ||||
| var _opt = null; | ||||
| 
 | ||||
|  | ||||
| @ -28,7 +28,7 @@ Ace2Editor.registry = { | ||||
|   nextId: 1 | ||||
| }; | ||||
| 
 | ||||
| var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); | ||||
| var hooks = require('./pluginfw/hooks'); | ||||
| 
 | ||||
| function Ace2Editor() | ||||
| { | ||||
| @ -156,7 +156,11 @@ function Ace2Editor() | ||||
|   } | ||||
|   function pushRequireScriptTo(buffer) { | ||||
|     var KERNEL_SOURCE = '../static/js/require-kernel.js'; | ||||
|     var KERNEL_BOOT = 'require.setRootURI("../javascripts/src");\nrequire.setLibraryURI("../javascripts/lib");\nrequire.setGlobalKeyPath("require");' | ||||
|     var KERNEL_BOOT = '\ | ||||
| require.setRootURI("../javascripts/src");\n\ | ||||
| require.setLibraryURI("../javascripts/lib");\n\ | ||||
| require.setGlobalKeyPath("require");\n\ | ||||
| '; | ||||
|     if (Ace2Editor.EMBEDED && Ace2Editor.EMBEDED[KERNEL_SOURCE]) { | ||||
|       buffer.push('<script type="text/javascript">'); | ||||
|       buffer.push(Ace2Editor.EMBEDED[KERNEL_SOURCE]); | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var Security = require('ep_etherpad-lite/static/js/security'); | ||||
| var Security = require('./security'); | ||||
| 
 | ||||
| function isNodeText(node) | ||||
| { | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var Ace2Common = require('ep_etherpad-lite/static/js/ace2_common'); | ||||
| var Ace2Common = require('./ace2_common'); | ||||
| 
 | ||||
| // Extract useful method defined in the other module.
 | ||||
| var isNodeText = Ace2Common.isNodeText; | ||||
| @ -38,18 +38,17 @@ var htmlPrettyEscape = Ace2Common.htmlPrettyEscape; | ||||
| var map = Ace2Common.map; | ||||
| var noop = Ace2Common.noop; | ||||
| 
 | ||||
| var makeChangesetTracker = require('ep_etherpad-lite/static/js/changesettracker').makeChangesetTracker; | ||||
| var colorutils = require('ep_etherpad-lite/static/js/colorutils').colorutils; | ||||
| var makeContentCollector = require('ep_etherpad-lite/static/js/contentcollector').makeContentCollector; | ||||
| var makeCSSManager = require('ep_etherpad-lite/static/js/cssmanager').makeCSSManager; | ||||
| var domline = require('ep_etherpad-lite/static/js/domline').domline; | ||||
| var AttribPool = require('ep_etherpad-lite/static/js/AttributePoolFactory').createAttributePool; | ||||
| var Changeset = require('ep_etherpad-lite/static/js/Changeset'); | ||||
| var linestylefilter = require('ep_etherpad-lite/static/js/linestylefilter').linestylefilter; | ||||
| var newSkipList = require('ep_etherpad-lite/static/js/skiplist').newSkipList; | ||||
| var undoModule = require('ep_etherpad-lite/static/js/undomodule').undoModule; | ||||
| var makeVirtualLineView = require('ep_etherpad-lite/static/js/virtual_lines').makeVirtualLineView; | ||||
| 
 | ||||
| var makeChangesetTracker = require('./changesettracker').makeChangesetTracker; | ||||
| var colorutils = require('./colorutils').colorutils; | ||||
| var makeContentCollector = require('./contentcollector').makeContentCollector; | ||||
| var makeCSSManager = require('./cssmanager').makeCSSManager; | ||||
| var domline = require('./domline').domline; | ||||
| var AttribPool = require('./AttributePoolFactory').createAttributePool; | ||||
| var Changeset = require('./Changeset'); | ||||
| var linestylefilter = require('./linestylefilter').linestylefilter; | ||||
| var newSkipList = require('./skiplist').newSkipList; | ||||
| var undoModule = require('./undomodule').undoModule; | ||||
| var makeVirtualLineView = require('./virtual_lines').makeVirtualLineView; | ||||
| 
 | ||||
| function Ace2Inner(){ | ||||
|   var DEBUG = false; //$$ build script replaces the string "var DEBUG=true;//$$" with "var DEBUG=false;"
 | ||||
|  | ||||
| @ -20,13 +20,13 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var makeCSSManager = require('ep_etherpad-lite/static/js/cssmanager').makeCSSManager; | ||||
| var domline = require('ep_etherpad-lite/static/js/domline').domline; | ||||
| var AttribPool = require('ep_etherpad-lite/static/js/AttributePoolFactory').createAttributePool; | ||||
| var Changeset = require('ep_etherpad-lite/static/js/Changeset'); | ||||
| var linestylefilter = require('ep_etherpad-lite/static/js/linestylefilter').linestylefilter; | ||||
| var colorutils = require('ep_etherpad-lite/static/js/colorutils').colorutils; | ||||
| var Ace2Common = require('ep_etherpad-lite/static/js/ace2_common'); | ||||
| var makeCSSManager = require('./cssmanager').makeCSSManager; | ||||
| var domline = require('./domline').domline; | ||||
| var AttribPool = require('./AttributePoolFactory').createAttributePool; | ||||
| var Changeset = require('./Changeset'); | ||||
| var linestylefilter = require('./linestylefilter').linestylefilter; | ||||
| var colorutils = require('./colorutils').colorutils; | ||||
| var Ace2Common = require('./ace2_common'); | ||||
| 
 | ||||
| var map = Ace2Common.map; | ||||
| var forEach = Ace2Common.forEach; | ||||
|  | ||||
| @ -20,8 +20,8 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var AttribPool = require('ep_etherpad-lite/static/js/AttributePoolFactory').createAttributePool; | ||||
| var Changeset = require('ep_etherpad-lite/static/js/Changeset'); | ||||
| var AttribPool = require('./AttributePoolFactory').createAttributePool; | ||||
| var Changeset = require('./Changeset'); | ||||
| 
 | ||||
| function makeChangesetTracker(scheduler, apool, aceCallbacksProvider) | ||||
| { | ||||
|  | ||||
| @ -20,8 +20,8 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var padutils = require('ep_etherpad-lite/static/js/pad_utils').padutils; | ||||
| var padcookie = require('ep_etherpad-lite/static/js/pad_cookie').padcookie; | ||||
| var padutils = require('./pad_utils').padutils; | ||||
| var padcookie = require('./pad_cookie').padcookie; | ||||
| 
 | ||||
| var chat = (function() | ||||
| { | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var chat = require('ep_etherpad-lite/static/js/chat').chat; | ||||
| var chat = require('./chat').chat; | ||||
| 
 | ||||
| // Dependency fill on init. This exists for `pad.socket` only.
 | ||||
| // TODO: bind directly to the socket.
 | ||||
|  | ||||
| @ -25,8 +25,8 @@ | ||||
| 
 | ||||
| var _MAX_LIST_LEVEL = 8; | ||||
| 
 | ||||
| var Changeset = require('ep_etherpad-lite/static/js/Changeset'); | ||||
| var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); | ||||
| var Changeset = require('./Changeset'); | ||||
| var hooks = require('./pluginfw/hooks'); | ||||
| 
 | ||||
| function sanitizeUnicode(s) | ||||
| { | ||||
|  | ||||
| @ -26,9 +26,9 @@ | ||||
| // requires: plugins
 | ||||
| // requires: undefined
 | ||||
| 
 | ||||
| var Security = require('ep_etherpad-lite/static/js/security'); | ||||
| var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); | ||||
| var Ace2Common = require('ep_etherpad-lite/static/js/ace2_common'); | ||||
| var Security = require('./security'); | ||||
| var hooks = require('./pluginfw/hooks'); | ||||
| var Ace2Common = require('./ace2_common'); | ||||
| var map = Ace2Common.map; | ||||
| var noop = Ace2Common.noop; | ||||
| var identity = Ace2Common.identity; | ||||
|  | ||||
| @ -28,9 +28,9 @@ | ||||
| // requires: plugins
 | ||||
| // requires: undefined
 | ||||
| 
 | ||||
| var Changeset = require('ep_etherpad-lite/static/js/Changeset'); | ||||
| var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); | ||||
| var map = require('ep_etherpad-lite/static/js/ace2_common').map; | ||||
| var Changeset = require('./Changeset'); | ||||
| var hooks = require('./pluginfw/hooks'); | ||||
| var map = require('./ace2_common').map; | ||||
| 
 | ||||
| var linestylefilter = {}; | ||||
| 
 | ||||
|  | ||||
| @ -26,29 +26,29 @@ var socket; | ||||
| 
 | ||||
| // These jQuery things should create local references, but for now `require()`
 | ||||
| // assigns to the global `$` and augments it with plugins.
 | ||||
| require('ep_etherpad-lite/static/js/jquery'); | ||||
| require('ep_etherpad-lite/static/js/farbtastic'); | ||||
| require('ep_etherpad-lite/static/js/excanvas'); | ||||
| JSON = require('ep_etherpad-lite/static/js/json2'); | ||||
| require('ep_etherpad-lite/static/js/undo-xpopup'); | ||||
| require('ep_etherpad-lite/static/js/prefixfree'); | ||||
| require('./jquery'); | ||||
| require('./farbtastic'); | ||||
| require('./excanvas'); | ||||
| JSON = require('./json2'); | ||||
| require('./undo-xpopup'); | ||||
| require('./prefixfree'); | ||||
| 
 | ||||
| var chat = require('ep_etherpad-lite/static/js/chat').chat; | ||||
| var getCollabClient = require('ep_etherpad-lite/static/js/collab_client').getCollabClient; | ||||
| var padconnectionstatus = require('ep_etherpad-lite/static/js/pad_connectionstatus').padconnectionstatus; | ||||
| var padcookie = require('ep_etherpad-lite/static/js/pad_cookie').padcookie; | ||||
| var paddocbar = require('ep_etherpad-lite/static/js/pad_docbar').paddocbar; | ||||
| var padeditbar = require('ep_etherpad-lite/static/js/pad_editbar').padeditbar; | ||||
| var padeditor = require('ep_etherpad-lite/static/js/pad_editor').padeditor; | ||||
| var padimpexp = require('ep_etherpad-lite/static/js/pad_impexp').padimpexp; | ||||
| var padmodals = require('ep_etherpad-lite/static/js/pad_modals').padmodals; | ||||
| var padsavedrevs = require('ep_etherpad-lite/static/js/pad_savedrevs').padsavedrevs; | ||||
| var paduserlist = require('ep_etherpad-lite/static/js/pad_userlist').paduserlist; | ||||
| var padutils = require('ep_etherpad-lite/static/js/pad_utils').padutils; | ||||
| var chat = require('./chat').chat; | ||||
| var getCollabClient = require('./collab_client').getCollabClient; | ||||
| var padconnectionstatus = require('./pad_connectionstatus').padconnectionstatus; | ||||
| var padcookie = require('./pad_cookie').padcookie; | ||||
| var paddocbar = require('./pad_docbar').paddocbar; | ||||
| var padeditbar = require('./pad_editbar').padeditbar; | ||||
| var padeditor = require('./pad_editor').padeditor; | ||||
| var padimpexp = require('./pad_impexp').padimpexp; | ||||
| var padmodals = require('./pad_modals').padmodals; | ||||
| var padsavedrevs = require('./pad_savedrevs').padsavedrevs; | ||||
| var paduserlist = require('./pad_userlist').paduserlist; | ||||
| var padutils = require('./pad_utils').padutils; | ||||
| 
 | ||||
| var createCookie = require('ep_etherpad-lite/static/js/pad_utils').createCookie; | ||||
| var readCookie = require('ep_etherpad-lite/static/js/pad_utils').readCookie; | ||||
| var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString; | ||||
| var createCookie = require('./pad_utils').createCookie; | ||||
| var readCookie = require('./pad_utils').readCookie; | ||||
| var randomString = require('./pad_utils').randomString; | ||||
| 
 | ||||
| function getParams() | ||||
| { | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var padmodals = require('ep_etherpad-lite/static/js/pad_modals').padmodals; | ||||
| var padmodals = require('./pad_modals').padmodals; | ||||
| 
 | ||||
| var padconnectionstatus = (function() | ||||
| { | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var padutils = require('ep_etherpad-lite/static/js/pad_utils').padutils; | ||||
| var padutils = require('./pad_utils').padutils; | ||||
| 
 | ||||
| var paddocbar = (function() | ||||
| { | ||||
| @ -449,7 +449,7 @@ var paddocbar = (function() | ||||
|     handleResizePage: function() | ||||
|     { | ||||
|       // Side-step circular reference. This should be injected.
 | ||||
|       var padsavedrevs = require('ep_etherpad-lite/static/js/pad_savedrevs').padsavedrevs; | ||||
|       var padsavedrevs = require('./pad_savedrevs').padsavedrevs; | ||||
|       padsavedrevs.handleResizePage(); | ||||
|     }, | ||||
|     hideLaterIfNoOtherInteraction: function() | ||||
|  | ||||
| @ -20,9 +20,9 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var padutils = require('ep_etherpad-lite/static/js/pad_utils').padutils; | ||||
| var padeditor = require('ep_etherpad-lite/static/js/pad_editor').padeditor; | ||||
| var padsavedrevs = require('ep_etherpad-lite/static/js/pad_savedrevs').padsavedrevs; | ||||
| var padutils = require('./pad_utils').padutils; | ||||
| var padeditor = require('./pad_editor').padeditor; | ||||
| var padsavedrevs = require('./pad_savedrevs').padsavedrevs; | ||||
| 
 | ||||
| function indexOf(array, value) { | ||||
|   for (var i = 0, ii = array.length; i < ii; i++) { | ||||
|  | ||||
| @ -20,8 +20,8 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var padcookie = require('ep_etherpad-lite/static/js/pad_cookie').padcookie; | ||||
| var padutils = require('ep_etherpad-lite/static/js/pad_utils').padutils; | ||||
| var padcookie = require('./pad_cookie').padcookie; | ||||
| var padutils = require('./pad_utils').padutils; | ||||
| 
 | ||||
| var padeditor = (function() | ||||
| { | ||||
| @ -34,7 +34,7 @@ var padeditor = (function() | ||||
|     viewZoom: 100, | ||||
|     init: function(readyFunc, initialViewOptions, _pad) | ||||
|     { | ||||
|       Ace2Editor = require('ep_etherpad-lite/static/js/ace').Ace2Editor; | ||||
|       Ace2Editor = require('./ace').Ace2Editor; | ||||
|       pad = _pad; | ||||
|       settings = pad.settings; | ||||
| 
 | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var paddocbar = require('ep_etherpad-lite/static/js/pad_docbar').paddocbar; | ||||
| var paddocbar = require('./pad_docbar').paddocbar; | ||||
| 
 | ||||
| var padimpexp = (function() | ||||
| { | ||||
|  | ||||
| @ -20,8 +20,8 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var padutils = require('ep_etherpad-lite/static/js/pad_utils').padutils; | ||||
| var paddocbar = require('ep_etherpad-lite/static/js/pad_docbar').paddocbar; | ||||
| var padutils = require('./pad_utils').padutils; | ||||
| var paddocbar = require('./pad_docbar').paddocbar; | ||||
| 
 | ||||
| var padmodals = (function() | ||||
| { | ||||
|  | ||||
| @ -20,8 +20,8 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var padutils = require('ep_etherpad-lite/static/js/pad_utils').padutils; | ||||
| var paddocbar = require('ep_etherpad-lite/static/js/pad_docbar').paddocbar; | ||||
| var padutils = require('./pad_utils').padutils; | ||||
| var paddocbar = require('./pad_docbar').paddocbar; | ||||
| 
 | ||||
| var padsavedrevs = (function() | ||||
| { | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var padutils = require('ep_etherpad-lite/static/js/pad_utils').padutils; | ||||
| var padutils = require('./pad_utils').padutils; | ||||
| 
 | ||||
| var myUserInfo = {}; | ||||
| 
 | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var Security = require('ep_etherpad-lite/static/js/security'); | ||||
| var Security = require('./security'); | ||||
| 
 | ||||
| /** | ||||
|  * Generates a random String with the given length. Is needed to generate the Author, Group, readonly, session Ids | ||||
| @ -75,7 +75,7 @@ var padutils = { | ||||
|   }, | ||||
|   uniqueId: function() | ||||
|   { | ||||
|     var pad = require('ep_etherpad-lite/static/js/pad').pad; // Sidestep circular dependency
 | ||||
|     var pad = require('./pad').pad; // Sidestep circular dependency
 | ||||
|     function encodeNum(n, width) | ||||
|     { | ||||
|       // returns string that is exactly 'width' chars, padding with zeros
 | ||||
| @ -250,7 +250,7 @@ var padutils = { | ||||
|   }, | ||||
|   timediff: function(d) | ||||
|   { | ||||
|     var pad = require('ep_etherpad-lite/static/js/pad').pad; // Sidestep circular dependency
 | ||||
|     var pad = require('./pad').pad; // Sidestep circular dependency
 | ||||
|     function format(n, word) | ||||
|     { | ||||
|       n = Math.round(n); | ||||
| @ -520,7 +520,7 @@ function setupGlobalExceptionHandler() { | ||||
| 
 | ||||
| padutils.setupGlobalExceptionHandler = setupGlobalExceptionHandler; | ||||
| 
 | ||||
| padutils.binarySearch = require('ep_etherpad-lite/static/js/ace2_common').binarySearch; | ||||
| padutils.binarySearch = require('./ace2_common').binarySearch; | ||||
| 
 | ||||
| exports.randomString = randomString; | ||||
| exports.createCookie = createCookie; | ||||
|  | ||||
| @ -22,13 +22,13 @@ | ||||
| 
 | ||||
| // These jQuery things should create local references, but for now `require()`
 | ||||
| // assigns to the global `$` and augments it with plugins.
 | ||||
| require('ep_etherpad-lite/static/js/jquery'); | ||||
| JSON = require('ep_etherpad-lite/static/js/json2'); | ||||
| require('ep_etherpad-lite/static/js/undo-xpopup'); | ||||
| require('./jquery'); | ||||
| JSON = require('./json2'); | ||||
| require('./undo-xpopup'); | ||||
| 
 | ||||
| var createCookie = require('ep_etherpad-lite/static/js/pad_utils').createCookie; | ||||
| var readCookie = require('ep_etherpad-lite/static/js/pad_utils').readCookie; | ||||
| var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString; | ||||
| var createCookie = require('./pad_utils').createCookie; | ||||
| var readCookie = require('./pad_utils').readCookie; | ||||
| var randomString = require('./pad_utils').randomString; | ||||
| 
 | ||||
| var socket, token, padId, export_links; | ||||
| 
 | ||||
| @ -127,12 +127,12 @@ function handleClientVars(message) | ||||
|   clientVars = message.data; | ||||
|    | ||||
|   //load all script that doesn't work without the clientVars
 | ||||
|   BroadcastSlider = require('ep_etherpad-lite/static/js/broadcast_slider').loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded); | ||||
|   require('ep_etherpad-lite/static/js/broadcast_revisions').loadBroadcastRevisionsJS(); | ||||
|   changesetLoader = require('ep_etherpad-lite/static/js/broadcast').loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, BroadcastSlider); | ||||
|   BroadcastSlider = require('./broadcast_slider').loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded); | ||||
|   require('./broadcast_revisions').loadBroadcastRevisionsJS(); | ||||
|   changesetLoader = require('./broadcast').loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, BroadcastSlider); | ||||
| 
 | ||||
|   //initialize export ui
 | ||||
|   require('ep_etherpad-lite/static/js/pad_impexp').padimpexp.init(); | ||||
|   require('./pad_impexp').padimpexp.init(); | ||||
| 
 | ||||
|   //change export urls when the slider moves
 | ||||
|   var export_rev_regex = /(\/\d+)?\/export/ | ||||
|  | ||||
| @ -20,8 +20,8 @@ | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| var Changeset = require('ep_etherpad-lite/static/js/Changeset'); | ||||
| var extend = require('ep_etherpad-lite/static/js/ace2_common').extend; | ||||
| var Changeset = require('./Changeset'); | ||||
| var extend = require('./ace2_common').extend; | ||||
| 
 | ||||
| var undoModule = (function() | ||||
| { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user