kopia lustrzana https://github.com/miklobit/TiddlyWiki5
				
				
				
			
		
			
				
	
	
		
			95 wiersze
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			95 wiersze
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
| /*\
 | |
| title: $:/plugins/tiddlywiki/tiddlyweb/sse-server.js
 | |
| type: application/javascript
 | |
| module-type: route
 | |
| 
 | |
| GET /events/plugins/tiddlywiki/tiddlyweb
 | |
| 
 | |
| \*/
 | |
| (function(){
 | |
| 
 | |
| /*jslint node: true, browser: true */
 | |
| /*global $tw: false */
 | |
| "use strict";
 | |
| 
 | |
| var wikis = [];
 | |
| var connections = [];
 | |
| 
 | |
| /*
 | |
| Setup up the array for this wiki and add the change listener
 | |
| */
 | |
| function setupWiki(wiki) {
 | |
| 	var index = wikis.length;
 | |
| 	// Add a new array for this wiki (object references work as keys)
 | |
| 	wikis.push(wiki);
 | |
| 	connections.push([]);
 | |
| 	// Listen to change events for this wiki
 | |
| 	wiki.addEventListener("change",function(changes) {
 | |
| 		var jsonChanges = JSON.stringify(changes);
 | |
| 		getWikiConnections(wiki).forEach(function(item) {
 | |
| 			item.emit("change",jsonChanges);
 | |
| 		});
 | |
| 	});
 | |
| 	return index;
 | |
| }
 | |
| 
 | |
| /*
 | |
| Setup this particular wiki if we haven't seen it before
 | |
| */
 | |
| function ensureWikiSetup(wiki) {
 | |
| 	if(wikis.indexOf(wiki) === -1) {
 | |
| 		setupWiki(wiki);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /*
 | |
| Return the array of connections for a particular wiki
 | |
| */
 | |
| function getWikiConnections(wiki) {
 | |
| 	return connections[wikis.indexOf(wiki)];
 | |
| }
 | |
| 
 | |
| function addWikiConnection(wiki,connection) {
 | |
| 	getWikiConnections(wiki).push(connection);
 | |
| }
 | |
| 
 | |
| function removeWikiConnection(wiki,connection) {
 | |
| 	var wikiConnections = getWikiConnections(wiki);
 | |
| 	var index = wikiConnections.indexOf(connection);
 | |
| 	if(index !== -1) {
 | |
| 		wikiConnections.splice(index,1);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function handleConnection(request,state,emit,end) {
 | |
| 	if(isDisabled(state)) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	ensureWikiSetup(state.wiki);
 | |
| 	// Add the connection to the list of connections for this wiki
 | |
| 	var connection = {
 | |
| 		request: request,
 | |
| 		state: state,
 | |
| 		emit: emit,
 | |
| 		end: end
 | |
| 	};
 | |
| 	addWikiConnection(state.wiki,connection);
 | |
| 	request.on("close",function() {
 | |
| 		removeWikiConnection(state.wiki,connection);
 | |
| 	});
 | |
| }
 | |
| 
 | |
| function isDisabled(state) {
 | |
| 	return state.server.get("sse-enabled") !== "yes";
 | |
| }
 | |
| 
 | |
| // Import the ServerSentEvents class
 | |
| var ServerSentEvents = require("$:/core/modules/server/server-sent-events.js").ServerSentEvents;
 | |
| // Instantiate the class
 | |
| var events = new ServerSentEvents("plugins/tiddlywiki/tiddlyweb", handleConnection);
 | |
| // Export the route definition for this server sent events instance
 | |
| module.exports = events.getExports();
 | |
| 
 | |
| })();
 |