implemented javascript-driven revision comparison (with the little radio buttons)
This commit is contained in:
		
							parent
							
								
									187ae59d7b
								
							
						
					
					
						commit
						132bf9cb35
					
				| @ -82,8 +82,10 @@ | ||||
| 				} | ||||
| 			} | ||||
| 			 | ||||
| 			return ViewMetaData::generate()->addMeta('revised', date('c', $revised)) | ||||
| 			                               ->addCss($this->cssPath . '/global.css'); | ||||
| 			$data = ViewMetaData::generate()->addMeta('revised', date('c', $revised)) | ||||
| 			                                ->addCss($this->cssPath . '/global.css'); | ||||
| 			 | ||||
| 			return parent::getMetaData()->merge($data); | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
|  | ||||
| @ -47,14 +47,18 @@ | ||||
| 		public function __construct(Collection $revisions, $pageName, $priority = 0)  { | ||||
| 			parent::__construct($priority); | ||||
| 			 | ||||
| 			if ($revisions->type !== 'WikiHistory') { | ||||
| 				throw new InvalidTypeException(1, 'Collection with type "WikiHistory"', $revisions); | ||||
| 			if ($revisions->type !== 'Registry') { | ||||
| 				throw new InvalidTypeException(1, 'Collection with type "Registry"', $revisions); | ||||
| 			} | ||||
| 			 | ||||
| 			$this->revisions = $revisions; | ||||
| 			$this->pageName  = $pageName; | ||||
| 		} | ||||
| 		 | ||||
| 		public function getMetaData() { | ||||
| 			return ViewMetaData::generate()->addJavaScript($this->jsPath . '/wiki.js'); | ||||
| 		} | ||||
| 		 | ||||
| 		/** | ||||
| 		 * Renders the view | ||||
| 		 * | ||||
| @ -69,31 +73,37 @@ | ||||
| 						<th>Date</th> | ||||
| 						<th>Message</th> | ||||
| 						<th>Author</th> | ||||
| 						<th>Diff</th> | ||||
| 						<th colspan="3">Diff</th> | ||||
| 					</tr> | ||||
| 					 | ||||
| 					<?php | ||||
| 						 | ||||
| 						$previous = null; | ||||
| 						foreach ($this->revisions as $revision => $history) {  | ||||
| 						foreach ($this->revisions as $revision => $revisionData) {  | ||||
| 							$affectedBytes = 'n/a'; | ||||
| 							if ($previous !== null) { | ||||
| 								$link          = $this->wikiPath . '/' . $this->pageName; | ||||
| 								$link         .= '?diff[' . $previous->revision . ',' . $revision .']'; | ||||
| 								$affectedBytes = strlen($history->wikitext) - strlen($previous->wikitext); | ||||
| 								$affectedBytes = (($affectedBytes >= 0) ? '+' : '') . $affectedBytes; | ||||
| 								$affectedBytes = '<a href="' . $link .'">' . $affectedBytes . ' bytes</a>'; | ||||
| 								$affectedBytes = strlen($revisionData->wikitext) - strlen($previous->wikitext); | ||||
| 								$percentage    = round(100 * $affectedBytes / strlen($revisionData->wikitext), 2); | ||||
| 								$prefix        = ($affectedBytes === 0) ? '±' : (($affectedBytes > 0) ? '+' : ''); | ||||
| 								$suffix        = (abs($affectedBytes) === 1) ? ' byte' : ' bytes'; | ||||
| 								$affectedBytes = $prefix . $affectedBytes . $suffix . ' (' . $prefix . $percentage . '%)'; | ||||
| 								 | ||||
| 								$affectedBytes = '<a href="' . $link .'">' . $affectedBytes . '</a>'; | ||||
| 							} | ||||
| 							 | ||||
| 							$previous = $history; | ||||
| 							$previous = $revisionData; | ||||
| 						?>
 | ||||
| 					 | ||||
| 					<tr> | ||||
| 						<td><?php echo $history->revision; ?></td>
 | ||||
| 						<td><?php echo $history->created; ?></td>
 | ||||
| 						<td><?php echo $history->message; ?></td>
 | ||||
| 						<td><?php echo $history->created_user_id; ?></td>
 | ||||
| 						<td><?php echo $revisionData->revision; ?></td>
 | ||||
| 						<td><?php echo $revisionData->created; ?></td>
 | ||||
| 						<td><?php echo $revisionData->message; ?></td>
 | ||||
| 						<td><a href="<?php echo $this->wikiPath; ?>/Users?<?php echo $revisionData->user_name; ?>"><?php echo $revisionData->user_name; ?></a></td>
 | ||||
| 						<td><?php echo $affectedBytes; ?></td>
 | ||||
| 						<td><input type="radio" name="oldrev" value="<?php echo $revisionData->revision; ?>"/></td> | ||||
| 						<td><input type="radio" name="newrev" value="<?php echo $revisionData->revision; ?>"/></td> | ||||
| 					</tr> | ||||
| 					 | ||||
| 						<?php  | ||||
| @ -102,6 +112,10 @@ | ||||
| 						 | ||||
| 					?>
 | ||||
| 					 | ||||
| 					<tr> | ||||
| 						<td colspan="7"><input type="button" value="Compare Revisions" onclick="Wiki.compareRevisions('<?php echo $this->wikiPath . '/' . $this->pageName;?>?diff')"/> | ||||
| 					</tr> | ||||
| 					 | ||||
| 				</table> | ||||
| 				 | ||||
| 		<?php | ||||
|  | ||||
							
								
								
									
										36
									
								
								src/media/js/wiki.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/media/js/wiki.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,36 @@ | ||||
| var Wiki = { | ||||
| 	 | ||||
| 	compareRevisions: function(path) { | ||||
| 		var oldDiff = Wiki.getRevision("oldrev"); | ||||
| 		if (oldDiff === null) { | ||||
| 			alert("No old revision is selected"); | ||||
| 			return false; | ||||
| 		} | ||||
| 		 | ||||
| 		var newDiff = Wiki.getRevision("newrev"); | ||||
| 		if (newDiff === null) { | ||||
| 			alert("No new revision is selected"); | ||||
| 			return false; | ||||
| 		} | ||||
| 		 | ||||
| 		if (oldDiff === newDiff) { | ||||
| 			alert("Cannot compare the same revision"); | ||||
| 			return false; | ||||
| 		} | ||||
| 		 | ||||
| 		var url = path + "[" + oldDiff + "," + newDiff + "]"; | ||||
| 		document.location = url; | ||||
| 	}, | ||||
| 	 | ||||
| 	getRevision: function(name) { | ||||
| 		var revs = document.getElementsByName(name); | ||||
| 		for (var i = 0, len = revs.length; i < len; ++i) { | ||||
| 			if (revs[i].checked) { | ||||
| 				return revs[i].value; | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		return null; | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user