decatur-vote/diffs-viewer

一个小型库,用于查看差异,由taeluf/liaison和decatur-vote/diffs-db构建

v1.0.x-dev 2023-11-01 15:09 UTC

This package is auto-updated.

Last update: 2024-09-30 01:50:59 UTC


README

差异查看器

这是DecaturVote.com的差异查看器。使用Liaison构建。差异由decatur-vote/diffs-dbdecatur-vote/text-diff管理。

安装

composer require decatur-vote/diffs-viewer v1.0.x-dev   

或者在您的composer.json

{"require":{ "decatur-vote/diffs-viewer": "v1.0.x-dev"}}  

路由

默认基本URL为/diff/。(我认为Package::base_url可以更改,但我不确定如何更改,因为Liaison没有文档说明。)

  • /diff/{uuid}/ - 显示特定源uuid的差异。如果$integration->can_access_diff($diff)返回false,则不会显示更多差异或全文。如果第一个差异无法访问,则原始文本也不会显示。
  • /diff/admin/ - 查看可用差异列表(按源uuid分组)。只有当$integration->canViewAdminPages()返回true时才可查看
  • /diff/diffs.css - 查看差异的基本CSS。当请求/diff/{uuid}/时将自动添加。

使用方法

要设置查看器:使用Liaison设置它,调整样式,并添加一个用于所需回调的Integration类。

注意:设置decatur-vote/diffs-db以实际存储和管理您的差异,以便可以查看。

使用Liaison设置

<?php  
$viewer_app = new \Lia\Package\Server($lia, 'decatur-vote:diffs-viewer', dirname(__DIR__).'/src/');    
$viewer_app->integration = new \MyIntegrationClass();  

设置集成

定义MyIntegrationClass。它必须实现src/IntegrationInterface.php:(这是一个来自我们测试的简单版本)

<?php  
  
namespace DecaturVote\DiffsViewer\Test;  
  
  
class Integration implements \DecaturVote\DiffsViewer\IntegrationInterface {  
  
    protected \PDO $pdo;   
  
    public function __construct(\PDO $pdo){  
        $this->pdo = $pdo;  
    }  
  
    public function getPdo(): \PDO{  
        return $this->pdo;  
    }  
  
    public function canViewAdminPages(): bool {  
        return true;  
    }  
  
    public function get_current_text(string $uuid): string {  
        return file_get_contents(__DIR__.'/../input/text-'.$uuid.'.txt');  
    }  
  
    public function can_access_diff(\DecaturVote\DiffDb\TextDiff $diff): bool {  
        return true;  
    }  
  
    public function clean_diff_opps(string $diff_ops): string {  
        return $diff_ops;  
    }  
  
    public function clean_text(string $text): string{  
        return str_replace("\n", "\n<br>",$text);  
    }  
  
    public function diffs_will_display(\Lia $lia): void {  
        // $lia->addResourceFile('path/to/styles.css');  
    }  
}  

样式

内建的唯一样式是用于差异列表的white-space:pre。请参阅src/public/diffs.css并根据需要覆盖样式

/** Container for displaying diffs */  
.DiffList {  
  
}  
  
/** the full text for the current iteration */  
.DiffList .full_text {  
  
}  
  
/** The diff operations */  
.DiffList .changes {  
    white-space: pre;  
}  

测试

设置MySQL测试设置

DiffsViewer根目录下创建文件mysql_settings.json,并用您的开发环境设置填充

警告:运行测试将删除您数据库中的所有文本差异

{  
    "database": "dbname",  
    "host": "localhost",  
    "user": "user_name",  
    "password": "bad_password"  
}  

然后您需要运行vendor/bin/phptest server,访问本地主机URL,然后转到/diff/admin/

截图

这些截图没有额外的样式或页面主题。

/diff/admin/:
3 row table showing uuid, diff count, and last diff date/time

/diff/{uuid}/:
A web page showing original text, a history of different versions, and the changes to yield each version