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)) | 			$data = ViewMetaData::generate()->addMeta('revised', date('c', $revised)) | ||||||
| 			                                ->addCss($this->cssPath . '/global.css'); | 			                                ->addCss($this->cssPath . '/global.css'); | ||||||
|  | 			 | ||||||
|  | 			return parent::getMetaData()->merge($data); | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 		/** | 		/** | ||||||
|  | |||||||
| @ -47,14 +47,18 @@ | |||||||
| 		public function __construct(Collection $revisions, $pageName, $priority = 0)  { | 		public function __construct(Collection $revisions, $pageName, $priority = 0)  { | ||||||
| 			parent::__construct($priority); | 			parent::__construct($priority); | ||||||
| 			 | 			 | ||||||
| 			if ($revisions->type !== 'WikiHistory') { | 			if ($revisions->type !== 'Registry') { | ||||||
| 				throw new InvalidTypeException(1, 'Collection with type "WikiHistory"', $revisions); | 				throw new InvalidTypeException(1, 'Collection with type "Registry"', $revisions); | ||||||
| 			} | 			} | ||||||
| 			 | 			 | ||||||
| 			$this->revisions = $revisions; | 			$this->revisions = $revisions; | ||||||
| 			$this->pageName  = $pageName; | 			$this->pageName  = $pageName; | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
|  | 		public function getMetaData() { | ||||||
|  | 			return ViewMetaData::generate()->addJavaScript($this->jsPath . '/wiki.js'); | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
| 		/** | 		/** | ||||||
| 		 * Renders the view | 		 * Renders the view | ||||||
| 		 * | 		 * | ||||||
| @ -69,31 +73,37 @@ | |||||||
| 						<th>Date</th> | 						<th>Date</th> | ||||||
| 						<th>Message</th> | 						<th>Message</th> | ||||||
| 						<th>Author</th> | 						<th>Author</th> | ||||||
| 						<th>Diff</th> | 						<th colspan="3">Diff</th> | ||||||
| 					</tr> | 					</tr> | ||||||
| 					 | 					 | ||||||
| 					<?php | 					<?php | ||||||
| 						 | 						 | ||||||
| 						$previous = null; | 						$previous = null; | ||||||
| 						foreach ($this->revisions as $revision => $history) {  | 						foreach ($this->revisions as $revision => $revisionData) {  | ||||||
| 							$affectedBytes = 'n/a'; | 							$affectedBytes = 'n/a'; | ||||||
| 							if ($previous !== null) { | 							if ($previous !== null) { | ||||||
| 								$link          = $this->wikiPath . '/' . $this->pageName; | 								$link          = $this->wikiPath . '/' . $this->pageName; | ||||||
| 								$link         .= '?diff[' . $previous->revision . ',' . $revision .']'; | 								$link         .= '?diff[' . $previous->revision . ',' . $revision .']'; | ||||||
| 								$affectedBytes = strlen($history->wikitext) - strlen($previous->wikitext); | 								$affectedBytes = strlen($revisionData->wikitext) - strlen($previous->wikitext); | ||||||
| 								$affectedBytes = (($affectedBytes >= 0) ? '+' : '') . $affectedBytes; | 								$percentage    = round(100 * $affectedBytes / strlen($revisionData->wikitext), 2); | ||||||
| 								$affectedBytes = '<a href="' . $link .'">' . $affectedBytes . ' bytes</a>'; | 								$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> | 					<tr> | ||||||
| 						<td><?php echo $history->revision; ?></td>
 | 						<td><?php echo $revisionData->revision; ?></td>
 | ||||||
| 						<td><?php echo $history->created; ?></td>
 | 						<td><?php echo $revisionData->created; ?></td>
 | ||||||
| 						<td><?php echo $history->message; ?></td>
 | 						<td><?php echo $revisionData->message; ?></td>
 | ||||||
| 						<td><?php echo $history->created_user_id; ?></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><?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> | 					</tr> | ||||||
| 					 | 					 | ||||||
| 						<?php  | 						<?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> | 				</table> | ||||||
| 				 | 				 | ||||||
| 		<?php | 		<?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