Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
791ddac
Add interactive tree view to JSON parser
GhDj Dec 2, 2025
340739e
Add online code editor with live preview
GhDj Dec 3, 2025
dc6d07f
Refactor code editor with standalone Monaco integration
GhDj Dec 3, 2025
d5b5dd2
Add code editor enhancements: dynamic tabs, console, shortcuts modal
GhDj Dec 3, 2025
2c8b7f1
Merge pull request #18 from GhDj/feature/json-parser-enhancements
GhDj Dec 14, 2025
3eeda61
Merge pull request #19 from GhDj/feature/code-editor
GhDj Dec 14, 2025
4acb189
Redesign dark/light toggle with animated day/night scene
GhDj Dec 14, 2025
574393a
Merge pull request #20 from GhDj/feature/theme-toggle-redesign
GhDj Dec 14, 2025
022f810
Add Regex Tester tool
GhDj Dec 14, 2025
b7d6ab2
Merge pull request #21 from GhDj/feature/regex-tester
GhDj Dec 14, 2025
1b564e7
Add Base Converter tool
GhDj Dec 14, 2025
da33552
Add Slug Generator tool
GhDj Dec 14, 2025
f4d7776
Add Color Picker tool
GhDj Dec 14, 2025
08d04fd
Add QR Code Generator tool
GhDj Dec 14, 2025
22e03b9
Add HTML Entity Encoder tool
GhDj Dec 14, 2025
e26a01e
Add Text Case Converter tool
GhDj Dec 14, 2025
ae48144
Add Password Generator tool
GhDj Dec 14, 2025
deed4f6
Add Lorem Ipsum Generator tool
GhDj Dec 14, 2025
ed47802
Add Cron Expression Parser tool
GhDj Dec 14, 2025
cd213db
Fix syntax errors in merged tool files
GhDj Dec 15, 2025
efdd313
Merge pull request #34 from GhDj/feature/merge-all-tools
GhDj Dec 15, 2025
0278624
Add JWT Decoder tool
GhDj Dec 14, 2025
234edb9
Add Timestamp Converter tool
GhDj Dec 14, 2025
fa9acbc
Add Diff Checker tool
GhDj Dec 14, 2025
e4c7024
Merge pull request #35 from GhDj/feature/merge-jwt-timestamp-diff
GhDj Dec 15, 2025
df91894
Prepare v1.2.0 release
GhDj Dec 15, 2025
9f406f9
Fix PHP parse error in code editor - bump to v1.2.1
GhDj Dec 15, 2025
1fceb4a
Merge pull request #36 from GhDj/fix/code-editor-php-parse-error
GhDj Dec 15, 2025
09dff08
Add Sort Lines tool
GhDj Dec 15, 2025
36d811c
Merge pull request #37 from GhDj/feature/sort-lines
GhDj Dec 15, 2025
3d88fe8
Prepare v1.3.0 release
GhDj Dec 15, 2025
4cb4145
Merge main into release/v1.3.0 - resolve conflicts
GhDj Dec 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false

[*.{yml,yaml}]
indent_size = 2

[compose.yaml]
indent_size = 4
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,26 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.3.0] - 2025-12-15

### Added

- **Sort Lines**: New text line manipulation tool
- Sort alphabetically (A-Z, Z-A)
- Natural sort for alphanumeric strings (file1, file2, file10)
- Numeric sort (ascending/descending)
- Sort by line length
- Reverse line order
- Remove duplicates (dedupe)
- Shuffle/randomize lines
- Options: case sensitive, trim whitespace, remove empty lines

## [1.2.1] - 2025-12-15

### Fixed

- Code Editor: Fix PHP parse error when loading the page (`<?php` string in JavaScript was interpreted as PHP tag)

## [1.2.0] - 2025-12-15

### Added
Expand Down Expand Up @@ -178,6 +198,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- RESTful API endpoints for all tools
- 146 tests with 386 assertions

[1.3.0]: https://github.com/GhDj/dev-tools/releases/tag/v1.3.0
[1.2.1]: https://github.com/GhDj/dev-tools/releases/tag/v1.2.1
[1.2.0]: https://github.com/GhDj/dev-tools/releases/tag/v1.2.0
[1.1.0]: https://github.com/GhDj/dev-tools/releases/tag/v1.1.0
[1.0.0]: https://github.com/GhDj/dev-tools/releases/tag/v1.0.0
11 changes: 11 additions & 0 deletions app/Http/Controllers/ToolController.php
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,12 @@ public function index(): View
'route' => 'tools.diff',
'icon' => 'diff',
],
[
'name' => 'Sort Lines',
'description' => 'Sort, deduplicate, reverse, and shuffle lines',
'route' => 'tools.sort-lines',
'icon' => 'sort',
],
];

return view('home', compact('tools'));
Expand Down Expand Up @@ -266,4 +272,9 @@ public function diff(): View
{
return view('tools.diff');
}

public function sortLines(): View
{
return view('tools.sort-lines');
}
}
35 changes: 35 additions & 0 deletions phpunit.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="vendor/autoload.php"
colors="true"
>
<testsuites>
<testsuite name="Unit">
<directory>tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory>tests/Feature</directory>
</testsuite>
</testsuites>
<source>
<include>
<directory>app</directory>
</include>
</source>
<php>
<env name="APP_ENV" value="testing"/>
<env name="APP_MAINTENANCE_DRIVER" value="file"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="BROADCAST_CONNECTION" value="null"/>
<env name="CACHE_STORE" value="array"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
<env name="MAIL_MAILER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="PULSE_ENABLED" value="false"/>
<env name="TELESCOPE_ENABLED" value="false"/>
<env name="NIGHTWATCH_ENABLED" value="false"/>
</php>
</phpunit>
5 changes: 5 additions & 0 deletions resources/views/home.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,11 @@
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17V7m0 10a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2h2a2 2 0 012 2m0 10a2 2 0 002 2h2a2 2 0 002-2M9 7a2 2 0 012-2h2a2 2 0 012 2m0 10V7m0 10a2 2 0 002 2h2a2 2 0 002-2V7a2 2 0 00-2-2h-2a2 2 0 00-2 2"/>
</svg>
@break
@case('sort')
<svg class="w-6 h-6 text-indigo-600 dark:text-indigo-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12"/>
</svg>
@break
@endswitch
</div>
<div class="flex-1 min-w-0">
Expand Down
2 changes: 1 addition & 1 deletion resources/views/layouts/app.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ class="absolute top-1 w-6 h-6 rounded-full shadow-lg transition-all duration-500
<a href="{{ route('about') }}" class="hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors">About</a>
<a href="{{ route('privacy') }}" class="hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors">Privacy</a>
<a href="https://github.com/GhDj/dev-tools" target="_blank" rel="noopener noreferrer" class="hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors">GitHub</a>
<span class="text-gray-500 dark:text-gray-500">v1.2.0</span>
<span class="text-gray-500 dark:text-gray-500">v1.3.0</span>
</div>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion resources/views/tools/code-editor.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,7 @@ function getDefaultContent(language) {
case 'css': return '/* Styles */\n';
case 'javascript': return '// JavaScript\n';
case 'json': return '{\n \n}';
case 'php': return '<?php\n\n';
case 'php': return '<' + '?php\n\n';
case 'sql': return '-- SQL Query\n';
default: return '';
}
Expand Down
Loading