mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-07 03:09:44 +03:00
Compare commits
295 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a345b74bb | ||
|
|
8ffc3a4abf | ||
|
|
7233c1c7b2 | ||
|
|
1309a01131 | ||
|
|
0333185b6d | ||
|
|
83f89f64e8 | ||
|
|
11a1a6fb16 | ||
|
|
882c609296 | ||
|
|
176a0dcd59 | ||
|
|
94b0f70bfa | ||
|
|
08b2a77d41 | ||
|
|
3e8e9a23cf | ||
|
|
58b83b64c8 | ||
|
|
dfe4cde6ee | ||
|
|
d11144d9e2 | ||
|
|
f96b0ea5f3 | ||
|
|
815f8d79ed | ||
|
|
b62dab32e0 | ||
|
|
262f863981 | ||
|
|
a4c94390a1 | ||
|
|
53f3cca85d | ||
|
|
ed08bbcecc | ||
|
|
de97ebf9b7 | ||
|
|
f492a660a8 | ||
|
|
09436836a5 | ||
|
|
bb455d7788 | ||
|
|
009212ab80 | ||
|
|
ba9cb591c8 | ||
|
|
d00ac2f34e | ||
|
|
bd4dc6d463 | ||
|
|
d91180a909 | ||
|
|
bc2913a5cb | ||
|
|
4802394562 | ||
|
|
1755556468 | ||
|
|
01cdbdb7ae | ||
|
|
fc8bbf3eab | ||
|
|
3cdab19319 | ||
|
|
5661d20e87 | ||
|
|
91f80123e8 | ||
|
|
7a0636d0f8 | ||
|
|
0fe5bdfbac | ||
|
|
f88687e977 | ||
|
|
68d437d05b | ||
|
|
1e56aaea04 | ||
|
|
dab170a6fe | ||
|
|
a8de717d9b | ||
|
|
78fe95b6fc | ||
|
|
e0c24e41aa | ||
|
|
fa8553839b | ||
|
|
b8fcefc794 | ||
|
|
88bcb68fcb | ||
|
|
7c000553ae | ||
|
|
391fa35c80 | ||
|
|
c6773a8c9f | ||
|
|
9b226e7d39 | ||
|
|
9865446267 | ||
|
|
926abbe776 | ||
|
|
4fabef3a57 | ||
|
|
5ef4cd80c3 | ||
|
|
e01f23583f | ||
|
|
7792cb3915 | ||
|
|
be26253a18 | ||
|
|
1bdd1f8189 | ||
|
|
fa62c79b17 | ||
|
|
d7d8fa1e5b | ||
|
|
18562f1e10 | ||
|
|
86090a694f | ||
|
|
1ee8287c73 | ||
|
|
8eb98cd591 | ||
|
|
0f9ba21b05 | ||
|
|
834f8e7046 | ||
|
|
32e3399334 | ||
|
|
2d8698a218 | ||
|
|
454fb883a2 | ||
|
|
6f4a6ab8ea | ||
|
|
9c4b6f36f1 | ||
|
|
78886b1e67 | ||
|
|
d9debaf032 | ||
|
|
d4360d6347 | ||
|
|
175b1785c0 | ||
|
|
c8740c0171 | ||
|
|
91ee895a74 | ||
|
|
a045e46571 | ||
|
|
44eaa65c3b | ||
|
|
0a22af7b14 | ||
|
|
b54702ab08 | ||
|
|
c4fdcfc5d1 | ||
|
|
cb8117e8df | ||
|
|
5a218d5056 | ||
|
|
8dbc5cf9c6 | ||
|
|
71e81615a3 | ||
|
|
611d37da04 | ||
|
|
0e799a3857 | ||
|
|
b91d6e2bfa | ||
|
|
ea16ad7e94 | ||
|
|
ba6eb54552 | ||
|
|
f705e7683b | ||
|
|
dc996adb20 | ||
|
|
a64c638ccc | ||
|
|
359c067279 | ||
|
|
66a746e297 | ||
|
|
a4d43ee24b | ||
|
|
f7793a70a9 | ||
|
|
ceba3d31fb | ||
|
|
eecc08edde | ||
|
|
eb19aadc75 | ||
|
|
06c81e69b9 | ||
|
|
3dc3d4a639 | ||
|
|
94c59c1e3d | ||
|
|
4d2205853a | ||
|
|
751772b87a | ||
|
|
76e30869e1 | ||
|
|
3edc9fe9eb | ||
|
|
616c62703e | ||
|
|
ecd56917e7 | ||
|
|
e22c9cae91 | ||
|
|
29ddb6e1b9 | ||
|
|
2ff90e2ff0 | ||
|
|
04ecc128a2 | ||
|
|
87d1d3423b | ||
|
|
4818192a2a | ||
|
|
965dd97f54 | ||
|
|
195b74926c | ||
|
|
2120db12b2 | ||
|
|
ed563fef28 | ||
|
|
0d31a8e3f1 | ||
|
|
b8354b974b | ||
|
|
034c1e289d | ||
|
|
f31605a3de | ||
|
|
e7cc75c74d | ||
|
|
4b79d5e4e8 | ||
|
|
34854915b3 | ||
|
|
af6f34b529 | ||
|
|
fb82a2b896 | ||
|
|
5b464938b6 | ||
|
|
81f954890d | ||
|
|
0e2bbcec62 | ||
|
|
fdd339f525 | ||
|
|
8cf7d6a83d | ||
|
|
58a5008718 | ||
|
|
c44a8df55d | ||
|
|
ff1494c519 | ||
|
|
b8ce8fd852 | ||
|
|
75e7454a5f | ||
|
|
2558ea8931 | ||
|
|
ac0f47a4b2 | ||
|
|
4f16129869 | ||
|
|
64a8037fdd | ||
|
|
7502ba1bc8 | ||
|
|
33a04697ef | ||
|
|
b70a5c0cdb | ||
|
|
9443ae9f40 | ||
|
|
220c2a4102 | ||
|
|
e9914eb301 | ||
|
|
934512d09c | ||
|
|
9102c90986 | ||
|
|
c3e74219c4 | ||
|
|
13c9d7bc2d | ||
|
|
119b539586 | ||
|
|
29a5c180f0 | ||
|
|
7906602291 | ||
|
|
6dafe773ff | ||
|
|
25bc28a1be | ||
|
|
4c561c7fa0 | ||
|
|
95b3e78573 | ||
|
|
63a345bc93 | ||
|
|
e093a172cb | ||
|
|
4b01f8934b | ||
|
|
bc116b45b5 | ||
|
|
a059960b9e | ||
|
|
7770966fed | ||
|
|
d7adcf6c69 | ||
|
|
04a364dcc3 | ||
|
|
db83ac7eaa | ||
|
|
3ca9dddf61 | ||
|
|
bf74f53ca7 | ||
|
|
9d67efb4a4 | ||
|
|
3a39b9f440 | ||
|
|
27f7aab375 | ||
|
|
337da0c467 | ||
|
|
f56b3560c4 | ||
|
|
02dfe11ce6 | ||
|
|
83d06beb70 | ||
|
|
a8cfc059c8 | ||
|
|
1614b2bab0 | ||
|
|
4bdec0d214 | ||
|
|
6a7d7e7c2b | ||
|
|
30d4674657 | ||
|
|
9f961f95f8 | ||
|
|
bab99a26ec | ||
|
|
9a7fecd269 | ||
|
|
a8dc0d449b | ||
|
|
a0381f76bf | ||
|
|
6102f66daa | ||
|
|
c6134d162d | ||
|
|
2046f9b9de | ||
|
|
ac3ba594a4 | ||
|
|
22df25a480 | ||
|
|
8b30c7f02e | ||
|
|
757cdddc7c | ||
|
|
df95e99680 | ||
|
|
5a6d544db7 | ||
|
|
16117d329c | ||
|
|
e90da18ada | ||
|
|
a08d80e1cc | ||
|
|
6258175922 | ||
|
|
15736777a0 | ||
|
|
75915e8a94 | ||
|
|
9bde0ae4ea | ||
|
|
0c802d1f86 | ||
|
|
b7a96c6466 | ||
|
|
4b645a82c7 | ||
|
|
d599b77b6f | ||
|
|
26e93dc8c1 | ||
|
|
a4c9a8491b | ||
|
|
70ee636d87 | ||
|
|
b35f6dbb03 | ||
|
|
67d9e24d8f | ||
|
|
3903fda6ca | ||
|
|
441e46ebaa | ||
|
|
1f4260f359 | ||
|
|
dc0bf8ad4e | ||
|
|
102e326e6a | ||
|
|
2b25bf6f3b | ||
|
|
f93280696d | ||
|
|
1787391b07 | ||
|
|
a74a8ee483 | ||
|
|
7fa5405cb7 | ||
|
|
6725ddcc41 | ||
|
|
bce941db3f | ||
|
|
6d926048ec | ||
|
|
5335c973b4 | ||
|
|
15c3e5c96e | ||
|
|
a5d5904969 | ||
|
|
598758b991 | ||
|
|
9926e23bc8 | ||
|
|
5d3264bc63 | ||
|
|
d71f819f95 | ||
|
|
ee13509760 | ||
|
|
82d7bb1f32 | ||
|
|
cdfda508d8 | ||
|
|
da941e584f | ||
|
|
65874d7b96 | ||
|
|
ac9b8f405c | ||
|
|
8d1419a12e | ||
|
|
04f7a7d301 | ||
|
|
c10d2a1493 | ||
|
|
97bbf79ffd | ||
|
|
f7b01ae53d | ||
|
|
d704e1dbba | ||
|
|
ef2ff5e093 | ||
|
|
7caed3b0db | ||
|
|
45641d0754 | ||
|
|
4b1d08ba99 | ||
|
|
160fa99ba4 | ||
|
|
d2a5ab49ed | ||
|
|
c6404d8917 | ||
|
|
7113807f12 | ||
|
|
be711215e8 | ||
|
|
7e3b404240 | ||
|
|
e86901ca20 | ||
|
|
bdfa61c8b2 | ||
|
|
2cc36787f5 | ||
|
|
448ac61b48 | ||
|
|
753f6394f7 | ||
|
|
b1faf65934 | ||
|
|
09f478bd74 | ||
|
|
a0497feddd | ||
|
|
789693bde9 | ||
|
|
1fe933e4ea | ||
|
|
724b4b5a70 | ||
|
|
1778a56146 | ||
|
|
744865fcb2 | ||
|
|
7f8c8b448d | ||
|
|
a67c53826d | ||
|
|
14b131e850 | ||
|
|
9b55a52b85 | ||
|
|
db1d10e80f | ||
|
|
1be576966f | ||
|
|
b97e792c5f | ||
|
|
8dec674cc3 | ||
|
|
f784c03746 | ||
|
|
148e172fe8 | ||
|
|
56ae86646f | ||
|
|
1d2b6fdfa2 | ||
|
|
4fc75beed4 | ||
|
|
3b3bc0c4bf | ||
|
|
910faab88e | ||
|
|
f184d763ad | ||
|
|
a91d42634d | ||
|
|
f517ef3616 | ||
|
|
e99507ddcf | ||
|
|
d2cacf1945 | ||
|
|
448ac1405b | ||
|
|
6ad21ce885 |
10
.github/ISSUE_TEMPLATE/config.yml
vendored
10
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,13 +1,9 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Discord Chat Support
|
||||
- name: Discord chat support
|
||||
url: https://discord.gg/ztkBqR2
|
||||
about: Realtime support & chat with the BookStack community and the team.
|
||||
about: Realtime support / chat with the community and the team.
|
||||
|
||||
- name: Debugging & Common Issues
|
||||
url: https://www.bookstackapp.com/docs/admin/debugging/
|
||||
about: Find details on how to debug issues and view common issues with their resolutions.
|
||||
|
||||
- name: Official Support Plans
|
||||
url: https://www.bookstackapp.com/support/
|
||||
about: View our official support plans that offer assured support for business.
|
||||
about: Find details on how to debug issues and view common issues with thier resolutions.
|
||||
|
||||
1
.github/translators.txt
vendored
1
.github/translators.txt
vendored
@@ -242,4 +242,3 @@ sgenc :: Turkish
|
||||
Shukrullo (vodiylik) :: Uzbek
|
||||
William W. (Nevnt) :: Chinese Traditional
|
||||
eamaro :: Portuguese
|
||||
Ypsilon-dev :: Arabic
|
||||
|
||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -5,10 +5,10 @@ Homestead.yaml
|
||||
.idea
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
/public/dist
|
||||
/public/dist/*.map
|
||||
/public/plugins
|
||||
/public/css
|
||||
/public/js
|
||||
/public/css/*.map
|
||||
/public/js/*.map
|
||||
/public/bower
|
||||
/public/build/
|
||||
/storage/images
|
||||
|
||||
@@ -28,10 +28,10 @@ class TagRepo
|
||||
'name',
|
||||
($searchTerm || $nameFilter) ? 'value' : DB::raw('COUNT(distinct value) as `values`'),
|
||||
DB::raw('COUNT(id) as usages'),
|
||||
DB::raw('SUM(IF(entity_type = \'page\', 1, 0)) as page_count'),
|
||||
DB::raw('SUM(IF(entity_type = \'chapter\', 1, 0)) as chapter_count'),
|
||||
DB::raw('SUM(IF(entity_type = \'book\', 1, 0)) as book_count'),
|
||||
DB::raw('SUM(IF(entity_type = \'bookshelf\', 1, 0)) as shelf_count'),
|
||||
DB::raw('SUM(IF(entity_type = \'BookStack\\\\Page\', 1, 0)) as page_count'),
|
||||
DB::raw('SUM(IF(entity_type = \'BookStack\\\\Chapter\', 1, 0)) as chapter_count'),
|
||||
DB::raw('SUM(IF(entity_type = \'BookStack\\\\Book\', 1, 0)) as book_count'),
|
||||
DB::raw('SUM(IF(entity_type = \'BookStack\\\\BookShelf\', 1, 0)) as shelf_count'),
|
||||
])
|
||||
->orderBy($nameFilter ? 'value' : 'name');
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ return [
|
||||
// to the server if the browser has a HTTPS connection. This will keep
|
||||
// the cookie from being sent to you if it can not be done securely.
|
||||
'secure' => env('SESSION_SECURE_COOKIE', null)
|
||||
?? Str::startsWith(env('APP_URL', ''), 'https:'),
|
||||
?? Str::startsWith(env('APP_URL'), 'https:'),
|
||||
|
||||
// HTTP Access Only
|
||||
// Setting this value to true will prevent JavaScript from accessing the
|
||||
|
||||
@@ -215,16 +215,14 @@ class ExportFormatter
|
||||
*/
|
||||
protected function containHtml(string $htmlContent): string
|
||||
{
|
||||
// Replace embed tags with images
|
||||
$htmlContent = preg_replace("/<embed (.*?)>/i", '<img $1>', $htmlContent);
|
||||
|
||||
// Replace image & embed src attributes with base64 encoded data strings
|
||||
$imageTagsOutput = [];
|
||||
preg_match_all("/<img .*?src=['\"](.*?)['\"].*?>/i", $htmlContent, $imageTagsOutput);
|
||||
preg_match_all("/\<img.*?src\=(\'|\")(.*?)(\'|\").*?\>/i", $htmlContent, $imageTagsOutput);
|
||||
|
||||
// Replace image src with base64 encoded image strings
|
||||
if (isset($imageTagsOutput[0]) && count($imageTagsOutput[0]) > 0) {
|
||||
foreach ($imageTagsOutput[0] as $index => $imgMatch) {
|
||||
$oldImgTagString = $imgMatch;
|
||||
$srcString = $imageTagsOutput[1][$index];
|
||||
$srcString = $imageTagsOutput[2][$index];
|
||||
$imageEncoded = $this->imageService->imageUriToBase64($srcString);
|
||||
if ($imageEncoded === null) {
|
||||
$imageEncoded = $srcString;
|
||||
@@ -234,13 +232,14 @@ class ExportFormatter
|
||||
}
|
||||
}
|
||||
|
||||
// Replace any relative links with full system URL
|
||||
$linksOutput = [];
|
||||
preg_match_all("/<a .*href=['\"](.*?)['\"].*?>/i", $htmlContent, $linksOutput);
|
||||
preg_match_all("/\<a.*href\=(\'|\")(.*?)(\'|\").*?\>/i", $htmlContent, $linksOutput);
|
||||
|
||||
// Replace image src with base64 encoded image strings
|
||||
if (isset($linksOutput[0]) && count($linksOutput[0]) > 0) {
|
||||
foreach ($linksOutput[0] as $index => $linkMatch) {
|
||||
$oldLinkString = $linkMatch;
|
||||
$srcString = $linksOutput[1][$index];
|
||||
$srcString = $linksOutput[2][$index];
|
||||
if (strpos(trim($srcString), 'http') !== 0) {
|
||||
$newSrcString = url($srcString);
|
||||
$newLinkString = str_replace($srcString, $newSrcString, $oldLinkString);
|
||||
@@ -249,6 +248,7 @@ class ExportFormatter
|
||||
}
|
||||
}
|
||||
|
||||
// Replace any relative links with system domain
|
||||
return $htmlContent;
|
||||
}
|
||||
|
||||
|
||||
@@ -360,7 +360,7 @@ class SearchRunner
|
||||
/** @var Connection $connection */
|
||||
$connection = $query->getConnection();
|
||||
$tagValue = (float) trim($connection->getPdo()->quote($tagValue), "'");
|
||||
$query->whereRaw("value {$tagOperator} {$tagValue}");
|
||||
$query->whereRaw("value ${tagOperator} ${tagValue}");
|
||||
} else {
|
||||
$query->where('value', $tagOperator, $tagValue);
|
||||
}
|
||||
|
||||
@@ -19,13 +19,10 @@ class JsonDebugException extends Exception
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert this exception into a response.
|
||||
* We add a manual data conversion to UTF8 to ensure any binary data is presentable as a JSON string.
|
||||
* Covert this exception into a response.
|
||||
*/
|
||||
public function render(): JsonResponse
|
||||
{
|
||||
$cleaned = mb_convert_encoding($this->data, 'UTF-8');
|
||||
|
||||
return response()->json($cleaned);
|
||||
return response()->json($this->data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,11 +127,9 @@ abstract class Controller extends BaseController
|
||||
protected function streamedDownloadResponse($stream, string $fileName): StreamedResponse
|
||||
{
|
||||
return response()->stream(function () use ($stream) {
|
||||
|
||||
// End & flush the output buffer, if we're in one, otherwise we still use memory.
|
||||
// Output buffer may or may not exist depending on PHP `output_buffering` setting.
|
||||
// End & flush the output buffer otherwise we still seem to use memory.
|
||||
// Ignore in testing since output buffers are used to gather a response.
|
||||
if (!empty(ob_get_status()) && !app()->runningUnitTests()) {
|
||||
if (!app()->runningUnitTests()) {
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
@@ -219,6 +217,6 @@ abstract class Controller extends BaseController
|
||||
*/
|
||||
protected function getImageValidationRules(): array
|
||||
{
|
||||
return ['image_extension', 'mimes:jpeg,png,gif,webp,svg', 'max:' . (config('app.upload_limit') * 1000)];
|
||||
return ['image_extension', 'mimes:jpeg,png,gif,webp', 'max:' . (config('app.upload_limit') * 1000)];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,11 +76,8 @@ class DrawioImageController extends Controller
|
||||
return $this->jsonError('Image data could not be found');
|
||||
}
|
||||
|
||||
$isSvg = strtolower(pathinfo($image->path, PATHINFO_EXTENSION)) === 'svg';
|
||||
$uriPrefix = $isSvg ? 'data:image/svg+xml;base64,' : 'data:image/png;base64,';
|
||||
|
||||
return response()->json([
|
||||
'content' => $uriPrefix . base64_encode($imageData),
|
||||
'content' => base64_encode($imageData),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ class SettingController extends Controller
|
||||
$this->logActivity(ActivityType::SETTINGS_UPDATE, $category);
|
||||
$this->showSuccessNotification(trans('settings.settings_save_success'));
|
||||
|
||||
return redirect("/settings/{$category}");
|
||||
return redirect("/settings/${category}");
|
||||
}
|
||||
|
||||
protected function ensureCategoryExists(string $category): void
|
||||
|
||||
@@ -11,7 +11,7 @@ class Localization
|
||||
/**
|
||||
* Array of right-to-left locales.
|
||||
*/
|
||||
protected $rtlLocales = ['ar', 'fa', 'he'];
|
||||
protected $rtlLocales = ['ar', 'he'];
|
||||
|
||||
/**
|
||||
* Map of BookStack locale names to best-estimate system locale names.
|
||||
@@ -30,7 +30,6 @@ class Localization
|
||||
'es_AR' => 'es_AR',
|
||||
'et' => 'et_EE',
|
||||
'eu' => 'eu_ES',
|
||||
'fa' => 'fa_IR',
|
||||
'fr' => 'fr_FR',
|
||||
'he' => 'he_IL',
|
||||
'hr' => 'hr_HR',
|
||||
|
||||
@@ -35,9 +35,7 @@ class Request extends LaravelRequest
|
||||
$appUrl = config('app.url', null);
|
||||
|
||||
if ($appUrl) {
|
||||
$parsedBaseUrl = rtrim(implode('/', array_slice(explode('/', $appUrl), 3)), '/');
|
||||
|
||||
return empty($parsedBaseUrl) ? '' : ('/' . $parsedBaseUrl);
|
||||
return '/' . rtrim(implode('/', array_slice(explode('/', $appUrl), 3)), '/');
|
||||
}
|
||||
|
||||
return parent::getBaseUrl();
|
||||
|
||||
@@ -148,8 +148,7 @@ class ImageRepo
|
||||
*/
|
||||
public function saveDrawing(string $base64Uri, int $uploadedTo): Image
|
||||
{
|
||||
$isSvg = strpos($base64Uri, 'data:image/svg+xml;') === 0;
|
||||
$name = 'Drawing-' . user()->id . '-' . time() . ($isSvg ? '.svg' : '.png');
|
||||
$name = 'Drawing-' . user()->id . '-' . time() . '.png';
|
||||
|
||||
return $this->imageService->saveNewFromBase64Uri($base64Uri, $name, 'drawio', $uploadedTo);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ class ImageService
|
||||
protected $image;
|
||||
protected $fileSystem;
|
||||
|
||||
protected static $supportedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'];
|
||||
protected static $supportedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
|
||||
|
||||
/**
|
||||
* ImageService constructor.
|
||||
@@ -230,14 +230,6 @@ class ImageService
|
||||
return strtolower(pathinfo($image->path, PATHINFO_EXTENSION)) === 'gif';
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the given image is an SVG image file.
|
||||
*/
|
||||
protected function isSvg(Image $image): bool
|
||||
{
|
||||
return strtolower(pathinfo($image->path, PATHINFO_EXTENSION)) === 'svg';
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the given image and image data is apng.
|
||||
*/
|
||||
@@ -263,8 +255,8 @@ class ImageService
|
||||
*/
|
||||
public function getThumbnail(Image $image, ?int $width, ?int $height, bool $keepRatio = false): string
|
||||
{
|
||||
// Do not resize GIF images where we're not cropping or SVG images.
|
||||
if (($keepRatio && $this->isGif($image)) || $this->isSvg($image)) {
|
||||
// Do not resize GIF images where we're not cropping
|
||||
if ($keepRatio && $this->isGif($image)) {
|
||||
return $this->getPublicUrl($image->path);
|
||||
}
|
||||
|
||||
|
||||
107
composer.lock
generated
107
composer.lock
generated
@@ -58,16 +58,16 @@
|
||||
},
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.222.7",
|
||||
"version": "3.222.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "03d35eef5c509798d2c08587cfd9a7c33afe2260"
|
||||
"reference": "632621d97180e82d3adc1245a7b272774c30dbf5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/03d35eef5c509798d2c08587cfd9a7c33afe2260",
|
||||
"reference": "03d35eef5c509798d2c08587cfd9a7c33afe2260",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/632621d97180e82d3adc1245a7b272774c30dbf5",
|
||||
"reference": "632621d97180e82d3adc1245a7b272774c30dbf5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -143,9 +143,9 @@
|
||||
"support": {
|
||||
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
||||
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.222.7"
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.222.1"
|
||||
},
|
||||
"time": "2022-05-06T18:16:59+00:00"
|
||||
"time": "2022-04-28T18:17:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "bacon/bacon-qr-code",
|
||||
@@ -563,22 +563,22 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/dbal",
|
||||
"version": "3.3.6",
|
||||
"version": "3.3.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/dbal.git",
|
||||
"reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21"
|
||||
"reference": "719663b15983278227669c8595151586a2ff3327"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21",
|
||||
"reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21",
|
||||
"url": "https://api.github.com/repos/doctrine/dbal/zipball/719663b15983278227669c8595151586a2ff3327",
|
||||
"reference": "719663b15983278227669c8595151586a2ff3327",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"composer-runtime-api": "^2",
|
||||
"doctrine/cache": "^1.11|^2.0",
|
||||
"doctrine/deprecations": "^0.5.3|^1",
|
||||
"doctrine/deprecations": "^0.5.3",
|
||||
"doctrine/event-manager": "^1.0",
|
||||
"php": "^7.3 || ^8.0",
|
||||
"psr/cache": "^1|^2|^3",
|
||||
@@ -586,15 +586,15 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "9.0.0",
|
||||
"jetbrains/phpstorm-stubs": "2022.1",
|
||||
"phpstan/phpstan": "1.6.3",
|
||||
"phpstan/phpstan-strict-rules": "^1.2",
|
||||
"phpunit/phpunit": "9.5.20",
|
||||
"jetbrains/phpstorm-stubs": "2021.1",
|
||||
"phpstan/phpstan": "1.5.3",
|
||||
"phpstan/phpstan-strict-rules": "^1.1",
|
||||
"phpunit/phpunit": "9.5.16",
|
||||
"psalm/plugin-phpunit": "0.16.1",
|
||||
"squizlabs/php_codesniffer": "3.6.2",
|
||||
"symfony/cache": "^5.2|^6.0",
|
||||
"symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0",
|
||||
"vimeo/psalm": "4.23.0"
|
||||
"vimeo/psalm": "4.22.0"
|
||||
},
|
||||
"suggest": {
|
||||
"symfony/console": "For helpful console commands such as SQL execution and import of files."
|
||||
@@ -654,7 +654,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/dbal/issues",
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.3.6"
|
||||
"source": "https://github.com/doctrine/dbal/tree/3.3.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -670,29 +670,29 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-02T17:21:01+00:00"
|
||||
"time": "2022-04-05T09:50:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/deprecations",
|
||||
"version": "v1.0.0",
|
||||
"version": "v0.5.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/deprecations.git",
|
||||
"reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
|
||||
"reference": "9504165960a1f83cc1480e2be1dd0a0478561314"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
|
||||
"reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
|
||||
"url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314",
|
||||
"reference": "9504165960a1f83cc1480e2be1dd0a0478561314",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/coding-standard": "^9",
|
||||
"phpunit/phpunit": "^7.5|^8.5|^9.5",
|
||||
"psr/log": "^1|^2|^3"
|
||||
"doctrine/coding-standard": "^6.0|^7.0|^8.0",
|
||||
"phpunit/phpunit": "^7.0|^8.0|^9.0",
|
||||
"psr/log": "^1.0"
|
||||
},
|
||||
"suggest": {
|
||||
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
|
||||
@@ -711,9 +711,9 @@
|
||||
"homepage": "https://www.doctrine-project.org/",
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/deprecations/issues",
|
||||
"source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
|
||||
"source": "https://github.com/doctrine/deprecations/tree/v0.5.3"
|
||||
},
|
||||
"time": "2022-05-02T15:47:09+00:00"
|
||||
"time": "2021-03-21T12:59:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/event-manager",
|
||||
@@ -1790,16 +1790,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v8.83.11",
|
||||
"version": "v8.83.10",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "d85c34179f209977043502441f9e44ca432a14b4"
|
||||
"reference": "148ae59b7da6c3db6736374d357c5aaef9506fb7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/d85c34179f209977043502441f9e44ca432a14b4",
|
||||
"reference": "d85c34179f209977043502441f9e44ca432a14b4",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/148ae59b7da6c3db6736374d357c5aaef9506fb7",
|
||||
"reference": "148ae59b7da6c3db6736374d357c5aaef9506fb7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1959,7 +1959,7 @@
|
||||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2022-05-03T14:47:00+00:00"
|
||||
"time": "2022-04-27T14:07:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/serializable-closure",
|
||||
@@ -2909,16 +2909,16 @@
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "2.58.0",
|
||||
"version": "2.57.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/briannesbitt/Carbon.git",
|
||||
"reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055"
|
||||
"reference": "4a54375c21eea4811dbd1149fe6b246517554e78"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/97a34af22bde8d0ac20ab34b29d7bfe360902055",
|
||||
"reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055",
|
||||
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78",
|
||||
"reference": "4a54375c21eea4811dbd1149fe6b246517554e78",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2936,8 +2936,7 @@
|
||||
"phpmd/phpmd": "^2.9",
|
||||
"phpstan/extension-installer": "^1.0",
|
||||
"phpstan/phpstan": "^0.12.54 || ^1.0",
|
||||
"phpunit/php-file-iterator": "^2.0.5",
|
||||
"phpunit/phpunit": "^7.5.20 || ^8.5.23",
|
||||
"phpunit/phpunit": "^7.5.20 || ^8.5.14",
|
||||
"squizlabs/php_codesniffer": "^3.4"
|
||||
},
|
||||
"bin": [
|
||||
@@ -3002,7 +3001,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-25T19:31:17+00:00"
|
||||
"time": "2022-02-13T18:13:33+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
@@ -4096,16 +4095,16 @@
|
||||
},
|
||||
{
|
||||
"name": "psy/psysh",
|
||||
"version": "v0.11.4",
|
||||
"version": "v0.11.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/bobthecow/psysh.git",
|
||||
"reference": "05c544b339b112226ad14803e1e5b09a61957454"
|
||||
"reference": "7f7da640d68b9c9fec819caae7c744a213df6514"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/05c544b339b112226ad14803e1e5b09a61957454",
|
||||
"reference": "05c544b339b112226ad14803e1e5b09a61957454",
|
||||
"url": "https://api.github.com/repos/bobthecow/psysh/zipball/7f7da640d68b9c9fec819caae7c744a213df6514",
|
||||
"reference": "7f7da640d68b9c9fec819caae7c744a213df6514",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4120,13 +4119,15 @@
|
||||
"symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"bamarni/composer-bin-plugin": "^1.2"
|
||||
"bamarni/composer-bin-plugin": "^1.2",
|
||||
"hoa/console": "3.17.05.02"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
|
||||
"ext-pdo-sqlite": "The doc command requires SQLite to work.",
|
||||
"ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
|
||||
"ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history."
|
||||
"ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
|
||||
"hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
|
||||
},
|
||||
"bin": [
|
||||
"bin/psysh"
|
||||
@@ -4166,9 +4167,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/bobthecow/psysh/issues",
|
||||
"source": "https://github.com/bobthecow/psysh/tree/v0.11.4"
|
||||
"source": "https://github.com/bobthecow/psysh/tree/v0.11.2"
|
||||
},
|
||||
"time": "2022-05-06T12:49:14+00:00"
|
||||
"time": "2022-02-28T15:28:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ralouphie/getallheaders",
|
||||
@@ -9004,16 +9005,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.6.7",
|
||||
"version": "1.6.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "d41c39cb2e487663bce9bbd97c660e244b73abad"
|
||||
"reference": "6128620b98292e0b69ea6d799871d77163681c8e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/d41c39cb2e487663bce9bbd97c660e244b73abad",
|
||||
"reference": "d41c39cb2e487663bce9bbd97c660e244b73abad",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/6128620b98292e0b69ea6d799871d77163681c8e",
|
||||
"reference": "6128620b98292e0b69ea6d799871d77163681c8e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -9039,7 +9040,7 @@
|
||||
"description": "PHPStan - PHP Static Analysis Tool",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan/issues",
|
||||
"source": "https://github.com/phpstan/phpstan/tree/1.6.7"
|
||||
"source": "https://github.com/phpstan/phpstan/tree/1.6.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -9059,7 +9060,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-04T22:55:41+00:00"
|
||||
"time": "2022-04-28T11:27:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
|
||||
62
public/dist/app.js
vendored
Normal file
62
public/dist/app.js
vendored
Normal file
File diff suppressed because one or more lines are too long
33
public/dist/code.js
vendored
Normal file
33
public/dist/code.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/dist/export-styles.css
vendored
Normal file
1
public/dist/export-styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/dist/print-styles.css
vendored
Normal file
1
public/dist/print-styles.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
:root{--color-primary: #206ea7;--color-primary-light: rgba(32,110,167,0.15);--color-page: #206ea7;--color-page-draft: #7e50b1;--color-chapter: #af4d0d;--color-book: #077b70;--color-bookshelf: #a94747}header{display:none}html,body{font-size:12px;background-color:#fff}.page-content{margin:0 auto}.print-hidden{display:none !important}.tri-layout-container{grid-template-columns:1fr;grid-template-areas:"b";margin-inline-start:0;margin-inline-end:0;display:block}.card{box-shadow:none}.content-wrap.card{padding-inline-start:0;padding-inline-end:0}/*# sourceMappingURL=print-styles.css.map */
|
||||
1
public/dist/styles.css
vendored
Normal file
1
public/dist/styles.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -18,8 +18,10 @@ class MarkdownEditor {
|
||||
this.markdown = new MarkdownIt({html: true});
|
||||
this.markdown.use(mdTasksLists, {label: true});
|
||||
|
||||
this.display = this.$refs.display;
|
||||
this.input = this.$refs.input;
|
||||
this.display = this.elem.querySelector('.markdown-display');
|
||||
|
||||
this.displayStylesLoaded = false;
|
||||
this.input = this.elem.querySelector('textarea');
|
||||
|
||||
this.cm = null;
|
||||
this.Code = null;
|
||||
@@ -30,13 +32,23 @@ class MarkdownEditor {
|
||||
});
|
||||
|
||||
this.onMarkdownScroll = this.onMarkdownScroll.bind(this);
|
||||
|
||||
const displayLoad = () => {
|
||||
this.displayDoc = this.display.contentDocument;
|
||||
this.init(cmLoadPromise);
|
||||
};
|
||||
|
||||
if (this.display.contentDocument.readyState === 'complete') {
|
||||
displayLoad();
|
||||
} else {
|
||||
this.display.addEventListener('load', displayLoad.bind(this));
|
||||
}
|
||||
|
||||
window.$events.emitPublic(this.elem, 'editor-markdown::setup', {
|
||||
markdownIt: this.markdown,
|
||||
displayEl: this.display,
|
||||
codeMirrorInstance: this.cm,
|
||||
});
|
||||
|
||||
this.init(cmLoadPromise);
|
||||
}
|
||||
|
||||
init(cmLoadPromise) {
|
||||
@@ -44,17 +56,17 @@ class MarkdownEditor {
|
||||
let lastClick = 0;
|
||||
|
||||
// Prevent markdown display link click redirect
|
||||
this.display.addEventListener('click', event => {
|
||||
const isDblClick = Date.now() - lastClick < 300;
|
||||
this.displayDoc.addEventListener('click', event => {
|
||||
let isDblClick = Date.now() - lastClick < 300;
|
||||
|
||||
const link = event.target.closest('a');
|
||||
let link = event.target.closest('a');
|
||||
if (link !== null) {
|
||||
event.preventDefault();
|
||||
window.open(link.getAttribute('href'));
|
||||
return;
|
||||
}
|
||||
|
||||
const drawing = event.target.closest('[drawio-diagram]');
|
||||
let drawing = event.target.closest('[drawio-diagram]');
|
||||
if (drawing !== null && isDblClick) {
|
||||
this.actionEditDrawing(drawing);
|
||||
return;
|
||||
@@ -65,10 +77,10 @@ class MarkdownEditor {
|
||||
|
||||
// Button actions
|
||||
this.elem.addEventListener('click', event => {
|
||||
const button = event.target.closest('button[data-action]');
|
||||
let button = event.target.closest('button[data-action]');
|
||||
if (button === null) return;
|
||||
|
||||
const action = button.getAttribute('data-action');
|
||||
let action = button.getAttribute('data-action');
|
||||
if (action === 'insertImage') this.actionInsertImage();
|
||||
if (action === 'insertLink') this.actionShowLinkSelector();
|
||||
if (action === 'insertDrawing' && (event.ctrlKey || event.metaKey)) {
|
||||
@@ -120,11 +132,35 @@ class MarkdownEditor {
|
||||
window.$events.emit('editor-markdown-change', content);
|
||||
|
||||
// Set body content
|
||||
this.display.innerHTML = html;
|
||||
this.displayDoc.body.className = 'page-content';
|
||||
this.displayDoc.body.innerHTML = html;
|
||||
|
||||
// Copy styles from page head and set custom styles for editor
|
||||
this.loadStylesIntoDisplay();
|
||||
}
|
||||
|
||||
loadStylesIntoDisplay() {
|
||||
if (this.displayStylesLoaded) return;
|
||||
this.displayDoc.documentElement.classList.add('markdown-editor-display');
|
||||
// Set display to be dark mode if parent is
|
||||
|
||||
if (document.documentElement.classList.contains('dark-mode')) {
|
||||
this.displayDoc.documentElement.style.backgroundColor = '#222';
|
||||
this.displayDoc.documentElement.classList.add('dark-mode');
|
||||
}
|
||||
|
||||
this.displayDoc.head.innerHTML = '';
|
||||
const styles = document.head.querySelectorAll('style,link[rel=stylesheet]');
|
||||
for (let style of styles) {
|
||||
const copy = style.cloneNode(true);
|
||||
this.displayDoc.head.appendChild(copy);
|
||||
}
|
||||
|
||||
this.displayStylesLoaded = true;
|
||||
}
|
||||
|
||||
onMarkdownScroll(lineCount) {
|
||||
const elems = this.display.children;
|
||||
const elems = this.displayDoc.body.children;
|
||||
if (elems.length <= lineCount) return;
|
||||
|
||||
const topElem = (lineCount === -1) ? elems[elems.length-1] : elems[lineCount];
|
||||
@@ -281,7 +317,7 @@ class MarkdownEditor {
|
||||
let cursor = cm.getCursor();
|
||||
let lineContent = cm.getLine(cursor.line);
|
||||
let lineLen = lineContent.length;
|
||||
let newLineContent;
|
||||
let newLineContent = lineContent;
|
||||
|
||||
if (lineContent.indexOf(start) === 0 && lineContent.slice(-end.length) === end) {
|
||||
newLineContent = lineContent.slice(start.length, lineContent.length - end.length);
|
||||
@@ -297,9 +333,9 @@ class MarkdownEditor {
|
||||
let selection = cm.getSelection();
|
||||
if (selection === '') return wrapLine(start, end);
|
||||
|
||||
let newSelection;
|
||||
let newSelection = selection;
|
||||
let frontDiff = 0;
|
||||
let endDiff;
|
||||
let endDiff = 0;
|
||||
|
||||
if (selection.indexOf(start) === 0 && selection.slice(-end.length) === end) {
|
||||
newSelection = selection.slice(start.length, selection.length - end.length);
|
||||
@@ -409,10 +445,10 @@ class MarkdownEditor {
|
||||
|
||||
DrawIO.show(url,() => {
|
||||
return Promise.resolve('');
|
||||
}, (drawingData) => {
|
||||
}, (pngData) => {
|
||||
|
||||
const data = {
|
||||
image: drawingData,
|
||||
image: pngData,
|
||||
uploaded_to: Number(this.pageId),
|
||||
};
|
||||
|
||||
@@ -426,7 +462,7 @@ class MarkdownEditor {
|
||||
}
|
||||
|
||||
insertDrawing(image, originalCursor) {
|
||||
const newText = DrawIO.buildDrawingContentHtml(image);
|
||||
const newText = `<div drawio-diagram="${image.id}"><img src="${image.url}"></div>`;
|
||||
this.cm.focus();
|
||||
this.cm.replaceSelection(newText);
|
||||
this.cm.setCursor(originalCursor.line, originalCursor.ch + newText.length);
|
||||
@@ -444,22 +480,21 @@ class MarkdownEditor {
|
||||
|
||||
DrawIO.show(drawioUrl, () => {
|
||||
return DrawIO.load(drawingId);
|
||||
}, (drawingData) => {
|
||||
}, (pngData) => {
|
||||
|
||||
let data = {
|
||||
image: drawingData,
|
||||
image: pngData,
|
||||
uploaded_to: Number(this.pageId),
|
||||
};
|
||||
|
||||
window.$http.post("/images/drawio", data).then(resp => {
|
||||
const image = resp.data;
|
||||
const newText = DrawIO.buildDrawingContentHtml(image);
|
||||
|
||||
const newContent = this.cm.getValue().split('\n').map(line => {
|
||||
const isDrawing = line.includes(`drawio-diagram="${drawingId}"`);
|
||||
return isDrawing ? newText : line;
|
||||
let newText = `<div drawio-diagram="${resp.data.id}"><img src="${resp.data.url}"></div>`;
|
||||
let newContent = this.cm.getValue().split('\n').map(line => {
|
||||
if (line.indexOf(`drawio-diagram="${drawingId}"`) !== -1) {
|
||||
return newText;
|
||||
}
|
||||
return line;
|
||||
}).join('\n');
|
||||
|
||||
this.cm.setValue(newContent);
|
||||
this.cm.setCursor(cursorPos);
|
||||
this.cm.focus();
|
||||
|
||||
@@ -24,7 +24,7 @@ class PageEditor {
|
||||
this.draftDisplayIcon = this.$refs.draftDisplayIcon;
|
||||
this.changelogInput = this.$refs.changelogInput;
|
||||
this.changelogDisplay = this.$refs.changelogDisplay;
|
||||
this.changeEditorButtons = this.$manyRefs.changeEditor || [];
|
||||
this.changeEditorButtons = this.$manyRefs.changeEditor;
|
||||
this.switchDialogContainer = this.$refs.switchDialog;
|
||||
|
||||
// Translations
|
||||
|
||||
@@ -55,7 +55,7 @@ function drawEventExport(message) {
|
||||
}
|
||||
|
||||
function drawEventSave(message) {
|
||||
drawPostMessage({action: 'export', format: 'xmlsvg', xml: message.xml, spin: 'Updating drawing'});
|
||||
drawPostMessage({action: 'export', format: 'xmlpng', xml: message.xml, spin: 'Updating drawing'});
|
||||
}
|
||||
|
||||
function drawEventInit() {
|
||||
@@ -96,21 +96,7 @@ async function upload(imageData, pageUploadedToId) {
|
||||
*/
|
||||
async function load(drawingId) {
|
||||
const resp = await window.$http.get(window.baseUrl(`/images/drawio/base64/${drawingId}`));
|
||||
return resp.data.content;
|
||||
return `data:image/png;base64,${resp.data.content}`;
|
||||
}
|
||||
|
||||
|
||||
function buildDrawingContentHtml(drawing) {
|
||||
const isSvg = drawing.url.split('.').pop().toLowerCase() === 'svg';
|
||||
const image = `<img src="${drawing.url}">`;
|
||||
const embed = `<embed src="${drawing.url}" type="image/svg+xml">`;
|
||||
return `<div drawio-diagram="${drawing.id}">${isSvg ? embed : image}</div>`
|
||||
}
|
||||
|
||||
function buildDrawingContentNode(drawing) {
|
||||
const div = document.createElement('div');
|
||||
div.innerHTML = buildDrawingContentHtml(drawing);
|
||||
return div.children[0];
|
||||
}
|
||||
|
||||
export default {show, close, upload, load, buildDrawingContentHtml, buildDrawingContentNode};
|
||||
export default {show, close, upload, load};
|
||||
@@ -1,5 +1,4 @@
|
||||
import DrawIO from "../services/drawio";
|
||||
import {build} from "./config";
|
||||
|
||||
let pageEditor = null;
|
||||
let currentNode = null;
|
||||
@@ -16,14 +15,15 @@ function isDrawing(node) {
|
||||
function showDrawingManager(mceEditor, selectedNode = null) {
|
||||
pageEditor = mceEditor;
|
||||
currentNode = selectedNode;
|
||||
|
||||
// Show image manager
|
||||
window.ImageManager.show(function (image) {
|
||||
if (selectedNode) {
|
||||
pageEditor.dom.replace(buildDrawingNode(image), selectedNode);
|
||||
let imgElem = selectedNode.querySelector('img');
|
||||
pageEditor.dom.setAttrib(imgElem, 'src', image.url);
|
||||
pageEditor.dom.setAttrib(selectedNode, 'drawio-diagram', image.id);
|
||||
} else {
|
||||
const drawingHtml = DrawIO.buildDrawingContentHtml(image);
|
||||
pageEditor.insertContent(drawingHtml);
|
||||
let imgHTML = `<div drawio-diagram="${image.id}" contenteditable="false"><img src="${image.url}"></div>`;
|
||||
pageEditor.insertContent(imgHTML);
|
||||
}
|
||||
}, 'drawio');
|
||||
}
|
||||
@@ -34,14 +34,7 @@ function showDrawingEditor(mceEditor, selectedNode = null) {
|
||||
DrawIO.show(options.drawioUrl, drawingInit, updateContent);
|
||||
}
|
||||
|
||||
function buildDrawingNode(drawing) {
|
||||
const drawingEl = DrawIO.buildDrawingContentNode(drawing);
|
||||
drawingEl.setAttribute('contenteditable', 'false');
|
||||
drawingEl.setAttribute('data-ephox-embed-iri', 'true');
|
||||
return drawingEl;
|
||||
}
|
||||
|
||||
async function updateContent(drawingData) {
|
||||
async function updateContent(pngData) {
|
||||
const id = "image-" + Math.random().toString(16).slice(2);
|
||||
const loadingImage = window.baseUrl('/loading.gif');
|
||||
|
||||
@@ -57,9 +50,11 @@ async function updateContent(drawingData) {
|
||||
// Handle updating an existing image
|
||||
if (currentNode) {
|
||||
DrawIO.close();
|
||||
let imgElem = currentNode.querySelector('img');
|
||||
try {
|
||||
const img = await DrawIO.upload(drawingData, options.pageId);
|
||||
pageEditor.dom.replace(buildDrawingNode(img), currentNode);
|
||||
const img = await DrawIO.upload(pngData, options.pageId);
|
||||
pageEditor.dom.setAttrib(imgElem, 'src', img.url);
|
||||
pageEditor.dom.setAttrib(currentNode, 'drawio-diagram', img.id);
|
||||
} catch (err) {
|
||||
handleUploadError(err);
|
||||
}
|
||||
@@ -67,11 +62,12 @@ async function updateContent(drawingData) {
|
||||
}
|
||||
|
||||
setTimeout(async () => {
|
||||
pageEditor.insertContent(`<div drawio-diagram contenteditable="false"><img src="${loadingImage}" alt="Loading" id="${id}"></div>`);
|
||||
pageEditor.insertContent(`<div drawio-diagram contenteditable="false"><img src="${loadingImage}" id="${id}"></div>`);
|
||||
DrawIO.close();
|
||||
try {
|
||||
const img = await DrawIO.upload(drawingData, options.pageId);
|
||||
pageEditor.dom.replace(buildDrawingNode(img), pageEditor.dom.get(id).parentNode);
|
||||
const img = await DrawIO.upload(pngData, options.pageId);
|
||||
pageEditor.dom.setAttrib(id, 'src', img.url);
|
||||
pageEditor.dom.get(id).parentNode.setAttribute('drawio-diagram', img.id);
|
||||
} catch (err) {
|
||||
pageEditor.dom.remove(id);
|
||||
handleUploadError(err);
|
||||
@@ -90,6 +86,7 @@ function drawingInit() {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {WysiwygConfigOptions} providedOptions
|
||||
* @return {function(Editor, string)}
|
||||
*/
|
||||
@@ -133,28 +130,14 @@ export function getPlugin(providedOptions) {
|
||||
showDrawingEditor(editor, selectedNode);
|
||||
});
|
||||
|
||||
editor.on('PreInit', () => {
|
||||
editor.parser.addNodeFilter('div', function(nodes) {
|
||||
for (const node of nodes) {
|
||||
if (node.attr('drawio-diagram')) {
|
||||
// Set content editable to be false to prevent direct editing of child content.
|
||||
node.attr('contenteditable', 'false');
|
||||
// Set this attribute to prevent drawing contents being parsed as media embeds
|
||||
// to avoid contents being replaced with placeholder images.
|
||||
// TinyMCE embed plugin sources looks for this attribute in its logic.
|
||||
node.attr('data-ephox-embed-iri', 'true');
|
||||
}
|
||||
}
|
||||
});
|
||||
editor.on('SetContent', function () {
|
||||
const drawings = editor.$('body > div[drawio-diagram]');
|
||||
if (!drawings.length) return;
|
||||
|
||||
editor.serializer.addNodeFilter('div', function(nodes) {
|
||||
for (const node of nodes) {
|
||||
// Clean up content attributes
|
||||
if (node.attr('drawio-diagram')) {
|
||||
node.attr('contenteditable', null);
|
||||
node.attr('data-ephox-embed-iri', null);
|
||||
}
|
||||
}
|
||||
editor.undoManager.transact(function () {
|
||||
drawings.each((index, elem) => {
|
||||
elem.setAttribute('contenteditable', 'false');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -7,61 +7,61 @@ return [
|
||||
|
||||
// Pages
|
||||
'page_create' => 'تم إنشاء صفحة',
|
||||
'page_create_notification' => 'تم إنشاء الصفحة بنجاح',
|
||||
'page_create_notification' => 'Page successfully created',
|
||||
'page_update' => 'تم تحديث الصفحة',
|
||||
'page_update_notification' => 'تم تحديث الصفحة بنجاح',
|
||||
'page_update_notification' => 'Page successfully updated',
|
||||
'page_delete' => 'تم حذف الصفحة',
|
||||
'page_delete_notification' => 'تم حذف الصفحة بنجاح',
|
||||
'page_delete_notification' => 'Page successfully deleted',
|
||||
'page_restore' => 'تمت استعادة الصفحة',
|
||||
'page_restore_notification' => 'تمت استعادة الصفحة بنجاح',
|
||||
'page_restore_notification' => 'Page successfully restored',
|
||||
'page_move' => 'تم نقل الصفحة',
|
||||
|
||||
// Chapters
|
||||
'chapter_create' => 'تم إنشاء فصل',
|
||||
'chapter_create_notification' => 'تم إنشاء الفصل بنجاح',
|
||||
'chapter_create_notification' => 'Chapter successfully created',
|
||||
'chapter_update' => 'تم تحديث الفصل',
|
||||
'chapter_update_notification' => 'تم تحديث الفصل بنجاح',
|
||||
'chapter_update_notification' => 'Chapter successfully updated',
|
||||
'chapter_delete' => 'تم حذف الفصل',
|
||||
'chapter_delete_notification' => 'تم حذف الفصل بنجاح',
|
||||
'chapter_delete_notification' => 'Chapter successfully deleted',
|
||||
'chapter_move' => 'تم نقل الفصل',
|
||||
|
||||
// Books
|
||||
'book_create' => 'تم إنشاء كتاب',
|
||||
'book_create_notification' => 'تم إنشاء الكتاب بنجاح',
|
||||
'book_create_notification' => 'Book successfully created',
|
||||
'book_update' => 'تم تحديث الكتاب',
|
||||
'book_update_notification' => 'تم تحديث الكتاب بنجاح',
|
||||
'book_update_notification' => 'Book successfully updated',
|
||||
'book_delete' => 'تم حذف الكتاب',
|
||||
'book_delete_notification' => 'تم حذف الكتاب بنجاح',
|
||||
'book_delete_notification' => 'Book successfully deleted',
|
||||
'book_sort' => 'تم سرد الكتاب',
|
||||
'book_sort_notification' => 'تم إعادة فرز الكتاب بنجاح',
|
||||
'book_sort_notification' => 'Book successfully re-sorted',
|
||||
|
||||
// Bookshelves
|
||||
'bookshelf_create' => 'تم إنشاء رف كتب',
|
||||
'bookshelf_create_notification' => 'تم إنشاء الرف بنجاح',
|
||||
'bookshelf_create' => 'created bookshelf',
|
||||
'bookshelf_create_notification' => 'Bookshelf successfully created',
|
||||
'bookshelf_update' => 'تم تحديث الرف',
|
||||
'bookshelf_update_notification' => 'تم تحديث الرف بنجاح',
|
||||
'bookshelf_update_notification' => 'Bookshelf successfully updated',
|
||||
'bookshelf_delete' => 'تم تحديث الرف',
|
||||
'bookshelf_delete_notification' => 'تم حذف الرف بنجاح',
|
||||
'bookshelf_delete_notification' => 'Bookshelf successfully deleted',
|
||||
|
||||
// Favourites
|
||||
'favourite_add_notification' => 'تم إضافة ":name" إلى المفضلة لديك',
|
||||
'favourite_remove_notification' => 'تم إزالة ":name" من المفضلة لديك',
|
||||
'favourite_add_notification' => '":name" has been added to your favourites',
|
||||
'favourite_remove_notification' => '":name" has been removed from your favourites',
|
||||
|
||||
// MFA
|
||||
'mfa_setup_method_notification' => 'تم تكوين طريقة متعددة العوامل بنجاح',
|
||||
'mfa_remove_method_notification' => 'تمت إزالة طريقة متعددة العوامل بنجاح',
|
||||
'mfa_setup_method_notification' => 'Multi-factor method successfully configured',
|
||||
'mfa_remove_method_notification' => 'Multi-factor method successfully removed',
|
||||
|
||||
// Webhooks
|
||||
'webhook_create' => 'تم إنشاء webhook',
|
||||
'webhook_create_notification' => 'تم إنشاء Webhook بنجاح',
|
||||
'webhook_update' => 'تم تحديث webhook',
|
||||
'webhook_update_notification' => 'تم تحديث Webhook بنجاح',
|
||||
'webhook_delete' => 'حذف webhook',
|
||||
'webhook_delete_notification' => 'تم حذف Webhook بنجاح',
|
||||
'webhook_create' => 'created webhook',
|
||||
'webhook_create_notification' => 'Webhook successfully created',
|
||||
'webhook_update' => 'updated webhook',
|
||||
'webhook_update_notification' => 'Webhook successfully updated',
|
||||
'webhook_delete' => 'deleted webhook',
|
||||
'webhook_delete_notification' => 'Webhook successfully deleted',
|
||||
|
||||
// Users
|
||||
'user_update_notification' => 'تم تحديث المستخدم بنجاح',
|
||||
'user_delete_notification' => 'تم إزالة المستخدم بنجاح',
|
||||
'user_update_notification' => 'User successfully updated',
|
||||
'user_delete_notification' => 'User successfully removed',
|
||||
|
||||
// Other
|
||||
'commented_on' => 'تم التعليق',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'Hebraisk',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -282,7 +282,6 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
|
||||
'es_AR' => 'Spanisch Argentinisch',
|
||||
'et' => 'Estnisch',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Französisch',
|
||||
'he' => 'Hebräisch',
|
||||
'hr' => 'Kroatisch',
|
||||
|
||||
@@ -282,7 +282,6 @@ Hinweis: Benutzer können ihre E-Mail Adresse nach erfolgreicher Registrierung
|
||||
'es_AR' => 'Spanisch Argentinisch',
|
||||
'et' => 'Estnisch',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Französisch',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Kroatisch',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Francés',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Croata',
|
||||
|
||||
@@ -196,19 +196,19 @@ return [
|
||||
'pages_edit_draft_save_at' => 'Borrador guardado el ',
|
||||
'pages_edit_delete_draft' => 'Borrar borrador',
|
||||
'pages_edit_discard_draft' => 'Descartar borrador',
|
||||
'pages_edit_switch_to_markdown' => 'Cambiar a Editor Markdown',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Limpiar Contenido)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Contenido Estable)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Cambiar a Editor WYSIWYG',
|
||||
'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Clean Content)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stable Content)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor',
|
||||
'pages_edit_set_changelog' => 'Establecer cambios de registro',
|
||||
'pages_edit_enter_changelog_desc' => 'Introduzca una breve descripción de los cambios que ha realizado',
|
||||
'pages_edit_enter_changelog' => 'Entrar en cambio de registro',
|
||||
'pages_editor_switch_title' => 'Cambiar editor',
|
||||
'pages_editor_switch_are_you_sure' => '¿Está seguro de que desea cambiar el editor de esta página?',
|
||||
'pages_editor_switch_consider_following' => 'Considere lo siguiente al cambiar de editor:',
|
||||
'pages_editor_switch_consideration_a' => 'Una vez guardado, el nuevo editor será utilizado por cualquier usuario en el futuro, incluyendo aquellos que no puedan cambiar el tipo de editor por sí mismos.',
|
||||
'pages_editor_switch_consideration_b' => 'Esto puede llevar a una pérdida de detalle y sintaxis en ciertas circunstancias.',
|
||||
'pages_editor_switch_consideration_c' => 'Cambios en etiquetas o en el registro de cambios, realizados desde el último guardado, no persistirán a través de este cambio.',
|
||||
'pages_editor_switch_title' => 'Switch Editor',
|
||||
'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?',
|
||||
'pages_editor_switch_consider_following' => 'Consider the following when changing editors:',
|
||||
'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.',
|
||||
'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.',
|
||||
'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.',
|
||||
'pages_save' => 'Guardar página',
|
||||
'pages_title' => 'Título de página',
|
||||
'pages_name' => 'Nombre de página',
|
||||
@@ -235,7 +235,7 @@ return [
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_numbered' => 'Revisión #:id',
|
||||
'pages_revisions_numbered_changes' => 'Cambios de Revisión #:id',
|
||||
'pages_revisions_editor' => 'Tipo de Editor',
|
||||
'pages_revisions_editor' => 'Editor Type',
|
||||
'pages_revisions_changelog' => 'Registro de cambios',
|
||||
'pages_revisions_changes' => 'Cambios',
|
||||
'pages_revisions_current' => 'Versión actual',
|
||||
|
||||
@@ -27,8 +27,8 @@ return [
|
||||
'app_secure_images' => '¿Habilitar mayor seguridad para subir imágenes?',
|
||||
'app_secure_images_toggle' => 'Habilitar seguridad alta para subir imágenes',
|
||||
'app_secure_images_desc' => 'Por razones de rendimiento, todas las imágenes son públicas. Esta opción agrega una cadena larga difícil de adivinar, asegúrese que los índices de directorios no están habilitados para prevenir el acceso fácil a las imágenes.',
|
||||
'app_default_editor' => 'Editor de Página por defecto',
|
||||
'app_default_editor_desc' => 'Seleccione qué editor se utilizará por defecto cuando se editen nuevas páginas. Esto se puede anular a nivel de página si los permisos lo permiten.',
|
||||
'app_default_editor' => 'Default Page Editor',
|
||||
'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.',
|
||||
'app_custom_html' => 'Contenido de cabecera HTML personalizable',
|
||||
'app_custom_html_desc' => 'Cualquier contenido agregado aquí será agregado al final de la sección <head> de cada página. Esto es útil para sobreescribir estilos o agregar código para analíticas.',
|
||||
'app_custom_html_disabled_notice' => 'El contenido personailzado para la cabecera HTML está deshabilitado en esta configuración para garantizar que cualquier cambio importante se pueda revertir.',
|
||||
@@ -153,7 +153,7 @@ return [
|
||||
'role_access_api' => 'API de sistema de acceso',
|
||||
'role_manage_settings' => 'Gestionar ajustes de activos',
|
||||
'role_export_content' => 'Exportar contenido',
|
||||
'role_editor_change' => 'Cambiar editor de página',
|
||||
'role_editor_change' => 'Change page editor',
|
||||
'role_asset' => 'Permisos de activos',
|
||||
'roles_system_warning' => 'Tenga en cuenta que el acceso a cualquiera de los tres permisos anteriores puede permitir a un usuario modificar sus propios privilegios o los privilegios de otros usuarios en el sistema. Asignar roles con estos permisos sólo a usuarios de comfianza.',
|
||||
'role_asset_desc' => 'Estos permisos controlan el acceso por defecto a los activos del sistema. Permisos definidos en Libros, Capítulos y Páginas ignorarán estos permisos.',
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Francés',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Croata',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina (Argentiina hispaania keel)',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français (prantsuse keel)',
|
||||
'he' => 'עברית (heebrea keel)',
|
||||
'hr' => 'Hrvatski (horvaadi keel)',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -60,8 +60,8 @@ return [
|
||||
'webhook_delete_notification' => 'وب هوک با موفقیت حذف شد',
|
||||
|
||||
// Users
|
||||
'user_update_notification' => 'کاربر با موفقیت به روز شد',
|
||||
'user_delete_notification' => 'کاربر با موفقیت حذف شد',
|
||||
'user_update_notification' => 'User successfully updated',
|
||||
'user_delete_notification' => 'User successfully removed',
|
||||
|
||||
// Other
|
||||
'commented_on' => 'ثبت دیدگاه',
|
||||
|
||||
@@ -75,7 +75,7 @@ return [
|
||||
'status_active' => 'فعال',
|
||||
'status_inactive' => 'غیر فعال',
|
||||
'never' => 'هرگز',
|
||||
'none' => 'هیچکدام',
|
||||
'none' => 'None',
|
||||
|
||||
// Header
|
||||
'header_menu_expand' => 'گسترش منو',
|
||||
|
||||
@@ -196,19 +196,19 @@ return [
|
||||
'pages_edit_draft_save_at' => 'پیش نویس ذخیره شده در',
|
||||
'pages_edit_delete_draft' => 'حذف پیش نویس',
|
||||
'pages_edit_discard_draft' => 'دور انداختن پیش نویس',
|
||||
'pages_edit_switch_to_markdown' => 'به ویرایشگر Markdown بروید',
|
||||
'pages_edit_switch_to_markdown_clean' => '(مطالب تمیز)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(محتوای پایدار)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'به ویرایشگر WYSIWYG بروید',
|
||||
'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Clean Content)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stable Content)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor',
|
||||
'pages_edit_set_changelog' => 'تنظیم تغییرات',
|
||||
'pages_edit_enter_changelog_desc' => 'توضیح مختصری از تغییراتی که ایجاد کرده اید وارد کنید',
|
||||
'pages_edit_enter_changelog' => 'وارد کردن تغییرات',
|
||||
'pages_editor_switch_title' => 'ویرایشگر را تغییر دهید',
|
||||
'pages_editor_switch_are_you_sure' => 'آیا مطمئن هستید که می خواهید ویرایشگر این صفحه را تغییر دهید؟',
|
||||
'pages_editor_switch_consider_following' => 'هنگام تغییر ویرایشگر موارد زیر را در نظر بگیرید:',
|
||||
'pages_editor_switch_consideration_a' => 'پس از ذخیره، گزینه ویرایشگر جدید توسط هر ویرایشگر آینده، از جمله ویرایشگرانی که ممکن است خودشان نتوانند نوع ویرایشگر را تغییر دهند، استفاده خواهد شد.',
|
||||
'pages_editor_switch_consideration_b' => 'این به طور بالقوه می تواند منجر به از دست دادن جزئیات و نحو در شرایط خاص شود.',
|
||||
'pages_editor_switch_consideration_c' => 'تغییرات برچسبها یا تغییرات ثبت شده از آخرین ذخیرهسازی انجام شده، در این تغییر باقی نمیمانند.',
|
||||
'pages_editor_switch_title' => 'Switch Editor',
|
||||
'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?',
|
||||
'pages_editor_switch_consider_following' => 'Consider the following when changing editors:',
|
||||
'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.',
|
||||
'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.',
|
||||
'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.',
|
||||
'pages_save' => 'ذخیره صفحه',
|
||||
'pages_title' => 'عنوان صفحه',
|
||||
'pages_name' => 'نام صفحه',
|
||||
@@ -235,7 +235,7 @@ return [
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_numbered' => 'تجدید نظر #:id',
|
||||
'pages_revisions_numbered_changes' => 'بازبینی #:id تغییرات',
|
||||
'pages_revisions_editor' => 'نوع ویرایشگر',
|
||||
'pages_revisions_editor' => 'Editor Type',
|
||||
'pages_revisions_changelog' => 'لیست تغییرات',
|
||||
'pages_revisions_changes' => 'تغییرات',
|
||||
'pages_revisions_current' => 'نسخهی جاری',
|
||||
|
||||
@@ -10,8 +10,8 @@ return [
|
||||
'settings' => 'تنظیمات',
|
||||
'settings_save' => 'تنظیمات را ذخیره کن',
|
||||
'settings_save_success' => 'تنظیمات ذخیره شد',
|
||||
'system_version' => 'نسخه سیستم',
|
||||
'categories' => 'دسته بندی ها',
|
||||
'system_version' => 'System Version',
|
||||
'categories' => 'Categories',
|
||||
|
||||
// App Settings
|
||||
'app_customization' => 'سفارشی سازی',
|
||||
@@ -27,7 +27,7 @@ return [
|
||||
'app_secure_images' => 'آپلود تصویر با امنیت بالاتر',
|
||||
'app_secure_images_toggle' => 'آپلود تصویر با امنیت بالاتر',
|
||||
'app_secure_images_desc' => 'به دلایل عملکرد، همه تصاویر عمومی هستند. این گزینه یک رشته تصادفی و غیرقابل حدس زدن را در مقابل آدرس های تصویر اضافه می کند. برای جلوگیری از دسترسی آسان، اطمینان حاصل کنید که فهرست های دایرکتوری فعال نیستند.',
|
||||
'app_default_editor' => 'ویرایشگر پیش فرض صفحه',
|
||||
'app_default_editor' => 'Default Page Editor',
|
||||
'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.',
|
||||
'app_custom_html' => 'محتوای اصلی HTML سفارشی',
|
||||
'app_custom_html_desc' => 'هر محتوای اضافه شده در اینجا در پایین بخش <head> هر صفحه درج می شود. این برای تغییر سبک ها یا اضافه کردن کد تجزیه و تحلیل مفید است.',
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Espagnol (Argentine)',
|
||||
'et' => 'Estonien',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'Hébreu',
|
||||
'hr' => 'Croate',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -196,19 +196,19 @@ return [
|
||||
'pages_edit_draft_save_at' => 'Bozza salvata alle ',
|
||||
'pages_edit_delete_draft' => 'Elimina Bozza',
|
||||
'pages_edit_discard_draft' => 'Scarta Bozza',
|
||||
'pages_edit_switch_to_markdown' => 'Passa all\'editor Markdown',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Contenuto Chiaro)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Contenuto Stabile)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Passa all\'editor WYSIWYG',
|
||||
'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Clean Content)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stable Content)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor',
|
||||
'pages_edit_set_changelog' => 'Imposta Changelog',
|
||||
'pages_edit_enter_changelog_desc' => 'Inserisci una breve descrizione dei cambiamenti che hai apportato',
|
||||
'pages_edit_enter_changelog' => 'Inserisci Changelog',
|
||||
'pages_editor_switch_title' => 'Cambia Editor',
|
||||
'pages_editor_switch_are_you_sure' => 'Sei sicuro di voler cambiare l\'editor di questa pagina?',
|
||||
'pages_editor_switch_consider_following' => 'Considerare quanto segue quando si cambia editor:',
|
||||
'pages_editor_switch_consideration_a' => 'Una volta salvata, la nuova opzione di editor sarà utilizzata da qualsiasi editor futuro, inclusi quelli che potrebbero non essere in grado di cambiare il tipo di editor da solo.',
|
||||
'pages_editor_switch_consideration_b' => 'Ciò può potenzialmente portare a una perdita di dettagli e sintassi in determinate circostanze.',
|
||||
'pages_editor_switch_consideration_c' => 'Le modifiche al tag o al changelog, fatte dall\'ultimo salvataggio, non persisteranno in questa modifica.',
|
||||
'pages_editor_switch_title' => 'Switch Editor',
|
||||
'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?',
|
||||
'pages_editor_switch_consider_following' => 'Consider the following when changing editors:',
|
||||
'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.',
|
||||
'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.',
|
||||
'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.',
|
||||
'pages_save' => 'Salva Pagina',
|
||||
'pages_title' => 'Titolo Pagina',
|
||||
'pages_name' => 'Nome Pagina',
|
||||
@@ -235,7 +235,7 @@ return [
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_numbered' => 'Revisione #:id',
|
||||
'pages_revisions_numbered_changes' => 'Modifiche Revisione #:id',
|
||||
'pages_revisions_editor' => 'Tipo Di Editor',
|
||||
'pages_revisions_editor' => 'Editor Type',
|
||||
'pages_revisions_changelog' => 'Cambiamenti',
|
||||
'pages_revisions_changes' => 'Cambiamenti',
|
||||
'pages_revisions_current' => 'Versione Corrente',
|
||||
|
||||
@@ -27,8 +27,8 @@ return [
|
||||
'app_secure_images' => 'Abilitare una sicurezza maggiore per le immagini caricate?',
|
||||
'app_secure_images_toggle' => 'Abilita sicurezza aggiuntiva negli upload delle immagini',
|
||||
'app_secure_images_desc' => 'Per una ragione di prestazioni, tutte le immagini sono pubbliche. Questa opzione aaggiunge una stringa, difficile da indovinare, random negli url delle immagini. Assicurati che il listing delle cartelle non sia abilitato per prevenire un accesso semplice.',
|
||||
'app_default_editor' => 'Editor Di Pagina Predefinito',
|
||||
'app_default_editor_desc' => 'Seleziona quale editor sarà usato per impostazione predefinita quando modifichi nuove pagine. Questa impostazione potrà essere sovrascritta a livello di pagina dove i permessi lo permettano.',
|
||||
'app_default_editor' => 'Default Page Editor',
|
||||
'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.',
|
||||
'app_custom_html' => 'Contenuto Head HTML Custom',
|
||||
'app_custom_html_desc' => 'Qualsiasi contenuto aggiunto qui verrà inserito alla fine della sezione <head> di tutte le pagine. Questo è utile per sovrascrivere lo stile o aggiungere il codice per gli analytics.',
|
||||
'app_custom_html_disabled_notice' => 'Il contenuto HTML personalizzato è disabilitato su questa pagina impostazioni per garantire che eventuali modifiche possano essere ripristinate.',
|
||||
@@ -152,7 +152,7 @@ return [
|
||||
'role_access_api' => 'API sistema d\'accesso',
|
||||
'role_manage_settings' => 'Gestire impostazioni app',
|
||||
'role_export_content' => 'Esporta contenuto',
|
||||
'role_editor_change' => 'Cambia editor di pagina',
|
||||
'role_editor_change' => 'Change page editor',
|
||||
'role_asset' => 'Permessi Entità',
|
||||
'roles_system_warning' => 'Siate consapevoli che l\'accesso a uno dei tre permessi qui sopra, può consentire a un utente di modificare i propri privilegi o i privilegi di altri nel sistema. Assegna ruoli con questi permessi solo ad utenti fidati.',
|
||||
'role_asset_desc' => 'Questi permessi controllano l\'accesso di default alle entità. I permessi nei Libri, Capitoli e Pagine sovrascriveranno questi.',
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Spagnolo d\'Argentina',
|
||||
'et' => 'Estone',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Francese',
|
||||
'he' => 'Ebraico',
|
||||
'hr' => 'Croato',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => '히브리어',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -7,164 +7,164 @@
|
||||
*/
|
||||
return [
|
||||
// General editor terms
|
||||
'general' => 'Vispārīgi',
|
||||
'advanced' => 'Papildu iespējas',
|
||||
'none' => 'Neviens',
|
||||
'general' => 'General',
|
||||
'advanced' => 'Advanced',
|
||||
'none' => 'None',
|
||||
'cancel' => 'Atcelt',
|
||||
'save' => 'Saglabāt',
|
||||
'close' => 'Aizvērt',
|
||||
'undo' => 'Atsaukt',
|
||||
'redo' => 'Atcelt atsaukšanu',
|
||||
'left' => 'Pa kreisi',
|
||||
'center' => 'Centrā',
|
||||
'right' => 'Pa labi',
|
||||
'top' => 'Augšā',
|
||||
'middle' => 'Vidū',
|
||||
'bottom' => 'Apakšā',
|
||||
'undo' => 'Undo',
|
||||
'redo' => 'Redo',
|
||||
'left' => 'Left',
|
||||
'center' => 'Center',
|
||||
'right' => 'Right',
|
||||
'top' => 'Top',
|
||||
'middle' => 'Middle',
|
||||
'bottom' => 'Bottom',
|
||||
'width' => 'Platums',
|
||||
'height' => 'Augstums',
|
||||
'More' => 'Vairāk',
|
||||
'select' => 'Atlasīt...',
|
||||
'select' => 'Select...',
|
||||
|
||||
// Toolbar
|
||||
'formats' => 'Formāti',
|
||||
'header_large' => 'Liels virsraksts',
|
||||
'header_medium' => 'Vidējs virsraksts',
|
||||
'header_small' => 'Mazs virsraksts',
|
||||
'header_tiny' => 'Ļoti mazs virsraksts',
|
||||
'header_large' => 'Large Header',
|
||||
'header_medium' => 'Medium Header',
|
||||
'header_small' => 'Small Header',
|
||||
'header_tiny' => 'Tiny Header',
|
||||
'paragraph' => 'Rindkopa',
|
||||
'blockquote' => 'Citāts',
|
||||
'inline_code' => 'Kods iekļauts rindā',
|
||||
'blockquote' => 'Blockquote',
|
||||
'inline_code' => 'Inline code',
|
||||
'callouts' => 'Norādes',
|
||||
'callout_information' => 'Informācija',
|
||||
'callout_success' => 'Veiksmīgi',
|
||||
'callout_success' => 'Success',
|
||||
'callout_warning' => 'Brīdinājums',
|
||||
'callout_danger' => 'Bīstami',
|
||||
'bold' => 'Treknraksts',
|
||||
'italic' => 'Slīpraksts',
|
||||
'underline' => 'Pasvītrojums',
|
||||
'strikethrough' => 'Pārsvītrojums',
|
||||
'superscript' => 'Augšraksts',
|
||||
'subscript' => 'Apakšraksts',
|
||||
'callout_danger' => 'Danger',
|
||||
'bold' => 'Bold',
|
||||
'italic' => 'Italic',
|
||||
'underline' => 'Underline',
|
||||
'strikethrough' => 'Strikethrough',
|
||||
'superscript' => 'Superscript',
|
||||
'subscript' => 'Subscript',
|
||||
'text_color' => 'Teksta krāsa',
|
||||
'custom_color' => 'Pielāgot krāsu',
|
||||
'remove_color' => 'Noņemt krāsu',
|
||||
'custom_color' => 'Custom color',
|
||||
'remove_color' => 'Remove color',
|
||||
'background_color' => 'Fona krāsa',
|
||||
'align_left' => 'Līdzināt pa kreisi',
|
||||
'align_center' => 'Līdzināt pa vidu',
|
||||
'align_right' => 'Līdzināt pa labi',
|
||||
'align_justify' => 'Līdzināt gar abām malām',
|
||||
'list_bullet' => 'Nenumurēts saraksts',
|
||||
'align_left' => 'Align left',
|
||||
'align_center' => 'Align center',
|
||||
'align_right' => 'Align right',
|
||||
'align_justify' => 'Justify',
|
||||
'list_bullet' => 'Bullet list',
|
||||
'list_numbered' => 'Numurēts saraksts',
|
||||
'list_task' => 'Uzdevumu saraksts',
|
||||
'list_task' => 'Task list',
|
||||
'indent_increase' => 'Palielināt atkāpi',
|
||||
'indent_decrease' => 'Samazināt atkāpi',
|
||||
'table' => 'Tabula',
|
||||
'insert_image' => 'Ievietot attēlu',
|
||||
'insert_image_title' => 'Ievietot/rediģēt attēlu',
|
||||
'insert_link' => 'Ievietot/rediģēt saiti',
|
||||
'insert_link_title' => 'Ievietot/rediģēt saiti',
|
||||
'insert_horizontal_line' => 'Ievietot horizontālu līniju',
|
||||
'insert_code_block' => 'Ievietot koda bloku',
|
||||
'insert_drawing' => 'Ievietot/rediģēt zīmējumu',
|
||||
'drawing_manager' => 'Zīmēšanas pārvaldnieks',
|
||||
'insert_media' => 'Ievietot/rediģēt mediju',
|
||||
'insert_media_title' => 'Ievietot/rediģēt mediju',
|
||||
'clear_formatting' => 'Notīrīt noformējumu',
|
||||
'source_code' => 'Pirmkods',
|
||||
'source_code_title' => 'Pirmkods',
|
||||
'fullscreen' => 'Pilnekrāns',
|
||||
'image_options' => 'Attēla uzstādījumu',
|
||||
'insert_image_title' => 'Insert/Edit Image',
|
||||
'insert_link' => 'Insert/edit link',
|
||||
'insert_link_title' => 'Insert/Edit Link',
|
||||
'insert_horizontal_line' => 'Insert horizontal line',
|
||||
'insert_code_block' => 'Insert code block',
|
||||
'insert_drawing' => 'Insert/edit drawing',
|
||||
'drawing_manager' => 'Drawing manager',
|
||||
'insert_media' => 'Insert/edit media',
|
||||
'insert_media_title' => 'Insert/Edit Media',
|
||||
'clear_formatting' => 'Clear formatting',
|
||||
'source_code' => 'Source code',
|
||||
'source_code_title' => 'Source Code',
|
||||
'fullscreen' => 'Fullscreen',
|
||||
'image_options' => 'Image options',
|
||||
|
||||
// Tables
|
||||
'table_properties' => 'Tabulas īpašības',
|
||||
'table_properties_title' => 'Tabulas īpašības',
|
||||
'delete_table' => 'Dzēst tabulu',
|
||||
'insert_row_before' => 'Ievietot rindu augstāk',
|
||||
'insert_row_after' => 'Ievietot rindu zemāk',
|
||||
'delete_row' => 'Dzēst rindu',
|
||||
'insert_column_before' => 'Ievietot kolonnu pirms',
|
||||
'insert_column_after' => 'Ievietot kolonnu pēc',
|
||||
'delete_column' => 'Dzēst kolonnu',
|
||||
'table_properties' => 'Table properties',
|
||||
'table_properties_title' => 'Table Properties',
|
||||
'delete_table' => 'Delete table',
|
||||
'insert_row_before' => 'Insert row before',
|
||||
'insert_row_after' => 'Insert row after',
|
||||
'delete_row' => 'Delete row',
|
||||
'insert_column_before' => 'Insert column before',
|
||||
'insert_column_after' => 'Insert column after',
|
||||
'delete_column' => 'Delete column',
|
||||
'table_cell' => 'Šūna',
|
||||
'table_row' => 'Rinda',
|
||||
'table_column' => 'Kolonna',
|
||||
'cell_properties' => 'Šūnas īpašības',
|
||||
'cell_properties_title' => 'Šūnas īpašības',
|
||||
'cell_type' => 'Šūnas tips',
|
||||
'cell_properties' => 'Cell properties',
|
||||
'cell_properties_title' => 'Cell Properties',
|
||||
'cell_type' => 'Cell type',
|
||||
'cell_type_cell' => 'Šūna',
|
||||
'cell_scope' => 'Darbības lauks',
|
||||
'cell_type_header' => 'Galvenes šūna',
|
||||
'merge_cells' => 'Sapludināt šūnas',
|
||||
'split_cell' => 'Sadalīt šūnas',
|
||||
'table_row_group' => 'Rindu grupa',
|
||||
'table_column_group' => 'Kolonnu grupa',
|
||||
'horizontal_align' => 'Horizontāls novietojums',
|
||||
'vertical_align' => 'Vertikāls novietojums',
|
||||
'border_width' => 'Apmales platums',
|
||||
'border_style' => 'Apmales veids',
|
||||
'border_color' => 'Apmales krāsa',
|
||||
'row_properties' => 'Rindas īpašības',
|
||||
'row_properties_title' => 'Rindas īpašības',
|
||||
'cut_row' => 'Izgriezt rindu',
|
||||
'copy_row' => 'Kopēt rindu',
|
||||
'paste_row_before' => 'Ielīmēt rindu augstāk',
|
||||
'paste_row_after' => 'Ielīmēt rindu zemāk',
|
||||
'row_type' => 'Rindas tips',
|
||||
'row_type_header' => 'Galvene',
|
||||
'row_type_body' => 'Pamata saturs',
|
||||
'row_type_footer' => 'Kājene',
|
||||
'alignment' => 'Līdzināšana',
|
||||
'cut_column' => 'Izgriezt kolonnu',
|
||||
'copy_column' => 'Kopēt kolonnu',
|
||||
'paste_column_before' => 'Ielīmēt kolonnu pirms',
|
||||
'paste_column_after' => 'Ielīmēt kolonnu pēc',
|
||||
'cell_padding' => 'Šūnu iekšējais attālums',
|
||||
'cell_spacing' => 'Šūnu attālums',
|
||||
'caption' => 'Virsraksts',
|
||||
'show_caption' => 'Parādīt virsrakstu',
|
||||
'constrain' => 'Saglabāt proporcijas',
|
||||
'cell_border_solid' => 'Pilna',
|
||||
'cell_border_dotted' => 'Punktēta',
|
||||
'cell_border_dashed' => 'Raustīta līnija',
|
||||
'cell_border_double' => 'Dubulta',
|
||||
'cell_border_groove' => 'Iedoba',
|
||||
'cell_border_ridge' => 'Izcelta',
|
||||
'cell_border_inset' => 'Iespiesta',
|
||||
'cell_border_outset' => 'Pacelta',
|
||||
'cell_border_none' => 'Nekas',
|
||||
'cell_border_hidden' => 'Paslēpts',
|
||||
'cell_scope' => 'Scope',
|
||||
'cell_type_header' => 'Header cell',
|
||||
'merge_cells' => 'Merge cells',
|
||||
'split_cell' => 'Split cell',
|
||||
'table_row_group' => 'Row Group',
|
||||
'table_column_group' => 'Column Group',
|
||||
'horizontal_align' => 'Horizontal align',
|
||||
'vertical_align' => 'Vertical align',
|
||||
'border_width' => 'Border width',
|
||||
'border_style' => 'Border style',
|
||||
'border_color' => 'Border color',
|
||||
'row_properties' => 'Row properties',
|
||||
'row_properties_title' => 'Row Properties',
|
||||
'cut_row' => 'Cut row',
|
||||
'copy_row' => 'Copy row',
|
||||
'paste_row_before' => 'Paste row before',
|
||||
'paste_row_after' => 'Paste row after',
|
||||
'row_type' => 'Row type',
|
||||
'row_type_header' => 'Header',
|
||||
'row_type_body' => 'Body',
|
||||
'row_type_footer' => 'Footer',
|
||||
'alignment' => 'Alignment',
|
||||
'cut_column' => 'Cut column',
|
||||
'copy_column' => 'Copy column',
|
||||
'paste_column_before' => 'Paste column before',
|
||||
'paste_column_after' => 'Paste column after',
|
||||
'cell_padding' => 'Cell padding',
|
||||
'cell_spacing' => 'Cell spacing',
|
||||
'caption' => 'Caption',
|
||||
'show_caption' => 'Show caption',
|
||||
'constrain' => 'Constrain proportions',
|
||||
'cell_border_solid' => 'Solid',
|
||||
'cell_border_dotted' => 'Dotted',
|
||||
'cell_border_dashed' => 'Dashed',
|
||||
'cell_border_double' => 'Double',
|
||||
'cell_border_groove' => 'Groove',
|
||||
'cell_border_ridge' => 'Ridge',
|
||||
'cell_border_inset' => 'Inset',
|
||||
'cell_border_outset' => 'Outset',
|
||||
'cell_border_none' => 'None',
|
||||
'cell_border_hidden' => 'Hidden',
|
||||
|
||||
// Images, links, details/summary & embed
|
||||
'source' => 'Avots',
|
||||
'alt_desc' => 'Alternatīvais apraksts',
|
||||
'embed' => 'Iekļaut',
|
||||
'paste_embed' => 'Iekopējiet savu iekļaušanas kodu zemāk:',
|
||||
'source' => 'Source',
|
||||
'alt_desc' => 'Alternative description',
|
||||
'embed' => 'Embed',
|
||||
'paste_embed' => 'Paste your embed code below:',
|
||||
'url' => 'URL',
|
||||
'text_to_display' => 'Attēlojamais teksts',
|
||||
'text_to_display' => 'Text to display',
|
||||
'title' => 'Nosaukums',
|
||||
'open_link' => 'Atvērt saiti...',
|
||||
'open_link_current' => 'Šis logs',
|
||||
'open_link_new' => 'Jauns logs',
|
||||
'insert_collapsible' => 'Ievietot sakļaujamu bloku',
|
||||
'collapsible_unwrap' => 'Attīt',
|
||||
'edit_label' => 'Rediģēt marķējumu',
|
||||
'toggle_open_closed' => 'Pārslēgt atvērts/aizvērts',
|
||||
'collapsible_edit' => 'Rediģēt sakļaujamu bloku',
|
||||
'toggle_label' => 'Pārslēgt marķējumu',
|
||||
'open_link' => 'Open link in...',
|
||||
'open_link_current' => 'Current window',
|
||||
'open_link_new' => 'New window',
|
||||
'insert_collapsible' => 'Insert collapsible block',
|
||||
'collapsible_unwrap' => 'Unwrap',
|
||||
'edit_label' => 'Edit label',
|
||||
'toggle_open_closed' => 'Toggle open/closed',
|
||||
'collapsible_edit' => 'Edit collapsible block',
|
||||
'toggle_label' => 'Toggle label',
|
||||
|
||||
// About view
|
||||
'about' => 'Par redaktoru',
|
||||
'about_title' => 'Par WYSIWYG redaktoru',
|
||||
'editor_license' => 'Redaktora licence un autortiesības',
|
||||
'editor_tiny_license' => 'Šis redaktors ir izveidots, izmantojot :tinyLink, kas ir publicēts ar LGPL v2.1 licenci.',
|
||||
'editor_tiny_license_link' => 'TinyMCE autortiesības un licences detaļas var atrast šeit.',
|
||||
'save_continue' => 'Saglabāt lapu un turpināt',
|
||||
'callouts_cycle' => '(Turpiniet spiest, lai pārslēgtu tipus)',
|
||||
'link_selector' => 'Saite uz saturu',
|
||||
'about' => 'About the editor',
|
||||
'about_title' => 'About the WYSIWYG Editor',
|
||||
'editor_license' => 'Editor License & Copyright',
|
||||
'editor_tiny_license' => 'This editor is built using :tinyLink which is provided under an LGPL v2.1 license.',
|
||||
'editor_tiny_license_link' => 'The copyright and license details of TinyMCE can be found here.',
|
||||
'save_continue' => 'Save Page & Continue',
|
||||
'callouts_cycle' => '(Keep pressing to toggle through types)',
|
||||
'link_selector' => 'Link to content',
|
||||
'shortcuts' => 'Saīsnes',
|
||||
'shortcut' => 'Saīsne',
|
||||
'shortcuts_intro' => 'Šajā redaktorā pieejamas šādas saīsnes:',
|
||||
'shortcuts_intro' => 'The following shortcuts are available in the editor:',
|
||||
'windows_linux' => '(Windows/Linux)',
|
||||
'mac' => '(Mac)',
|
||||
'description' => 'Apraksts',
|
||||
|
||||
@@ -196,19 +196,19 @@ return [
|
||||
'pages_edit_draft_save_at' => 'Melnraksts saglabāts ',
|
||||
'pages_edit_delete_draft' => 'Dzēst melnrakstu',
|
||||
'pages_edit_discard_draft' => 'Atmest malnrakstu',
|
||||
'pages_edit_switch_to_markdown' => 'Pārslēgties uz Markdown redaktoru',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Iztīrītais saturs)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stabilais saturs)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Pārslēgties uz WYSIWYG redaktoru',
|
||||
'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Clean Content)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stable Content)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor',
|
||||
'pages_edit_set_changelog' => 'Pievienot izmaiņu aprakstu',
|
||||
'pages_edit_enter_changelog_desc' => 'Ievadi nelielu aprakstu par vaiktajām izmaiņām',
|
||||
'pages_edit_enter_changelog' => 'Izmaiņu apraksts',
|
||||
'pages_editor_switch_title' => 'Pārslēgt redaktoru',
|
||||
'pages_editor_switch_are_you_sure' => 'Vai tiešām vēlaties pārslēgt šai lapai lietojamo redaktoru?',
|
||||
'pages_editor_switch_consider_following' => 'Pārslēdzot redaktorus, ņemiet vērā:',
|
||||
'pages_editor_switch_consideration_a' => 'Pēc saglabāšanas jaunā redaktora izvēle tiks izmantota nākotnē visiem lietotājiem, tai skaitā tiem, kam var nebūt tiesības pašiem mainīt redaktora veidu.',
|
||||
'pages_editor_switch_consideration_b' => 'Tas var noteiktos apstākļos novest pie iespējamiem noformējuma un sintakses zudumiem.',
|
||||
'pages_editor_switch_consideration_c' => 'Birku vai izmaiņu saraksta ieraksti, kas veikti kopš pēdējās saglabāšanas, nesaglabāsies kopā ar šīm izmaiņām.',
|
||||
'pages_editor_switch_title' => 'Switch Editor',
|
||||
'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?',
|
||||
'pages_editor_switch_consider_following' => 'Consider the following when changing editors:',
|
||||
'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.',
|
||||
'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.',
|
||||
'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.',
|
||||
'pages_save' => 'Saglabāt lapu',
|
||||
'pages_title' => 'Lapas virsraksts',
|
||||
'pages_name' => 'Lapas nosaukums',
|
||||
@@ -235,7 +235,7 @@ return [
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_numbered' => 'Revīzija #:id',
|
||||
'pages_revisions_numbered_changes' => 'Revīzijas #:id izmaiņas',
|
||||
'pages_revisions_editor' => 'Redaktora veids',
|
||||
'pages_revisions_editor' => 'Editor Type',
|
||||
'pages_revisions_changelog' => 'Izmaiņu žurnāls',
|
||||
'pages_revisions_changes' => 'Izmaiņas',
|
||||
'pages_revisions_current' => 'Pašreizējā versija',
|
||||
|
||||
@@ -10,8 +10,8 @@ return [
|
||||
'settings' => 'Iestatījumi',
|
||||
'settings_save' => 'Saglabāt iestatījumus',
|
||||
'settings_save_success' => 'Iestatījumi saglabāti',
|
||||
'system_version' => 'Sistēmas versija',
|
||||
'categories' => 'Kategorijas',
|
||||
'system_version' => 'System Version',
|
||||
'categories' => 'Categories',
|
||||
|
||||
// App Settings
|
||||
'app_customization' => 'Pielāgojumi',
|
||||
@@ -27,8 +27,8 @@ return [
|
||||
'app_secure_images' => 'Paaugstinātas drošības attēlu ielāde',
|
||||
'app_secure_images_toggle' => 'Ieslēgt paaugstinātas drošības attēlu ielādi',
|
||||
'app_secure_images_desc' => 'Ātrdarbības nolūkos attēli ir publiski pieejami. Šī opcija pievieno nejaušu grūti uzminamu teksta virkni attēlu adresēs. Pārliecinieties kā ir izslēgta direktoriju pārlūkošana, lai nepieļautu vieglu piekļuvi šiem failiem.',
|
||||
'app_default_editor' => 'Noklusētais lapu redaktors',
|
||||
'app_default_editor_desc' => 'Izvēlieties noklusēto redaktoru jaunu lapu rediģēšanai. To iespējams norādīt arī lapu līmenī, ja piekļuves tiesības to atļauj.',
|
||||
'app_default_editor' => 'Default Page Editor',
|
||||
'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.',
|
||||
'app_custom_html' => 'Pielāgot HTML head saturu',
|
||||
'app_custom_html_desc' => 'Šis saturs tiks pievienots <head> sadaļas apakšā visām lapām. Tas ir noderīgi papildinot CSS stilus vai pievienojot analītikas kodu.',
|
||||
'app_custom_html_disabled_notice' => 'Pielāgots HTML head saturs ir izslēgts šajā uzstādījumu lapā, lai nodrošinātu, ka iespējams atcelt jebkādas kritiskas izmaiņas.',
|
||||
@@ -152,7 +152,7 @@ return [
|
||||
'role_access_api' => 'Piekļūt sistēmas API',
|
||||
'role_manage_settings' => 'Pārvaldīt iestatījumus',
|
||||
'role_export_content' => 'Eksportēt saturu',
|
||||
'role_editor_change' => 'Mainīt lapu redaktoru',
|
||||
'role_editor_change' => 'Change page editor',
|
||||
'role_asset' => 'Resursa piekļuves tiesības',
|
||||
'roles_system_warning' => 'Jebkuras no trīs augstāk redzamajām atļaujām dod iespēju lietotājam mainīt savas un citu lietotāju sistēmas atļaujas. Pievieno šīs grupu atļaujas tikai tiem lietotājiem, kuriem uzticies.',
|
||||
'role_asset_desc' => 'Šīs piekļuves tiesības kontrolē noklusēto piekļuvi sistēmas resursiem. Grāmatām, nodaļām un lapām norādītās tiesības būs pārākas par šīm.',
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Igauņu',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -154,10 +154,10 @@ return [
|
||||
'toggle_label' => 'Schakel label aan/uit',
|
||||
|
||||
// About view
|
||||
'about' => 'Over de bewerker',
|
||||
'about_title' => 'Over de WYSIWYG Bewerker',
|
||||
'editor_license' => 'Bewerker Licentie & Copyright',
|
||||
'editor_tiny_license' => 'Deze bewerker is gebouwd met :tinyLink, dat aangeboden wordt via een LGPL v2.1 licentie.',
|
||||
'about' => 'Over de editor',
|
||||
'about_title' => 'Over de WYSIWYG-bewerker',
|
||||
'editor_license' => 'Editor Licentie & Copyright',
|
||||
'editor_tiny_license' => 'Deze editor is gebouwd met :tinyLink, dat aangeboden wordt via een LGPL v2.1 licentie.',
|
||||
'editor_tiny_license_link' => 'De copyright- en licentiegegevens van TinyMCE vindt u hier.',
|
||||
'save_continue' => 'Pagina opslaan en verdergaan',
|
||||
'callouts_cycle' => '(Blijf drukken om door de types te wisselen)',
|
||||
|
||||
@@ -196,23 +196,23 @@ return [
|
||||
'pages_edit_draft_save_at' => 'Concept opgeslagen op ',
|
||||
'pages_edit_delete_draft' => 'Concept verwijderen',
|
||||
'pages_edit_discard_draft' => 'Concept verwijderen',
|
||||
'pages_edit_switch_to_markdown' => 'Verander naar Markdown Bewerker',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Schoongemaakte Inhoud)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stabiele Inhoud)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Verander naar WYSIWYG Bewerker',
|
||||
'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Clean Content)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stable Content)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor',
|
||||
'pages_edit_set_changelog' => 'Wijzigingslogboek instellen',
|
||||
'pages_edit_enter_changelog_desc' => 'Geef een korte omschrijving van de wijzigingen die je gemaakt hebt',
|
||||
'pages_edit_enter_changelog' => 'Voeg toe aan wijzigingslogboek',
|
||||
'pages_editor_switch_title' => 'Wijzig Bewerker',
|
||||
'pages_editor_switch_are_you_sure' => 'Weet u zeker dat u de bewerker voor deze pagina wilt wijzigen?',
|
||||
'pages_editor_switch_consider_following' => 'Houd rekening met het volgende als u van bewerker verandert:',
|
||||
'pages_editor_switch_consideration_a' => 'Eenmaal opgeslagen, zal de nieuwe bewerker keuze gebruikt worden door alle toekomstige gebruikers, ook diegene die zelf niet van bewerker type kunnen veranderen.',
|
||||
'pages_editor_switch_consideration_b' => 'Dit kan mogelijks tot een verlies van detail en syntax leiden in bepaalde omstandigheden.',
|
||||
'pages_editor_switch_consideration_c' => 'De veranderingen aan Tags of aan het wijzigingslogboek, sinds de laatste keer opslaan, zullen niet behouden blijven met deze wijziging.',
|
||||
'pages_editor_switch_title' => 'Switch Editor',
|
||||
'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?',
|
||||
'pages_editor_switch_consider_following' => 'Consider the following when changing editors:',
|
||||
'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.',
|
||||
'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.',
|
||||
'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.',
|
||||
'pages_save' => 'Pagina opslaan',
|
||||
'pages_title' => 'Pagina titel',
|
||||
'pages_name' => 'Pagina naam',
|
||||
'pages_md_editor' => 'Bewerker',
|
||||
'pages_md_editor' => 'Bewerken',
|
||||
'pages_md_preview' => 'Voorbeeld',
|
||||
'pages_md_insert_image' => 'Afbeelding invoegen',
|
||||
'pages_md_insert_link' => 'Entity link invoegen',
|
||||
@@ -235,7 +235,7 @@ return [
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_numbered' => 'Revisie #:id',
|
||||
'pages_revisions_numbered_changes' => 'Revisie #:id wijzigingen',
|
||||
'pages_revisions_editor' => 'Bewerker Type',
|
||||
'pages_revisions_editor' => 'Editor Type',
|
||||
'pages_revisions_changelog' => 'Wijzigingsoverzicht',
|
||||
'pages_revisions_changes' => 'Wijzigingen',
|
||||
'pages_revisions_current' => 'Huidige versie',
|
||||
|
||||
@@ -27,8 +27,8 @@ return [
|
||||
'app_secure_images' => 'Uploaden van afbeeldingen met hogere beveiliging',
|
||||
'app_secure_images_toggle' => 'Activeer uploaden van afbeeldingen met hogere beveiliging',
|
||||
'app_secure_images_desc' => 'Om prestatieredenen zijn alle afbeeldingen openbaar. Deze optie voegt een willekeurige en moeilijk te raden tekst toe aan de URL\'s van de afbeeldingen. Zorg ervoor dat "directory indexes" niet ingeschakeld zijn om eenvoudige toegang te voorkomen.',
|
||||
'app_default_editor' => 'Standaard Pagina Bewerker',
|
||||
'app_default_editor_desc' => 'Selecteer welke bewerker standaard zal worden gebruikt bij het bewerken van nieuwe pagina\'s. Dit kan worden overschreven op paginaniveau als de rechten dat toestaan.',
|
||||
'app_default_editor' => 'Default Page Editor',
|
||||
'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.',
|
||||
'app_custom_html' => 'HTML aan <head> toevoegen',
|
||||
'app_custom_html_desc' => 'Alle hieronder toegevoegde data wordt aan het einde van de <head> sectie van elke pagina toegevoegd. Gebruik dit om stijlen te overschrijven of analytische code toe te voegen.',
|
||||
'app_custom_html_disabled_notice' => 'Bovenstaande wordt niet toegevoegd aan deze pagina om ervoor te zorgen dat je foutieve code steeds ongedaan kan maken.',
|
||||
@@ -152,7 +152,7 @@ return [
|
||||
'role_access_api' => 'Ga naar systeem API',
|
||||
'role_manage_settings' => 'Beheer app instellingen',
|
||||
'role_export_content' => 'Exporteer inhoud',
|
||||
'role_editor_change' => 'Wijzig pagina bewerker',
|
||||
'role_editor_change' => 'Change page editor',
|
||||
'role_asset' => 'Asset Machtigingen',
|
||||
'roles_system_warning' => 'Wees ervan bewust dat toegang tot een van de bovengenoemde drie machtigingen een gebruiker in staat kan stellen zijn eigen machtigingen of de machtigingen van anderen in het systeem kan wijzigen. Wijs alleen rollen toe met deze machtigingen aan vertrouwde gebruikers.',
|
||||
'role_asset_desc' => 'Deze machtigingen bepalen de standaard toegang tot de assets binnen het systeem. Machtigingen op boeken, hoofdstukken en pagina\'s overschrijven deze instelling.',
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina (Argentijns Spaans)',
|
||||
'et' => 'Eesti keel (Estisch)',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français (Frans)',
|
||||
'he' => 'עברית (Hebreeuws)',
|
||||
'hr' => 'Hrvatski (Kroatisch)',
|
||||
|
||||
@@ -196,19 +196,19 @@ return [
|
||||
'pages_edit_draft_save_at' => 'Wersja robocza zapisana ',
|
||||
'pages_edit_delete_draft' => 'Usuń wersje roboczą',
|
||||
'pages_edit_discard_draft' => 'Porzuć wersje roboczą',
|
||||
'pages_edit_switch_to_markdown' => 'Przełącz na edytor Markdown',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Czysta zawartość)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Statyczna zawartość)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Przełącz na edytor WYSIWYG',
|
||||
'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Clean Content)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stable Content)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor',
|
||||
'pages_edit_set_changelog' => 'Ustaw dziennik zmian',
|
||||
'pages_edit_enter_changelog_desc' => 'Opisz zmiany, które zostały wprowadzone',
|
||||
'pages_edit_enter_changelog' => 'Wyświetl dziennik zmian',
|
||||
'pages_editor_switch_title' => 'Przełącz edytor',
|
||||
'pages_editor_switch_are_you_sure' => 'Czy na pewno chcesz zmienić edytor dla tej strony?',
|
||||
'pages_editor_switch_consider_following' => 'Przy zmianie edytorów pamiętaj, że:',
|
||||
'pages_editor_switch_consideration_a' => 'Po zapisaniu nowo ustawiony edytor będzie używany przez przyszłych edytujących użytkowników, w tym również tych, którzy sami mogą nie być w stanie zmienić edytora.',
|
||||
'pages_editor_switch_consideration_b' => 'Może to potencjalnie prowadzić do utraty szczegółów i składni w pewnych przypadkach.',
|
||||
'pages_editor_switch_consideration_c' => 'Zmiany w znacznikach lub w dzienniku zmian, zrobione od ostatniego zapisu, nie zostaną zapamiętane przy tej zmianie.',
|
||||
'pages_editor_switch_title' => 'Switch Editor',
|
||||
'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?',
|
||||
'pages_editor_switch_consider_following' => 'Consider the following when changing editors:',
|
||||
'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.',
|
||||
'pages_editor_switch_consideration_b' => 'This can potentially lead to a loss of detail and syntax in certain circumstances.',
|
||||
'pages_editor_switch_consideration_c' => 'Tag or changelog changes, made since last save, won\'t persist across this change.',
|
||||
'pages_save' => 'Zapisz stronę',
|
||||
'pages_title' => 'Tytuł strony',
|
||||
'pages_name' => 'Nazwa strony',
|
||||
@@ -235,7 +235,7 @@ return [
|
||||
'pages_revisions_number' => '#',
|
||||
'pages_revisions_numbered' => 'Wersja #:id',
|
||||
'pages_revisions_numbered_changes' => 'Zmiany w wersji #:id',
|
||||
'pages_revisions_editor' => 'Typ edytora',
|
||||
'pages_revisions_editor' => 'Editor Type',
|
||||
'pages_revisions_changelog' => 'Dziennik zmian',
|
||||
'pages_revisions_changes' => 'Zmiany',
|
||||
'pages_revisions_current' => 'Obecna wersja',
|
||||
|
||||
@@ -27,8 +27,8 @@ return [
|
||||
'app_secure_images' => 'Włączyć przesyłanie obrazów o wyższym poziomie bezpieczeństwa?',
|
||||
'app_secure_images_toggle' => 'Włącz wyższy poziom bezpieczeństwa dla obrazów',
|
||||
'app_secure_images_desc' => 'Ze względów wydajnościowych wszystkie obrazki są publiczne. Ta opcja dodaje dodatkowy, trudny do odgadnięcia losowy ciąg na początku nazwy obrazka. Upewnij się że indeksowanie katalogów jest zablokowane, aby uniemożliwić łatwy dostęp do obrazków.',
|
||||
'app_default_editor' => 'Domyślny edytor stron',
|
||||
'app_default_editor_desc' => 'Wybierz, który edytor będzie domyślnie używany podczas edycji nowych stron. Może to być nadpisane na poziomie strony, na którym pozwalają na to uprawnienia.',
|
||||
'app_default_editor' => 'Default Page Editor',
|
||||
'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.',
|
||||
'app_custom_html' => 'Własna zawartość w tagu <head>',
|
||||
'app_custom_html_desc' => 'Zawartość dodana tutaj zostanie dołączona na dole sekcji <head> każdej strony. Przydatne przy nadpisywaniu styli lub dodawaniu analityki.',
|
||||
'app_custom_html_disabled_notice' => 'Niestandardowa zawartość nagłówka HTML jest wyłączona na tej stronie ustawień aby zapewnić, że wszystkie błedne zmiany (braking change) mogą zostać cofnięte.',
|
||||
@@ -152,7 +152,7 @@ return [
|
||||
'role_access_api' => 'Dostęp do systemowego API',
|
||||
'role_manage_settings' => 'Zarządzanie ustawieniami aplikacji',
|
||||
'role_export_content' => 'Eksportuj zawartość',
|
||||
'role_editor_change' => 'Zmień edytor strony',
|
||||
'role_editor_change' => 'Change page editor',
|
||||
'role_asset' => 'Zarządzanie zasobami',
|
||||
'roles_system_warning' => 'Pamiętaj, że dostęp do trzech powyższych uprawnień może pozwolić użytkownikowi na zmianę własnych uprawnień lub uprawnień innych osób w systemie. Przypisz tylko role z tymi uprawnieniami do zaufanych użytkowników.',
|
||||
'role_asset_desc' => 'Te ustawienia kontrolują zarządzanie zasobami systemu. Uprawnienia książek, rozdziałów i stron nadpisują te ustawienia.',
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Estoński',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -280,7 +280,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'İbranice',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -24,7 +24,7 @@ return [
|
||||
'width' => 'Ширина',
|
||||
'height' => 'Висота',
|
||||
'More' => 'Більше',
|
||||
'select' => 'Вибрати…',
|
||||
'select' => 'Select...',
|
||||
|
||||
// Toolbar
|
||||
'formats' => 'Формати',
|
||||
@@ -53,10 +53,10 @@ return [
|
||||
'align_left' => 'Вирівняти по лівому краю',
|
||||
'align_center' => 'Вирівняти по центру',
|
||||
'align_right' => 'Вирівнювання по правому краю',
|
||||
'align_justify' => 'За шириною',
|
||||
'align_justify' => 'Justify',
|
||||
'list_bullet' => 'Маркований список',
|
||||
'list_numbered' => 'Нумерований список',
|
||||
'list_task' => 'Список завдань',
|
||||
'list_task' => 'Task list',
|
||||
'indent_increase' => 'Збільшити відступ',
|
||||
'indent_decrease' => 'Зменшити відступ',
|
||||
'table' => 'Таблиця',
|
||||
@@ -95,8 +95,8 @@ return [
|
||||
'cell_type_cell' => 'Комірка',
|
||||
'cell_scope' => 'Scope',
|
||||
'cell_type_header' => 'Комірка заголовка',
|
||||
'merge_cells' => 'Об\'єднати комірки',
|
||||
'split_cell' => 'Роз\'єднати комірку',
|
||||
'merge_cells' => 'Merge cells',
|
||||
'split_cell' => 'Split cell',
|
||||
'table_row_group' => 'Група рядків',
|
||||
'table_column_group' => 'Група стовпців',
|
||||
'horizontal_align' => 'Горизонтальне вирівнювання',
|
||||
@@ -154,7 +154,7 @@ return [
|
||||
'toggle_label' => 'Перемкнути ярлики',
|
||||
|
||||
// About view
|
||||
'about' => 'Про редактор',
|
||||
'about' => 'About the editor',
|
||||
'about_title' => 'Про WYSIWYG редактор',
|
||||
'editor_license' => 'Ліцензія редактора і авторські права',
|
||||
'editor_tiny_license' => 'Цей редактор побудований за допомогою :tinyLink що забезпечується під ліцензією LGPL v2.1.',
|
||||
|
||||
@@ -196,14 +196,14 @@ return [
|
||||
'pages_edit_draft_save_at' => 'Чернетка збережена о ',
|
||||
'pages_edit_delete_draft' => 'Видалити чернетку',
|
||||
'pages_edit_discard_draft' => 'Відхилити чернетку',
|
||||
'pages_edit_switch_to_markdown' => 'Змінити редактор на Markdown',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Очистити вміст)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Стабілізувати вміст)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Змінити редактор на WYSIWYG',
|
||||
'pages_edit_switch_to_markdown' => 'Switch to Markdown Editor',
|
||||
'pages_edit_switch_to_markdown_clean' => '(Clean Content)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(Stable Content)',
|
||||
'pages_edit_switch_to_wysiwyg' => 'Switch to WYSIWYG Editor',
|
||||
'pages_edit_set_changelog' => 'Встановити журнал змін',
|
||||
'pages_edit_enter_changelog_desc' => 'Введіть короткий опис внесених вами змін',
|
||||
'pages_edit_enter_changelog' => 'Введіть список змін',
|
||||
'pages_editor_switch_title' => 'Змінити редактор',
|
||||
'pages_editor_switch_title' => 'Switch Editor',
|
||||
'pages_editor_switch_are_you_sure' => 'Are you sure you want to change the editor for this page?',
|
||||
'pages_editor_switch_consider_following' => 'Consider the following when changing editors:',
|
||||
'pages_editor_switch_consideration_a' => 'Once saved, the new editor option will be used by any future editors, including those that may not be able to change editor type themselves.',
|
||||
|
||||
@@ -10,8 +10,8 @@ return [
|
||||
'settings' => 'Налаштування',
|
||||
'settings_save' => 'Зберегти налаштування',
|
||||
'settings_save_success' => 'Налаштування збережено',
|
||||
'system_version' => 'Версія',
|
||||
'categories' => 'Категорії',
|
||||
'system_version' => 'System Version',
|
||||
'categories' => 'Categories',
|
||||
|
||||
// App Settings
|
||||
'app_customization' => 'Налаштування',
|
||||
@@ -27,8 +27,8 @@ return [
|
||||
'app_secure_images' => 'Вищі налаштування безпеки для зображень',
|
||||
'app_secure_images_toggle' => 'Увімкунти вищі налаштування безпеки для завантаження зображень',
|
||||
'app_secure_images_desc' => 'З міркувань продуктивності всі зображення є загальнодоступними. Цей параметр додає випадковий, важко передбачуваний рядок перед URL-адресами зображень. Переконайтеся, що індексація каталогів не активована, щоб запобігти легкому доступу.',
|
||||
'app_default_editor' => 'Стандартний редактор сторінок',
|
||||
'app_default_editor_desc' => 'Виберіть, який редактор буде використовуватися за замовчуванням під час редагування нових сторінок. Це можна перевизначити на рівні дозволів сторінки.',
|
||||
'app_default_editor' => 'Default Page Editor',
|
||||
'app_default_editor_desc' => 'Select which editor will be used by default when editing new pages. This can be overridden at a page level where permissions allow.',
|
||||
'app_custom_html' => 'Користувацький вміст HTML-заголовку',
|
||||
'app_custom_html_desc' => 'Будь-який доданий тут вміст буде вставлено в нижню частину розділу <head> кожної сторінки. Це зручно для перевизначення стилів, або додавання коду аналітики.',
|
||||
'app_custom_html_disabled_notice' => 'На цій сторінці налаштувань відключений користувацький вміст заголовка HTML, щоб гарантувати, що будь-які невдалі зміни можна буде відновити.',
|
||||
@@ -152,7 +152,7 @@ return [
|
||||
'role_access_api' => 'Доступ до системного API',
|
||||
'role_manage_settings' => 'Керування налаштуваннями програми',
|
||||
'role_export_content' => 'Вміст експорту',
|
||||
'role_editor_change' => 'Змінити редактор сторінок',
|
||||
'role_editor_change' => 'Change page editor',
|
||||
'role_asset' => 'Дозволи',
|
||||
'roles_system_warning' => 'Майте на увазі, що доступ до будь-якого з вищезазначених трьох дозволів може дозволити користувачеві змінювати власні привілеї або привілеї інших в системі. Ролі з цими дозволами призначайте лише довіреним користувачам.',
|
||||
'role_asset_desc' => 'Ці дозволи контролюють стандартні доступи всередині системи. Права на книги, розділи та сторінки перевизначать ці дозволи.',
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -23,7 +23,7 @@ return [
|
||||
'meta_updated' => '更新于 :timeLength',
|
||||
'meta_updated_name' => '由 :user 更新于 :timeLength',
|
||||
'meta_owned_name' => '拥有者 :user',
|
||||
'entity_select' => '选择项目',
|
||||
'entity_select' => '实体选择',
|
||||
'images' => '图片',
|
||||
'my_recent_drafts' => '我最近的草稿',
|
||||
'my_recently_viewed' => '我最近看过',
|
||||
@@ -197,7 +197,7 @@ return [
|
||||
'pages_edit_delete_draft' => '删除草稿',
|
||||
'pages_edit_discard_draft' => '放弃草稿',
|
||||
'pages_edit_switch_to_markdown' => '切换到 Markdown 编辑器',
|
||||
'pages_edit_switch_to_markdown_clean' => '(整理内容)',
|
||||
'pages_edit_switch_to_markdown_clean' => '(清除内容)',
|
||||
'pages_edit_switch_to_markdown_stable' => '(保留内容)',
|
||||
'pages_edit_switch_to_wysiwyg' => '切换到所见即所得编辑器',
|
||||
'pages_edit_set_changelog' => '更新说明',
|
||||
@@ -206,16 +206,16 @@ return [
|
||||
'pages_editor_switch_title' => '切换编辑器',
|
||||
'pages_editor_switch_are_you_sure' => '您确定要更改此页面的编辑器吗?',
|
||||
'pages_editor_switch_consider_following' => '更改编辑器时请注意以下事项:',
|
||||
'pages_editor_switch_consideration_a' => '一旦保存,任何未来的编辑都将使用新的编辑器,包括那些没有权限自行更改编辑器类型的用户。',
|
||||
'pages_editor_switch_consideration_b' => '在某些情况下这可能会导致丢失页面格式或功能损坏。',
|
||||
'pages_editor_switch_consideration_c' => '上次保存后修改的标签和更改日志将不会被保存。',
|
||||
'pages_editor_switch_consideration_a' => '一旦保存,任何未来的编辑都将使用新的编辑器,包括那些可能无法自行更改编辑器类型的编辑器。',
|
||||
'pages_editor_switch_consideration_b' => '这可能导致在某些情况下失去细节和语法。',
|
||||
'pages_editor_switch_consideration_c' => '此次修改不会保存上次保存后修改的标签和更改日志。',
|
||||
'pages_save' => '保存页面',
|
||||
'pages_title' => '页面标题',
|
||||
'pages_name' => '页面名',
|
||||
'pages_md_editor' => '编者',
|
||||
'pages_md_preview' => '预览',
|
||||
'pages_md_insert_image' => '插入图片',
|
||||
'pages_md_insert_link' => '插入项目链接',
|
||||
'pages_md_insert_link' => '插入实体链接',
|
||||
'pages_md_insert_drawing' => '插入图表',
|
||||
'pages_not_in_chapter' => '本页面不在某章节中',
|
||||
'pages_move' => '移动页面',
|
||||
|
||||
@@ -57,7 +57,7 @@ return [
|
||||
'page_custom_home_deletion' => '无法删除一个被设置为主页的页面',
|
||||
|
||||
// Entities
|
||||
'entity_not_found' => '未找到项目',
|
||||
'entity_not_found' => '未找到实体',
|
||||
'bookshelf_not_found' => '未找到书架',
|
||||
'book_not_found' => '未找到图书',
|
||||
'page_not_found' => '未找到页面',
|
||||
|
||||
@@ -237,14 +237,14 @@ return [
|
||||
// Webhooks
|
||||
'webhooks' => 'Webhooks',
|
||||
'webhooks_create' => '新建 Webhook',
|
||||
'webhooks_none_created' => '尚未创建任何 Webhook。',
|
||||
'webhooks_none_created' => '尚未创建任何 webhook',
|
||||
'webhooks_edit' => '编辑 Webhook',
|
||||
'webhooks_save' => '保存 Webhook',
|
||||
'webhooks_details' => 'Webhook 详情',
|
||||
'webhooks_details_desc' => '提供一个用户友好的名称和一个 POST Endpoint 作为 Webhook 数据发送的位置。',
|
||||
'webhooks_details_desc' => '提供一个用户友好的名称和一个 POST endpoint 作为 webhook 数据发送的位置。',
|
||||
'webhooks_events' => 'Webhook 事件',
|
||||
'webhooks_events_desc' => '选择所有应触发此 Webhook 的事件。',
|
||||
'webhooks_events_warning' => '请记住,即使应用了自定义权限,所有选定的事件也仍然会被触发。 确保使用此 Webhook 不会泄露机密内容。',
|
||||
'webhooks_events_desc' => '选择所有应触发此 webhook 的事件。',
|
||||
'webhooks_events_warning' => '请记住,即使应用了自定义权限,所有选定的事件也仍然会被触发。 确保使用此 webhook 不会泄露机密内容。',
|
||||
'webhooks_events_all' => '所有系统事件',
|
||||
'webhooks_name' => 'Webhook 名称',
|
||||
'webhooks_timeout' => 'Webhook 请求超时(秒)',
|
||||
@@ -255,7 +255,7 @@ return [
|
||||
'webhooks_delete_warning' => '这将会从系统中完全删除名为 “:webhookName” 的 webhook。',
|
||||
'webhooks_delete_confirm' => '您确定要删除此 Webhook 吗?',
|
||||
'webhooks_format_example' => 'Webhook 格式示例',
|
||||
'webhooks_format_example_desc' => 'Webhook 数据会以 POST 请求按照以下 JSON 格式发送到设置的 Endpoint。 “related_item” 和 “url” 属性是可选的,取决于触发的事件类型。',
|
||||
'webhooks_format_example_desc' => 'Webhook 数据会用 POST 请求按照以下 JSON 格式发送到设置的 endpoint。 “related_item” 和 “url” 属性是可选的,取决于触发的事件类型。',
|
||||
'webhooks_status' => 'Webhook 状态',
|
||||
'webhooks_last_called' => '最后一次调用:',
|
||||
'webhooks_last_errored' => '最后一个错误:',
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => 'עברית',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -279,7 +279,6 @@ return [
|
||||
'es_AR' => 'Español Argentina',
|
||||
'et' => 'Eesti keel',
|
||||
'eu' => 'Euskara',
|
||||
'fa' => 'فارسی',
|
||||
'fr' => 'Français',
|
||||
'he' => '希伯來語',
|
||||
'hr' => 'Hrvatski',
|
||||
|
||||
@@ -114,20 +114,26 @@
|
||||
|
||||
.markdown-display {
|
||||
margin-inline-start: -1px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.markdown-editor-display {
|
||||
background-color: #fff;
|
||||
padding: $-m;
|
||||
overflow-y: scroll;
|
||||
body {
|
||||
display: block;
|
||||
background-color: #fff;
|
||||
padding-inline-start: 16px;
|
||||
padding-inline-end: 16px;
|
||||
}
|
||||
[drawio-diagram]:hover {
|
||||
outline: 2px solid var(--color-primary);
|
||||
}
|
||||
[drawio-diagram] embed {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dark-mode .markdown-display {
|
||||
html.markdown-editor-display.dark-mode {
|
||||
background-color: #222;
|
||||
body {
|
||||
background-color: #222;
|
||||
}
|
||||
}
|
||||
|
||||
.editor-toolbar {
|
||||
|
||||
@@ -48,11 +48,6 @@ body.page-content.mce-content-body {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// Prevent interaction with embed contents
|
||||
.page-content.mce-content-body embed {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
// Details/summary editor usability
|
||||
.page-content.mce-content-body details summary {
|
||||
pointer-events: none;
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
<div class="mb-xs"><a href="#request-format">Request Format</a></div>
|
||||
<div class="mb-xs"><a href="#listing-endpoints">Listing Endpoints</a></div>
|
||||
<div class="mb-xs"><a href="#error-handling">Error Handling</a></div>
|
||||
<div class="mb-xs"><a href="#rate-limits">Rate Limits</a></div>
|
||||
</div>
|
||||
|
||||
@foreach($docs as $model => $endpoints)
|
||||
|
||||
@@ -160,23 +160,4 @@
|
||||
"message": "No authorization token found on the request"
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<h5 id="rate-limits" class="text-mono mb-m">Rate Limits</h5>
|
||||
<p>
|
||||
The API has built-in per-user rate-limiting to prevent potential abuse using the API.
|
||||
By default, this is set to 180 requests per minute but this can be changed by an administrator
|
||||
by setting an "API_REQUESTS_PER_MIN" .env option like so:
|
||||
</p>
|
||||
|
||||
<pre><code class="language-bash"># The number of API requests that can be made per minute by a single user.
|
||||
API_REQUESTS_PER_MIN=180</code></pre>
|
||||
|
||||
<p>
|
||||
When the limit is reached you will receive a 429 "Too Many Attempts." error response.
|
||||
It's generally good practice to limit requests made from your API client, where possible, to avoid
|
||||
affecting normal use of the system caused by over-consuming system resources.
|
||||
Keep in mind there may be other rate-limiting factors such as web-server & firewall controls.
|
||||
</p>
|
||||
</code></pre>
|
||||
@@ -17,6 +17,13 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script nonce="{{ $cspNonce }}">
|
||||
setTimeout(async () => {
|
||||
const result = await window.components["confirm-dialog"][0].show();
|
||||
console.log({result});
|
||||
}, 1000);
|
||||
</script>
|
||||
|
||||
<div class="container" id="home-default">
|
||||
<div class="grid third gap-xxl no-row-gap" >
|
||||
<div>
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
<div markdown-input class="flex flex-fill">
|
||||
<textarea id="markdown-editor-input"
|
||||
refs="markdown-editor@input"
|
||||
@if($errors->has('markdown')) class="text-neg" @endif
|
||||
name="markdown"
|
||||
rows="5">@if(isset($model) || old('markdown')){{ old('markdown') ?? ($model->markdown === '' ? $model->html : $model->markdown) }}@endif</textarea>
|
||||
@@ -35,10 +34,7 @@
|
||||
<div class="editor-toolbar">
|
||||
<div class="editor-toolbar-label">{{ trans('entities.pages_md_preview') }}</div>
|
||||
</div>
|
||||
<div class="markdown-display">
|
||||
<div refs="markdown-editor@display"
|
||||
class="page-content"></div>
|
||||
</div>
|
||||
<iframe src="about:blank" class="markdown-display" sandbox="allow-same-origin"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -615,7 +615,7 @@ class LdapTest extends TestCase
|
||||
|
||||
public function test_dump_user_details_option_works()
|
||||
{
|
||||
config()->set(['services.ldap.dump_user_details' => true, 'services.ldap.thumbnail_attribute' => 'jpegphoto']);
|
||||
config()->set(['services.ldap.dump_user_details' => true]);
|
||||
|
||||
$this->commonLdapMocks(1, 1, 1, 1, 1);
|
||||
$this->mockLdap->shouldReceive('searchAndGetEntries')->times(1)
|
||||
@@ -623,9 +623,7 @@ class LdapTest extends TestCase
|
||||
->andReturn(['count' => 1, 0 => [
|
||||
'uid' => [$this->mockUser->name],
|
||||
'cn' => [$this->mockUser->name],
|
||||
// Test dumping binary data for avatar responses
|
||||
'jpegphoto' => base64_decode('/9j/4AAQSkZJRg=='),
|
||||
'dn' => ['dc=test' . config('services.ldap.base_dn')],
|
||||
'dn' => ['dc=test' . config('services.ldap.base_dn')],
|
||||
]]);
|
||||
|
||||
$resp = $this->post('/login', [
|
||||
|
||||
@@ -258,24 +258,6 @@ class ExportTest extends TestCase
|
||||
unlink($testFilePath);
|
||||
}
|
||||
|
||||
public function test_page_export_contained_html_embed_elements_are_converted_to_images_with_srcs_inlined()
|
||||
{
|
||||
$page = Page::query()->first();
|
||||
$page->html = '<embed src="http://localhost/uploads/images/gallery/svg_test.svg"/>';
|
||||
$page->save();
|
||||
|
||||
$storageDisk = Storage::disk('local');
|
||||
$storageDisk->makeDirectory('uploads/images/gallery');
|
||||
$storageDisk->put('uploads/images/gallery/svg_test.svg', '<svg>good</svg>');
|
||||
|
||||
$resp = $this->asEditor()->get($page->getUrl('/export/html'));
|
||||
|
||||
$storageDisk->delete('uploads/images/gallery/svg_test.svg');
|
||||
|
||||
$resp->assertDontSee('http://localhost/uploads/images/gallery/svg_test.svg', false);
|
||||
$resp->assertSee('<img src="data:image/svg+xml;base64,PHN2Zz5nb29kPC9zdmc+">', false);
|
||||
}
|
||||
|
||||
public function test_exports_removes_scripts_from_custom_head()
|
||||
{
|
||||
$entities = [
|
||||
|
||||
@@ -111,7 +111,7 @@ class TestResponse extends BaseTestResponse
|
||||
|
||||
foreach ($elements as $element) {
|
||||
$element = new Crawler($element);
|
||||
if (preg_match("/$pattern/i", $element->text())) {
|
||||
if (preg_match("/$pattern/i", $element->html())) {
|
||||
$matched = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ class DrawioTest extends TestCase
|
||||
{
|
||||
use UsesImages;
|
||||
|
||||
public function test_get_image_as_base64_with_png_content()
|
||||
public function test_get_image_as_base64()
|
||||
{
|
||||
$page = Page::first();
|
||||
$this->asAdmin();
|
||||
@@ -23,27 +23,11 @@ class DrawioTest extends TestCase
|
||||
|
||||
$imageGet = $this->getJson("/images/drawio/base64/{$image->id}");
|
||||
$imageGet->assertJson([
|
||||
'content' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEcDCo5iYNs+gAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAFElEQVQI12O0jN/KgASYGFABqXwAZtoBV6Sl3hIAAAAASUVORK5CYII=',
|
||||
'content' => 'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEcDCo5iYNs+gAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAFElEQVQI12O0jN/KgASYGFABqXwAZtoBV6Sl3hIAAAAASUVORK5CYII=',
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_get_image_as_base64_with_svg_content()
|
||||
{
|
||||
$page = Page::first();
|
||||
$this->asAdmin();
|
||||
|
||||
$this->uploadImage('my-drawing.svg', $page->id, 'image/svg+xml', 'diagram.svg');
|
||||
$image = Image::first();
|
||||
$image->type = 'drawio';
|
||||
$image->save();
|
||||
|
||||
$imageGet = $this->getJson("/images/drawio/base64/{$image->id}");
|
||||
$imageGet->assertJson([
|
||||
'content' => 'data:image/svg+xml;base64,' . base64_encode(file_get_contents($this->getTestImageFilePath('diagram.svg'))),
|
||||
]);
|
||||
}
|
||||
|
||||
public function test_drawing_base64_upload_with_png()
|
||||
public function test_drawing_base64_upload()
|
||||
{
|
||||
$page = Page::first();
|
||||
$editor = $this->getEditor();
|
||||
@@ -51,7 +35,7 @@ class DrawioTest extends TestCase
|
||||
|
||||
$upload = $this->postJson('images/drawio', [
|
||||
'uploaded_to' => $page->id,
|
||||
'image' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEcDCo5iYNs+gAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAFElEQVQI12O0jN/KgASYGFABqXwAZtoBV6Sl3hIAAAAASUVORK5CYII=',
|
||||
'image' => 'image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEcDCo5iYNs+gAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAFElEQVQI12O0jN/KgASYGFABqXwAZtoBV6Sl3hIAAAAASUVORK5CYII=',
|
||||
]);
|
||||
|
||||
$upload->assertStatus(200);
|
||||
@@ -70,34 +54,6 @@ class DrawioTest extends TestCase
|
||||
$this->assertTrue($testImageData === $uploadedImageData, 'Uploaded image file data does not match our test image as expected');
|
||||
}
|
||||
|
||||
public function test_drawing_base64_upload_with_svg()
|
||||
{
|
||||
$page = Page::first();
|
||||
$editor = $this->getEditor();
|
||||
$this->actingAs($editor);
|
||||
|
||||
$upload = $this->postJson('images/drawio', [
|
||||
'uploaded_to' => $page->id,
|
||||
'image' => 'data:image/svg+xml;base64,' . base64_encode(file_get_contents($this->getTestImageFilePath('diagram.svg'))),
|
||||
]);
|
||||
|
||||
$upload->assertStatus(200);
|
||||
$upload->assertJson([
|
||||
'type' => 'drawio',
|
||||
'uploaded_to' => $page->id,
|
||||
'created_by' => $editor->id,
|
||||
'updated_by' => $editor->id,
|
||||
]);
|
||||
|
||||
$image = Image::where('type', '=', 'drawio')->first();
|
||||
$this->assertStringEndsWith('.svg', $image->path);
|
||||
$this->assertTrue(file_exists(public_path($image->path)), 'Uploaded image not found at path: ' . public_path($image->path));
|
||||
|
||||
$testImageData = file_get_contents($this->getTestImageFilePath('diagram.svg'));
|
||||
$uploadedImageData = file_get_contents(public_path($image->path));
|
||||
$this->assertTrue($testImageData === $uploadedImageData, 'Uploaded image file data does not match our test image as expected');
|
||||
}
|
||||
|
||||
public function test_drawio_url_can_be_configured()
|
||||
{
|
||||
config()->set('services.drawio', 'http://cats.com?dog=tree');
|
||||
|
||||
@@ -74,23 +74,6 @@ class ImageTest extends TestCase
|
||||
$this->assertStringNotContainsString('thumbs-', $imgDetails['response']->thumbs->display);
|
||||
}
|
||||
|
||||
public function test_svg_upload()
|
||||
{
|
||||
/** @var Page $page */
|
||||
$page = Page::query()->first();
|
||||
$admin = $this->getAdmin();
|
||||
$this->actingAs($admin);
|
||||
|
||||
$imgDetails = $this->uploadGalleryImage($page, 'diagram.svg', 'image/svg+xml');
|
||||
$this->assertFileExists(public_path($imgDetails['path']));
|
||||
$this->assertTrue(
|
||||
$imgDetails['response']->url === $imgDetails['response']->thumbs->gallery
|
||||
&& $imgDetails['response']->url === $imgDetails['response']->thumbs->display,
|
||||
);
|
||||
|
||||
$this->deleteImage($imgDetails['path']);
|
||||
}
|
||||
|
||||
public function test_image_edit()
|
||||
{
|
||||
$editor = $this->getEditor();
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
namespace Tests\Uploads;
|
||||
|
||||
use BookStack\Entities\Models\Page;
|
||||
use BookStack\Uploads\Image;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use stdClass;
|
||||
|
||||
@@ -40,9 +39,9 @@ trait UsesImages
|
||||
/**
|
||||
* Get a test image that can be uploaded.
|
||||
*/
|
||||
protected function getTestImage(string $fileName, ?string $testDataFileName = null, $mimeType = 'image/png'): UploadedFile
|
||||
protected function getTestImage(string $fileName, ?string $testDataFileName = null): UploadedFile
|
||||
{
|
||||
return new UploadedFile($this->getTestImageFilePath($testDataFileName), $fileName, $mimeType, null, true);
|
||||
return new UploadedFile($this->getTestImageFilePath($testDataFileName), $fileName, 'image/png', null, true);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -74,7 +73,7 @@ trait UsesImages
|
||||
*/
|
||||
protected function uploadImage($name, $uploadedTo = 0, $contentType = 'image/png', ?string $testDataFileName = null)
|
||||
{
|
||||
$file = $this->getTestImage($name, $testDataFileName, $contentType);
|
||||
$file = $this->getTestImage($name, $testDataFileName);
|
||||
|
||||
return $this->withHeader('Content-Type', $contentType)
|
||||
->call('POST', '/images/gallery', ['uploaded_to' => $uploadedTo], [], ['file' => $file], []);
|
||||
@@ -85,9 +84,11 @@ trait UsesImages
|
||||
* Returns the image name.
|
||||
* Can provide a page to relate the image to.
|
||||
*
|
||||
* @param Page|null $page
|
||||
*
|
||||
* @return array{name: string, path: string, page: Page, response: stdClass}
|
||||
*/
|
||||
protected function uploadGalleryImage(Page $page = null, string $testDataFileName = null, string $contentType = 'image/png')
|
||||
protected function uploadGalleryImage(Page $page = null, ?string $testDataFileName = null)
|
||||
{
|
||||
if ($page === null) {
|
||||
$page = Page::query()->first();
|
||||
@@ -97,7 +98,7 @@ trait UsesImages
|
||||
$relPath = $this->getTestImagePath('gallery', $imageName);
|
||||
$this->deleteImage($relPath);
|
||||
|
||||
$upload = $this->uploadImage($imageName, $page->id, $contentType, $testDataFileName);
|
||||
$upload = $this->uploadImage($imageName, $page->id, 'image/png', $testDataFileName);
|
||||
$upload->assertStatus(200);
|
||||
|
||||
return [
|
||||
|
||||
@@ -34,18 +34,4 @@ class UrlTest extends TestCase
|
||||
$this->assertEquals('/cool/docs', $bsRequest->getBaseUrl());
|
||||
$this->assertEquals('https://donkey.example.com:8091/cool/docs/login', $bsRequest->getUri());
|
||||
}
|
||||
|
||||
public function test_app_url_without_path_does_not_duplicate_path_slash()
|
||||
{
|
||||
config()->set('app.url', 'https://donkey.example.com');
|
||||
|
||||
// Have to manually get and wrap request in our custom type due to testing mechanics
|
||||
$this->get('/settings');
|
||||
$bsRequest = Request::createFrom(request());
|
||||
|
||||
$this->assertEquals('https://donkey.example.com', $bsRequest->getSchemeAndHttpHost());
|
||||
$this->assertEquals('', $bsRequest->getBaseUrl());
|
||||
$this->assertEquals('/settings', $bsRequest->getPathInfo());
|
||||
$this->assertEquals('https://donkey.example.com/settings', $bsRequest->getUri());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="121px" height="141px" viewBox="-0.5 -0.5 121 141"><defs/><g><ellipse cx="25" cy="87.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 25 95 L 25 120 M 25 100 L 10 100 M 25 100 L 40 100 M 25 120 L 10 140 M 25 120 L 40 140" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 0 0 L 120 0 L 120 50 L 80 50 L 60 80 L 60 50 L 0 50 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 25px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0px; text-align: center;" data-drawio-colors="color: rgb(0, 0, 0); "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Hello!</div></div></div></foreignObject><text x="60" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Hello!</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB |
Reference in New Issue
Block a user