Version Description
(2020-01-23) =
Changed
- Updated code to fix deprecation warnings on PHP version 7.4 and later.
- Updated the Twig library to version 1.41.0
to fix deprecation warnings on PHP version 7.4 and later.
- Updated the default translation files to contain up-to-date text.
Fixed
- Removed a false-positive error from the log.
- Localization in Twig templates did not work.
- When revisions are enabled, an error would prevent feed sources from being saved.
- Translations were being loaded from an invalid path.
- The default featured image in the New/Edit Feed Source page did not preview after saving the feed source.
- Missing space between the link a
tag and the href
attribute on PHP 7.4
Download this release
Release Info
Developer | Mekku |
Plugin | WP RSS Aggregator |
Version | 4.17.3 |
Comparing to | |
See all releases |
Code changes from version 4.17.2 to 4.17.3
- CHANGELOG.md +17 -0
- css/src/common/index.scss +0 -3
- css/src/common/info-box.scss +0 -16
- css/src/common/notice-block.scss +0 -64
- css/src/gutenberg-block/index.scss +0 -14
- css/src/intro/animation.scss +0 -48
- css/src/intro/expander.scss +0 -26
- css/src/intro/loading.scss +0 -131
- css/src/intro/steps.scss +0 -647
- css/src/mixins.scss +0 -32
- css/src/pagination/index.scss +0 -10
- css/src/plugins/form.scss +0 -48
- css/src/plugins/index.scss +0 -25
- css/src/plugins/modal.scss +0 -173
- css/src/templates/bottom-panel.scss +0 -15
- css/src/templates/grid.scss +0 -18
- css/src/templates/index.scss +0 -216
- css/src/templates/loading.scss +0 -220
- css/src/templates/notifications.scss +0 -28
- css/src/update/index.scss +0 -149
- includes/Aventura/Wprss/Core/Model/AssetsAbstract.php +2 -2
- includes/admin-debugging.php +0 -341
- includes/cron-jobs.php +1 -1
- includes/feed-importing.php +8 -2
- includes/functions.php +34 -0
- includes/scripts.php +12 -3
- js/admin/tools/crons.js +467 -182
- js/src/components/BottomPanel.vue +0 -9
- js/src/components/Button.js +0 -14
- js/src/components/Expander.vue +0 -36
- js/src/components/Input.js +0 -100
- js/src/components/Layout.js +0 -11
- js/src/components/Main.js +0 -11
- js/src/components/MediaInput.js +0 -96
- js/src/components/Modal.vue +0 -114
- js/src/components/NoticeBlock.js +0 -143
- js/src/components/Postbox.vue +0 -44
- js/src/components/RouteLink.js +0 -27
- js/src/components/RouterApp.js +0 -47
- js/src/components/SerializedForm.vue +0 -89
- js/src/components/Sidebar.js +0 -11
- js/src/components/TransitionExpand.vue +0 -66
- js/src/components/index.js +0 -15
- js/src/libs/NotificationCenter.js +0 -45
- js/src/libs/Router.js +0 -122
- js/src/mixins/DataChangesAware.js +0 -47
- js/src/modules/gutenberg-block/components/MultipleSelectControl.js +0 -85
- js/src/modules/gutenberg-block/index.js +0 -209
- js/src/modules/intro/Wizard.vue +0 -440
- js/src/modules/intro/index.js +0 -11
- js/src/modules/pagination/index.js +0 -47
- js/src/modules/plugins/PluginDisablePoll.vue +0 -122
- js/src/modules/plugins/index.js +0 -10
- js/src/modules/templates/Edit.js +0 -491
- js/src/modules/templates/List.js +0 -350
- js/src/modules/templates/app.js +0 -117
- js/src/modules/templates/index.js +0 -36
- js/src/modules/templates/store/actions.js +0 -1
- js/src/modules/templates/store/getters.js +0 -7
- js/src/modules/templates/store/index.js +0 -12
- js/src/modules/templates/store/mutations.js +0 -10
- js/src/modules/templates/store/state.js +0 -18
- js/src/utils/Collection.js +0 -178
- js/src/utils/base64.js +0 -133
- js/src/utils/copy.js +0 -43
- js/src/utils/deepmerge.js +0 -72
- js/src/utils/fetch.js +0 -26
- js/src/utils/jsonClone.js +0 -3
- languages/default.mo +0 -0
- languages/default.po +2025 -856
- readme.txt +15 -1
- src/Handlers/FeedSources/FeedSourceSaveMetaHandler.php +5 -0
- src/Modules/CoreModule.php +8 -0
- src/Modules/I18nModule.php +14 -4
- src/Modules/ImagesModule.php +8 -3
- src/RestApi/EndPoints/Handlers/GetEntityHandler.php +9 -9
- src/Twig/Extensions/I18n/I18nTransNode.php +1 -1
- src/Twig/Extensions/WpraExtension.php +5 -2
- templates/admin/feeds/images-meta-box.twig +1 -1
- templates/admin/tools/crons.twig +105 -48
- test/bootstrap.php +0 -21
- vendor/autoload.php +1 -1
- vendor/composer/autoload_classmap.php +2 -0
- vendor/composer/autoload_psr4.php +7 -7
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +23 -21
- vendor/composer/installed.json +32 -29
- vendor/dhii/output-renderer-interface/src/BlockFactoryInterface.php +3 -3
- vendor/dhii/output-renderer-interface/src/TemplateFactoryInterface.php +3 -3
- vendor/erusev/parsedown/Parsedown.php +23 -4
- vendor/symfony/polyfill-ctype/composer.json +1 -1
- vendor/twig/twig/composer.json +1 -1
- vendor/twig/twig/drupal_test.sh +51 -0
- vendor/twig/twig/src/Environment.php +4 -3
- vendor/twig/twig/src/Error/Error.php +0 -6
- vendor/twig/twig/src/ExpressionParser.php +69 -6
- vendor/twig/twig/src/Extension/CoreExtension.php +46 -1
- vendor/twig/twig/src/Extension/DebugExtension.php +1 -1
- vendor/twig/twig/src/Extension/StringLoaderExtension.php +3 -3
- vendor/twig/twig/src/Lexer.php +41 -35
- vendor/twig/twig/src/Loader/FilesystemLoader.php +26 -5
- vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php +64 -0
- vendor/twig/twig/src/Node/Expression/NameExpression.php +8 -1
- vendor/twig/twig/src/Node/ImportNode.php +1 -1
- vendor/twig/twig/src/Node/MacroNode.php +1 -1
- vendor/twig/twig/src/Node/Node.php +2 -2
- vendor/twig/twig/src/Node/SetNode.php +1 -1
- vendor/twig/twig/src/Node/SpacelessNode.php +1 -1
- vendor/twig/twig/src/NodeTraverser.php +5 -1
- vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php +3 -1
- vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php +1 -1
- vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php +1 -1
- vendor/twig/twig/src/Profiler/Profile.php +1 -1
- vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php +1 -1
- vendor/twig/twig/src/Template.php +16 -3
- vendor/twig/twig/src/TemplateWrapper.php +12 -2
- vendor/twig/twig/src/Test/IntegrationTestCase.php +1 -1
- vendor/twig/twig/src/Test/NodeTestCase.php +1 -1
- vendor/twig/twig/src/Token.php +6 -0
- vendor/twig/twig/src/TokenParser/AbstractTokenParser.php +3 -0
- vendor/twig/twig/src/TokenParser/ApplyTokenParser.php +58 -0
- vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php +3 -0
- vendor/twig/twig/src/TokenParser/MacroTokenParser.php +3 -0
- webpack/webpack.react.js +0 -145
- webpack/webpack.vue.js +0 -109
- wp-rss-aggregator.php +3 -3
CHANGELOG.md
CHANGED
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file.
|
|
4 |
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
5 |
and this project adheres to [Semantic Versioning](http://semver.org/).
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
## [4.17.2] - 2019-12-19
|
8 |
### Added
|
9 |
* The error handler now includes the file and line where the error occurred.
|
4 |
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
5 |
and this project adheres to [Semantic Versioning](http://semver.org/).
|
6 |
|
7 |
+
## [4.17.3] - 2020-01-23
|
8 |
+
### Changed
|
9 |
+
* Updated code to fix deprecation warnings on PHP version 7.4 and later.
|
10 |
+
* Updated the Twig library to version `1.41.0` to fix deprecation warnings on PHP version 7.4 and later.
|
11 |
+
* Updated the default translation files to contain up-to-date text.
|
12 |
+
|
13 |
+
### Fixed
|
14 |
+
* Removed a false-positive error from the log.
|
15 |
+
* Localization in Twig templates did not work.
|
16 |
+
* When revisions are enabled, an error would prevent feed sources from being saved.
|
17 |
+
* Translations were being loaded from an invalid path.
|
18 |
+
* The default featured image in the New/Edit Feed Source page did not preview after saving the feed source.
|
19 |
+
* Missing space between the link `a` tag and the `href` attribute on PHP 7.4
|
20 |
+
|
21 |
+
### Removed
|
22 |
+
* Removed warning when trying to blacklist a non-imported post.
|
23 |
+
|
24 |
## [4.17.2] - 2019-12-19
|
25 |
### Added
|
26 |
* The error handler now includes the file and line where the error occurred.
|
css/src/common/index.scss
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
@import "./../mixins";
|
2 |
-
@import "notice-block";
|
3 |
-
@import "info-box";
|
|
|
|
|
|
css/src/common/info-box.scss
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
.wpra-info-box {
|
2 |
-
background: #daf4ff;
|
3 |
-
padding: 8px 12px;
|
4 |
-
border-radius: 3px;
|
5 |
-
display: flex;
|
6 |
-
|
7 |
-
&__icon {
|
8 |
-
opacity: .4;
|
9 |
-
flex-shrink: 0;
|
10 |
-
}
|
11 |
-
|
12 |
-
&__text {
|
13 |
-
flex-grow: 1;
|
14 |
-
padding-left: 8px;
|
15 |
-
}
|
16 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/common/notice-block.scss
DELETED
@@ -1,64 +0,0 @@
|
|
1 |
-
.wpra-notice-block {
|
2 |
-
background-color: white;
|
3 |
-
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
|
4 |
-
padding: 12px 16px;
|
5 |
-
margin-top: .5rem;
|
6 |
-
margin-bottom: .15rem;
|
7 |
-
//border-left: 4px solid #ff792b;
|
8 |
-
|
9 |
-
&.postbox {
|
10 |
-
margin-top: 0;
|
11 |
-
margin-bottom: 20px;
|
12 |
-
box-shadow: 0;
|
13 |
-
|
14 |
-
.wpra-notice-block__body {
|
15 |
-
font-size: 14px;
|
16 |
-
opacity: .8;
|
17 |
-
}
|
18 |
-
}
|
19 |
-
|
20 |
-
&__title {
|
21 |
-
font-size: 22px;
|
22 |
-
padding: .5rem 0 1rem;
|
23 |
-
max-width: 65rem;
|
24 |
-
}
|
25 |
-
|
26 |
-
&__body {
|
27 |
-
line-height: 1.5;
|
28 |
-
font-size: 16px;
|
29 |
-
opacity: .7;
|
30 |
-
max-width: 65rem;
|
31 |
-
}
|
32 |
-
|
33 |
-
&__buttons {
|
34 |
-
padding: 1rem 0 .5rem;
|
35 |
-
|
36 |
-
.button {
|
37 |
-
height: 34px;
|
38 |
-
line-height: 32px;
|
39 |
-
padding: 0 16px 2px;
|
40 |
-
|
41 |
-
.dashicons {
|
42 |
-
font-size: 16px;
|
43 |
-
vertical-align: middle;
|
44 |
-
opacity: .75;
|
45 |
-
margin-left: 2px;
|
46 |
-
}
|
47 |
-
|
48 |
-
&-clear {
|
49 |
-
margin-left: 8px;
|
50 |
-
font-weight: 500;
|
51 |
-
color: #0085ba;
|
52 |
-
border: none;
|
53 |
-
background: none;
|
54 |
-
box-shadow: none;
|
55 |
-
|
56 |
-
&:hover, &:active, &:focus {
|
57 |
-
border: none;
|
58 |
-
background: none;
|
59 |
-
box-shadow: none;
|
60 |
-
}
|
61 |
-
}
|
62 |
-
}
|
63 |
-
}
|
64 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/gutenberg-block/index.scss
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
.wpra-gutenberg-block, [data-type="wpra-shortcode/wpra-shortcode"] {
|
2 |
-
.wpra-item {
|
3 |
-
// Prevent clicking on feed item links.
|
4 |
-
a {
|
5 |
-
pointer-events: none !important;
|
6 |
-
}
|
7 |
-
}
|
8 |
-
}
|
9 |
-
|
10 |
-
.nav-links::after {
|
11 |
-
display: block;
|
12 |
-
content: '';
|
13 |
-
clear: both;
|
14 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/intro/animation.scss
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
.wrpa-expander {
|
2 |
-
will-change: height;
|
3 |
-
transform: translateZ(0);
|
4 |
-
backface-visibility: hidden;
|
5 |
-
perspective: 1000px;
|
6 |
-
}
|
7 |
-
|
8 |
-
.expand-enter-active,
|
9 |
-
.expand-leave-active {
|
10 |
-
transition: height .35s ease;
|
11 |
-
overflow: hidden;
|
12 |
-
}
|
13 |
-
|
14 |
-
.expand-enter,
|
15 |
-
.expand-leave-to {
|
16 |
-
height: 0;
|
17 |
-
}
|
18 |
-
|
19 |
-
.fade-enter, .fade-leave-to {
|
20 |
-
opacity: 0;
|
21 |
-
}
|
22 |
-
.fade-enter-active, .fade-leave-active {
|
23 |
-
transition: opacity .3s ease;
|
24 |
-
}
|
25 |
-
|
26 |
-
.slide-up-enter {
|
27 |
-
transform: translateY(10px);
|
28 |
-
opacity: 0;
|
29 |
-
}
|
30 |
-
.slide-up-leave-to {
|
31 |
-
transform: translateY(-10px);
|
32 |
-
opacity: 0;
|
33 |
-
}
|
34 |
-
.slide-up-enter-active, .slide-up-leave-active {
|
35 |
-
transition: all .3s ease;
|
36 |
-
}
|
37 |
-
|
38 |
-
.slide-down-enter {
|
39 |
-
transform: translateY(-10px);
|
40 |
-
opacity: 0;
|
41 |
-
}
|
42 |
-
.slide-down-leave-to {
|
43 |
-
transform: translateY(10px);
|
44 |
-
opacity: 0;
|
45 |
-
}
|
46 |
-
.slide-down-enter-active, .slide-down-leave-active {
|
47 |
-
transition: all .3s ease;
|
48 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/intro/expander.scss
DELETED
@@ -1,26 +0,0 @@
|
|
1 |
-
.wpra-expander {
|
2 |
-
&__title {
|
3 |
-
cursor: pointer;
|
4 |
-
user-select: none;
|
5 |
-
span {
|
6 |
-
opacity: .5;
|
7 |
-
vertical-align: bottom;
|
8 |
-
transition: transform .3s ease;
|
9 |
-
}
|
10 |
-
}
|
11 |
-
&__content {
|
12 |
-
padding: 0 .5rem;
|
13 |
-
opacity: 0;
|
14 |
-
transition: opacity .3s ease;
|
15 |
-
}
|
16 |
-
&--expanded {
|
17 |
-
.wpra-expander__content {
|
18 |
-
opacity: 1;
|
19 |
-
}
|
20 |
-
.wpra-expander__title {
|
21 |
-
span {
|
22 |
-
transform: rotate(180deg);
|
23 |
-
}
|
24 |
-
}
|
25 |
-
}
|
26 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/intro/loading.scss
DELETED
@@ -1,131 +0,0 @@
|
|
1 |
-
[v-cloak] {
|
2 |
-
.vcloak {
|
3 |
-
&--visible {
|
4 |
-
display: block;
|
5 |
-
}
|
6 |
-
&--hidden {
|
7 |
-
display: none;
|
8 |
-
}
|
9 |
-
}
|
10 |
-
}
|
11 |
-
.vcloak {
|
12 |
-
&--visible {
|
13 |
-
min-height: 60px;
|
14 |
-
display: none;
|
15 |
-
}
|
16 |
-
}
|
17 |
-
|
18 |
-
.loading-container {
|
19 |
-
position: relative;
|
20 |
-
&:before {
|
21 |
-
display: block;
|
22 |
-
content: '';
|
23 |
-
position: absolute;
|
24 |
-
left: calc(50% - 20px);
|
25 |
-
top: calc(50% - 20px);
|
26 |
-
box-sizing: border-box;
|
27 |
-
height: 40px;
|
28 |
-
width: 40px;
|
29 |
-
border: 0px solid #d0d0d0;
|
30 |
-
border-radius: 50%;
|
31 |
-
box-shadow: 0 -12px 0 16px #d0d0d0 inset;
|
32 |
-
animation: rotate 1s infinite linear;
|
33 |
-
z-index: 3;
|
34 |
-
}
|
35 |
-
&:after {
|
36 |
-
display: block;
|
37 |
-
content: '';
|
38 |
-
position: absolute;
|
39 |
-
z-index: 2;
|
40 |
-
background-color: rgba(241, 241, 241, 0.5);
|
41 |
-
width: 100%;
|
42 |
-
height: 100%;
|
43 |
-
left: 0;
|
44 |
-
top: 0;
|
45 |
-
}
|
46 |
-
&--white {
|
47 |
-
&:after {
|
48 |
-
background-color: white;
|
49 |
-
}
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
|
54 |
-
.loading-button {
|
55 |
-
pointer-events: none;
|
56 |
-
position: relative;
|
57 |
-
&:before {
|
58 |
-
display: block;
|
59 |
-
content: '';
|
60 |
-
position: absolute;
|
61 |
-
left: calc(50% - 8px);
|
62 |
-
top: calc(50% - 8px);
|
63 |
-
box-sizing: border-box;
|
64 |
-
height: 16px;
|
65 |
-
width: 16px;
|
66 |
-
border: 0px solid #fff;
|
67 |
-
border-radius: 50%;
|
68 |
-
box-shadow: 0 -4px 0 6px #fff inset;
|
69 |
-
animation: rotate 1s infinite linear;
|
70 |
-
z-index: 3;
|
71 |
-
}
|
72 |
-
&:after {
|
73 |
-
display: block;
|
74 |
-
content: '';
|
75 |
-
position: absolute;
|
76 |
-
z-index: 2;
|
77 |
-
background-color: inherit;
|
78 |
-
width: 100%;
|
79 |
-
height: 100%;
|
80 |
-
left: 0;
|
81 |
-
top: 0;
|
82 |
-
}
|
83 |
-
}
|
84 |
-
|
85 |
-
.button-default {
|
86 |
-
&.loading-button:before {
|
87 |
-
box-shadow: inset 0 -4px 0 6px #6f6f6f;
|
88 |
-
}
|
89 |
-
}
|
90 |
-
|
91 |
-
.loading-inline {
|
92 |
-
display: inline-block;
|
93 |
-
pointer-events: none;
|
94 |
-
position: relative;
|
95 |
-
&:before {
|
96 |
-
display: block;
|
97 |
-
content: '';
|
98 |
-
position: absolute;
|
99 |
-
left: calc(50% + 1px);
|
100 |
-
top: calc(50% - 11px);
|
101 |
-
box-sizing: border-box;
|
102 |
-
height: 14px;
|
103 |
-
width: 14px;
|
104 |
-
border: 0px solid #d0d0d0;
|
105 |
-
border-radius: 50%;
|
106 |
-
box-shadow: 0 -3px 0 5px #d0d0d0 inset;
|
107 |
-
animation: rotate 1s infinite linear;
|
108 |
-
z-index: 3;
|
109 |
-
}
|
110 |
-
&:after {
|
111 |
-
display: block;
|
112 |
-
content: '';
|
113 |
-
position: absolute;
|
114 |
-
z-index: 2;
|
115 |
-
background-color: inherit;
|
116 |
-
width: 100%;
|
117 |
-
height: 100%;
|
118 |
-
left: 0;
|
119 |
-
top: 0;
|
120 |
-
}
|
121 |
-
}
|
122 |
-
|
123 |
-
|
124 |
-
@keyframes rotate {
|
125 |
-
0% {
|
126 |
-
transform: rotate(0deg);
|
127 |
-
}
|
128 |
-
100% {
|
129 |
-
transform: rotate(360deg);
|
130 |
-
}
|
131 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/intro/steps.scss
DELETED
@@ -1,647 +0,0 @@
|
|
1 |
-
$dark-gray: transparentize(#000, .25);
|
2 |
-
$medium-gray: transparentize(#000, .5);
|
3 |
-
$deep-gray: transparentize(#000, .95);
|
4 |
-
$light-gray: transparentize(#000, .95);
|
5 |
-
$borderColor: transparentize(#000, .95);
|
6 |
-
$white: #fff;
|
7 |
-
$button-radius: 4px;
|
8 |
-
|
9 |
-
$wizard-width: 42rem;
|
10 |
-
|
11 |
-
$success-color: #00b479;
|
12 |
-
$primary-color: #1a53e6;
|
13 |
-
|
14 |
-
@import "animation";
|
15 |
-
@import "expander";
|
16 |
-
@import "loading";
|
17 |
-
|
18 |
-
@mixin clear() {
|
19 |
-
&:after {
|
20 |
-
clear: both;
|
21 |
-
display: block;
|
22 |
-
content: '';
|
23 |
-
}
|
24 |
-
}
|
25 |
-
|
26 |
-
@mixin breakpoint($point) {
|
27 |
-
@if $point == desktop {
|
28 |
-
@media (min-width: 70em) { @content ; }
|
29 |
-
}
|
30 |
-
@else if $point == laptop {
|
31 |
-
@media (min-width: 64em) { @content ; }
|
32 |
-
}
|
33 |
-
@else if $point == tablet {
|
34 |
-
@media (max-width: 50em) { @content ; }
|
35 |
-
}
|
36 |
-
@else if $point == phablet {
|
37 |
-
@media (min-width: 37.5em) { @content ; }
|
38 |
-
}
|
39 |
-
@else if $point == mobileonly {
|
40 |
-
@media (max-width: 37.5em) { @content ; }
|
41 |
-
|
42 |
-
}
|
43 |
-
}
|
44 |
-
|
45 |
-
.wpra-wizard-head {
|
46 |
-
display: flex;
|
47 |
-
padding-bottom: 1.5rem;
|
48 |
-
padding-top: .75rem;
|
49 |
-
&__logo {
|
50 |
-
flex-shrink: 0;
|
51 |
-
img {
|
52 |
-
width: 57px;
|
53 |
-
}
|
54 |
-
}
|
55 |
-
&__copy {
|
56 |
-
flex-grow: 1;
|
57 |
-
padding-left: 1rem;
|
58 |
-
display: flex;
|
59 |
-
flex-direction: column;
|
60 |
-
justify-content: center;
|
61 |
-
}
|
62 |
-
&__title {
|
63 |
-
font-size: 1.25rem;
|
64 |
-
font-weight: 500;
|
65 |
-
padding-bottom: 12px;
|
66 |
-
}
|
67 |
-
&__subtitle {
|
68 |
-
font-size: 1rem;
|
69 |
-
opacity: .85;
|
70 |
-
}
|
71 |
-
}
|
72 |
-
|
73 |
-
.wpra-cols {
|
74 |
-
&-title {
|
75 |
-
font-weight: normal;
|
76 |
-
font-size: 1rem;
|
77 |
-
padding-bottom: 1rem;
|
78 |
-
}
|
79 |
-
|
80 |
-
display: flex;
|
81 |
-
margin: 0 -.5rem;
|
82 |
-
border-top: 2px solid rgba(0,0,0,.05);
|
83 |
-
padding-top: 1.45rem;
|
84 |
-
|
85 |
-
@include breakpoint(tablet) {
|
86 |
-
flex-wrap: wrap;
|
87 |
-
}
|
88 |
-
.col {
|
89 |
-
flex-basis: 50%;
|
90 |
-
padding: 0 .5rem;
|
91 |
-
|
92 |
-
@include breakpoint(tablet) {
|
93 |
-
flex-basis: 100%;
|
94 |
-
padding-bottom: 1rem;
|
95 |
-
}
|
96 |
-
|
97 |
-
img {
|
98 |
-
max-width: 100%;
|
99 |
-
}
|
100 |
-
|
101 |
-
p {
|
102 |
-
font-size: 14px;
|
103 |
-
line-height: 1.6;
|
104 |
-
}
|
105 |
-
p:first-child {
|
106 |
-
margin-top: 0;
|
107 |
-
}
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
.wpra-feed-input {
|
112 |
-
width: 26rem;
|
113 |
-
padding: 6px 10px;
|
114 |
-
max-width: 100%;
|
115 |
-
}
|
116 |
-
|
117 |
-
.wpra-feedback {
|
118 |
-
display: flex;
|
119 |
-
&__photo {
|
120 |
-
flex-shrink: 0;
|
121 |
-
img {
|
122 |
-
width: 70px;
|
123 |
-
border-radius: 100%;
|
124 |
-
}
|
125 |
-
}
|
126 |
-
&__copy {
|
127 |
-
padding-left: .5rem;
|
128 |
-
flex-grow: 1;
|
129 |
-
}
|
130 |
-
&__text {
|
131 |
-
font-size: 1rem;
|
132 |
-
font-family: Georgia, serif;
|
133 |
-
font-style: italic;
|
134 |
-
line-height: 1.5;
|
135 |
-
}
|
136 |
-
&__rating {
|
137 |
-
padding: .25rem 0 .45rem;
|
138 |
-
span {
|
139 |
-
color: #f8ca29;
|
140 |
-
}
|
141 |
-
}
|
142 |
-
&__by {
|
143 |
-
opacity: .85;
|
144 |
-
a {
|
145 |
-
color: #617181;
|
146 |
-
}
|
147 |
-
}
|
148 |
-
}
|
149 |
-
|
150 |
-
.wpra-demo-photo {
|
151 |
-
margin-bottom: 1rem;
|
152 |
-
border-radius: 4px;
|
153 |
-
border: 1px solid rgba(0, 0, 0, 0.15);
|
154 |
-
}
|
155 |
-
|
156 |
-
.wpra-feed-items {
|
157 |
-
padding-left: .5rem;
|
158 |
-
margin-bottom: 1rem;
|
159 |
-
border-left: 4px solid #ff792b;
|
160 |
-
.wpra-feed-item {
|
161 |
-
padding: .75rem;
|
162 |
-
&__link {
|
163 |
-
padding-bottom: 4px;
|
164 |
-
}
|
165 |
-
}
|
166 |
-
}
|
167 |
-
|
168 |
-
.step-items {
|
169 |
-
$size: 35px;
|
170 |
-
|
171 |
-
display: flex;
|
172 |
-
position: relative;
|
173 |
-
|
174 |
-
flex-direction: column;
|
175 |
-
align-items: flex-end;
|
176 |
-
|
177 |
-
.step-progress {
|
178 |
-
position: absolute;
|
179 |
-
width: 3px;
|
180 |
-
height: 0;
|
181 |
-
background-color: $success-color;
|
182 |
-
left: $size / 2;
|
183 |
-
top: 0;
|
184 |
-
transition: height .3s ease;
|
185 |
-
z-index: -1;
|
186 |
-
&--1 {
|
187 |
-
height: 50%;
|
188 |
-
}
|
189 |
-
&--2 {
|
190 |
-
height: 100%;
|
191 |
-
}
|
192 |
-
|
193 |
-
@include breakpoint(tablet) {
|
194 |
-
display: none;
|
195 |
-
}
|
196 |
-
}
|
197 |
-
|
198 |
-
@include breakpoint(tablet) {
|
199 |
-
padding: .625rem;
|
200 |
-
flex-direction: row;
|
201 |
-
align-items: flex-start;
|
202 |
-
}
|
203 |
-
|
204 |
-
.step-item {
|
205 |
-
font-size: 16px;
|
206 |
-
width: 15rem;
|
207 |
-
margin-bottom: 2.25rem;
|
208 |
-
display: flex;
|
209 |
-
background-color: #f1f1f1;
|
210 |
-
|
211 |
-
&:last-child {
|
212 |
-
margin-bottom: 0;
|
213 |
-
}
|
214 |
-
|
215 |
-
@include breakpoint(tablet) {
|
216 |
-
flex-direction: column;
|
217 |
-
margin-bottom: 0;
|
218 |
-
align-items: center;
|
219 |
-
}
|
220 |
-
|
221 |
-
&_active {
|
222 |
-
.step-item__info {
|
223 |
-
opacity: 1;
|
224 |
-
}
|
225 |
-
.step-item__status {
|
226 |
-
opacity: 1;
|
227 |
-
}
|
228 |
-
opacity: 1;
|
229 |
-
@include breakpoint(tablet) {
|
230 |
-
flex-grow: 1;
|
231 |
-
}
|
232 |
-
}
|
233 |
-
&__title {
|
234 |
-
}
|
235 |
-
&__description {
|
236 |
-
//color: $dark-gray;
|
237 |
-
font-size: 14px;
|
238 |
-
}
|
239 |
-
|
240 |
-
&__info {
|
241 |
-
display: flex;
|
242 |
-
align-items: center;
|
243 |
-
padding-left: .75rem;
|
244 |
-
opacity: .5;
|
245 |
-
@include breakpoint(tablet) {
|
246 |
-
padding-left: 0;
|
247 |
-
padding-top: .3rem;
|
248 |
-
display: none;
|
249 |
-
}
|
250 |
-
}
|
251 |
-
|
252 |
-
&__status {
|
253 |
-
width: $size;
|
254 |
-
height: $size;
|
255 |
-
border-radius: 50%;
|
256 |
-
border: 2px dashed $medium-gray;
|
257 |
-
flex-shrink: 0;
|
258 |
-
opacity: .5;
|
259 |
-
|
260 |
-
text-align: center;
|
261 |
-
font-size: 1.25rem;
|
262 |
-
line-height: 2.375rem;
|
263 |
-
|
264 |
-
color: $success-color;
|
265 |
-
|
266 |
-
span {
|
267 |
-
display: block;
|
268 |
-
margin: 0 !important;
|
269 |
-
width: 100%;
|
270 |
-
line-height: 35px;
|
271 |
-
font-size: 26px;
|
272 |
-
}
|
273 |
-
}
|
274 |
-
|
275 |
-
&_completed {
|
276 |
-
opacity: 1;
|
277 |
-
.step-item {
|
278 |
-
&__status {
|
279 |
-
border-style: solid;
|
280 |
-
border-color: $success-color;
|
281 |
-
opacity: 1;
|
282 |
-
|
283 |
-
span {
|
284 |
-
position: relative;
|
285 |
-
}
|
286 |
-
}
|
287 |
-
&__info {
|
288 |
-
opacity: .5;
|
289 |
-
}
|
290 |
-
}
|
291 |
-
}
|
292 |
-
}
|
293 |
-
}
|
294 |
-
|
295 |
-
.wizard {
|
296 |
-
width: 100%;
|
297 |
-
margin-left: 1rem;
|
298 |
-
|
299 |
-
@include breakpoint(tablet) {
|
300 |
-
margin-left: 0;
|
301 |
-
}
|
302 |
-
|
303 |
-
ol {
|
304 |
-
margin-left: 1.5rem;
|
305 |
-
line-height: 1.5;
|
306 |
-
font-size: 13px;
|
307 |
-
ul {
|
308 |
-
margin-bottom: 1rem;
|
309 |
-
}
|
310 |
-
}
|
311 |
-
|
312 |
-
.form-group {
|
313 |
-
display: flex;
|
314 |
-
align-items: center;
|
315 |
-
@include breakpoint(tablet) {
|
316 |
-
display: block;
|
317 |
-
align-items: unset;
|
318 |
-
input {
|
319 |
-
margin-bottom: 8px;
|
320 |
-
}
|
321 |
-
}
|
322 |
-
input {
|
323 |
-
flex-shrink: 0;
|
324 |
-
}
|
325 |
-
.warning-icon {
|
326 |
-
padding-left: 4px;
|
327 |
-
color: #ee5a65;
|
328 |
-
}
|
329 |
-
a {
|
330 |
-
flex-shrink: 0;
|
331 |
-
margin-left: 6px;
|
332 |
-
}
|
333 |
-
}
|
334 |
-
|
335 |
-
.button-clear {
|
336 |
-
background-color: transparent;
|
337 |
-
border: none;
|
338 |
-
cursor: pointer;
|
339 |
-
height: 30px;
|
340 |
-
line-height: 28px;
|
341 |
-
padding: 0 12px 2px;
|
342 |
-
vertical-align: baseline;
|
343 |
-
|
344 |
-
opacity: .55;
|
345 |
-
&:hover {
|
346 |
-
opacity: .8;
|
347 |
-
}
|
348 |
-
}
|
349 |
-
|
350 |
-
.button {
|
351 |
-
vertical-align: baseline !important;
|
352 |
-
}
|
353 |
-
|
354 |
-
.pad {
|
355 |
-
display: flex;
|
356 |
-
&-item {
|
357 |
-
&--grow {
|
358 |
-
flex-grow: 1;
|
359 |
-
}
|
360 |
-
&--no-shrink {
|
361 |
-
flex-shrink: 0;
|
362 |
-
}
|
363 |
-
}
|
364 |
-
}
|
365 |
-
|
366 |
-
.wpra-success {
|
367 |
-
padding-right: 1rem;
|
368 |
-
font-size: 14px;
|
369 |
-
}
|
370 |
-
|
371 |
-
&_content {
|
372 |
-
padding: 1rem;
|
373 |
-
font-size: 14px;
|
374 |
-
max-width: $wizard-width;
|
375 |
-
min-height: 16rem;
|
376 |
-
padding-top: 12px;
|
377 |
-
|
378 |
-
@include breakpoint(tablet) {
|
379 |
-
padding: 0;
|
380 |
-
}
|
381 |
-
}
|
382 |
-
|
383 |
-
&-holder {
|
384 |
-
width: 100%;
|
385 |
-
position: relative;
|
386 |
-
display: flex;
|
387 |
-
//align-items: center;
|
388 |
-
//justify-content: center;
|
389 |
-
|
390 |
-
@include breakpoint(tablet) {
|
391 |
-
flex-direction: column;
|
392 |
-
}
|
393 |
-
|
394 |
-
.connect-steps {
|
395 |
-
flex-shrink: 0;
|
396 |
-
max-width: 450px;
|
397 |
-
padding: 1rem;
|
398 |
-
|
399 |
-
@include breakpoint(tablet) {
|
400 |
-
max-width: 100%;
|
401 |
-
flex-basis: auto;
|
402 |
-
padding: .5rem;
|
403 |
-
}
|
404 |
-
}
|
405 |
-
|
406 |
-
.wizard {
|
407 |
-
//background-color: #00aced;
|
408 |
-
|
409 |
-
flex-grow: 1;
|
410 |
-
}
|
411 |
-
}
|
412 |
-
|
413 |
-
&_text {
|
414 |
-
padding: 0 0 25px 0;
|
415 |
-
max-width: 480px;
|
416 |
-
font-size: 14px;
|
417 |
-
}
|
418 |
-
|
419 |
-
&_more {
|
420 |
-
user-select: none;
|
421 |
-
display: inline-block;
|
422 |
-
color: $medium-gray;
|
423 |
-
font-size: 12px;
|
424 |
-
margin-top: 20px;
|
425 |
-
|
426 |
-
&:hover {
|
427 |
-
cursor: pointer;
|
428 |
-
text-decoration: underline;
|
429 |
-
}
|
430 |
-
}
|
431 |
-
|
432 |
-
&_hello {
|
433 |
-
font-size: 18px;
|
434 |
-
margin: 15px 0 10px 0;
|
435 |
-
img {
|
436 |
-
height: 26px;
|
437 |
-
vertical-align: sub;
|
438 |
-
margin-right: 3px;
|
439 |
-
}
|
440 |
-
}
|
441 |
-
|
442 |
-
&_button {
|
443 |
-
min-width: 137px;
|
444 |
-
margin: 0 .3rem 1rem .3rem;
|
445 |
-
}
|
446 |
-
|
447 |
-
&_buttons {
|
448 |
-
margin: 0 -.5rem;
|
449 |
-
display: flex;
|
450 |
-
|
451 |
-
@include breakpoint(tablet) {
|
452 |
-
flex-direction: row;
|
453 |
-
flex-wrap: wrap;
|
454 |
-
}
|
455 |
-
}
|
456 |
-
&_network {
|
457 |
-
//flex-shrink: 1;
|
458 |
-
//width: 33%;
|
459 |
-
padding: 0 .5rem;
|
460 |
-
margin-bottom: .35rem;
|
461 |
-
//text-align: center;
|
462 |
-
|
463 |
-
.button {
|
464 |
-
min-width: 145px;
|
465 |
-
text-align: center;
|
466 |
-
i {
|
467 |
-
margin-left: 4px;
|
468 |
-
}
|
469 |
-
}
|
470 |
-
|
471 |
-
.button-transparent {
|
472 |
-
margin-bottom: 10px;
|
473 |
-
}
|
474 |
-
|
475 |
-
&-icon {
|
476 |
-
width: 50px;
|
477 |
-
height: 50px;
|
478 |
-
border-radius: 100%;
|
479 |
-
background-color: lighten($light-gray, 7);
|
480 |
-
margin: 0 auto .8rem auto;
|
481 |
-
i {
|
482 |
-
font-size: 22px;
|
483 |
-
line-height: 50px;
|
484 |
-
}
|
485 |
-
}
|
486 |
-
}
|
487 |
-
|
488 |
-
&_list {
|
489 |
-
padding: 10px 0;
|
490 |
-
display: flex;
|
491 |
-
flex-wrap: wrap;
|
492 |
-
margin: 0 -0.3125rem;
|
493 |
-
max-width: 49rem;
|
494 |
-
}
|
495 |
-
|
496 |
-
&_item {
|
497 |
-
padding: 5px;
|
498 |
-
margin: 5px;
|
499 |
-
border: 1px solid $borderColor;
|
500 |
-
display: flex;
|
501 |
-
|
502 |
-
width: 31%;
|
503 |
-
align-items: center;
|
504 |
-
|
505 |
-
@include breakpoint(tablet) {
|
506 |
-
width: 100%;
|
507 |
-
margin: 0;
|
508 |
-
margin-bottom: .625rem;
|
509 |
-
}
|
510 |
-
|
511 |
-
vertical-align: middle;
|
512 |
-
border-radius: $button-radius;
|
513 |
-
text-align: left;
|
514 |
-
|
515 |
-
.description {
|
516 |
-
font-size: 12px;
|
517 |
-
color: $dark-gray;
|
518 |
-
margin-top: 2px;
|
519 |
-
}
|
520 |
-
|
521 |
-
.account-item_picture {
|
522 |
-
float: none;
|
523 |
-
margin-right: 10px;
|
524 |
-
flex-shrink: 0;
|
525 |
-
}
|
526 |
-
}
|
527 |
-
|
528 |
-
/*
|
529 |
-
* This is form
|
530 |
-
*/
|
531 |
-
&_info {
|
532 |
-
max-width: 20rem;
|
533 |
-
text-align: left;
|
534 |
-
|
535 |
-
.form-group {
|
536 |
-
margin-bottom: 1rem;
|
537 |
-
}
|
538 |
-
}
|
539 |
-
|
540 |
-
&_label {
|
541 |
-
font-size: 1rem;
|
542 |
-
padding-top: .2rem;
|
543 |
-
padding-bottom: .75rem;
|
544 |
-
}
|
545 |
-
}
|
546 |
-
|
547 |
-
.wrpa-shortcode {
|
548 |
-
display: flex;
|
549 |
-
&-form, &-preview {
|
550 |
-
padding-bottom: 10px;
|
551 |
-
padding-right: 75px;
|
552 |
-
flex-basis: 50%;
|
553 |
-
.wrpa-shortcode-label {
|
554 |
-
font-size: 1rem;
|
555 |
-
padding-bottom: 12px;
|
556 |
-
line-height: 1.5;
|
557 |
-
}
|
558 |
-
.button.loading-button {
|
559 |
-
&::before {
|
560 |
-
box-shadow: inset 0 -4px 0 6px #797979 !important;
|
561 |
-
}
|
562 |
-
}
|
563 |
-
}
|
564 |
-
.wrpa-shortcode-form {
|
565 |
-
cursor: pointer;
|
566 |
-
.wrpa-shortcode-form__shortcode {
|
567 |
-
display: inline-block;
|
568 |
-
}
|
569 |
-
.wrpa-shortcode-form__button {
|
570 |
-
display: inline-block;
|
571 |
-
opacity: .65;
|
572 |
-
font-size: 11px;
|
573 |
-
font-style: italic;
|
574 |
-
padding-right: 3px;
|
575 |
-
}
|
576 |
-
}
|
577 |
-
}
|
578 |
-
|
579 |
-
.connect {
|
580 |
-
&_progress {
|
581 |
-
position: absolute;
|
582 |
-
left: calc(50% - 22px);
|
583 |
-
top: 30px;
|
584 |
-
|
585 |
-
@include clear;
|
586 |
-
|
587 |
-
&-point {
|
588 |
-
display: block;
|
589 |
-
float: left;
|
590 |
-
margin-left: 5px;
|
591 |
-
width: 8px;
|
592 |
-
height: 8px;
|
593 |
-
border-radius: 100%;
|
594 |
-
background-color: transparentize($primary-color, .7);
|
595 |
-
|
596 |
-
&__active {
|
597 |
-
border: 1px solid $primary-color;
|
598 |
-
}
|
599 |
-
|
600 |
-
&__done {
|
601 |
-
background-color: $primary-color;
|
602 |
-
}
|
603 |
-
}
|
604 |
-
}
|
605 |
-
}
|
606 |
-
|
607 |
-
.connect-actions {
|
608 |
-
width: 100%;
|
609 |
-
max-width: $wizard-width;
|
610 |
-
border-top: 2px solid $light-gray;
|
611 |
-
padding: 1rem 0;
|
612 |
-
|
613 |
-
.button {
|
614 |
-
margin: 0;
|
615 |
-
}
|
616 |
-
|
617 |
-
@include breakpoint(tablet) {
|
618 |
-
padding-bottom: 2rem;
|
619 |
-
}
|
620 |
-
|
621 |
-
.fa-animated {
|
622 |
-
font-size: 2rem;
|
623 |
-
color: transparentize($primary-color, .35);
|
624 |
-
vertical-align: middle;
|
625 |
-
margin-right: 5px;
|
626 |
-
}
|
627 |
-
}
|
628 |
-
|
629 |
-
@keyframes moveRightLeftLoop {
|
630 |
-
0% {
|
631 |
-
transform: translateX(-10px);
|
632 |
-
}
|
633 |
-
|
634 |
-
50% {
|
635 |
-
transform: translateX(0);
|
636 |
-
}
|
637 |
-
|
638 |
-
100% {
|
639 |
-
transform: translateX(-10px);
|
640 |
-
}
|
641 |
-
}
|
642 |
-
|
643 |
-
.moveRightLeftLoop {
|
644 |
-
animation-iteration-count: infinite;
|
645 |
-
animation-name: moveRightLeftLoop;
|
646 |
-
animation-duration: 1000ms;
|
647 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/mixins.scss
DELETED
@@ -1,32 +0,0 @@
|
|
1 |
-
// grid
|
2 |
-
$breakpoint-small: 782px; // 540px
|
3 |
-
$breakpoint-med: 60em; // 720px
|
4 |
-
$breakpoint-large: 68em; // 960px
|
5 |
-
|
6 |
-
@mixin breakpoint($point) {
|
7 |
-
@if $point == desktop {
|
8 |
-
@media (min-width: $breakpoint-large) { @content ; }
|
9 |
-
}
|
10 |
-
@else if $point == mobile {
|
11 |
-
@media (max-width: $breakpoint-small) { @content ; }
|
12 |
-
}
|
13 |
-
@else if $point == not-mobile {
|
14 |
-
@media (min-width: $breakpoint-small) { @content ; }
|
15 |
-
}
|
16 |
-
}
|
17 |
-
|
18 |
-
.mobile-collapsed {
|
19 |
-
display: inherit;
|
20 |
-
}
|
21 |
-
.mobile-only {
|
22 |
-
display: none !important;
|
23 |
-
}
|
24 |
-
|
25 |
-
@include breakpoint(mobile) {
|
26 |
-
.mobile-only {
|
27 |
-
display: inherit !important;
|
28 |
-
}
|
29 |
-
.mobile-collapsed {
|
30 |
-
display: none !important;
|
31 |
-
}
|
32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/pagination/index.scss
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
.wpra-loading {
|
2 |
-
animation: pulse 1s infinite ease-in-out;
|
3 |
-
pointer-events: none;
|
4 |
-
}
|
5 |
-
|
6 |
-
@keyframes pulse {
|
7 |
-
0% { opacity: .25; }
|
8 |
-
50% { opacity: .6; }
|
9 |
-
100% { opacity: .25; }
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/plugins/form.scss
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
.form {
|
2 |
-
&-check {
|
3 |
-
input {
|
4 |
-
display: inline-block !important;
|
5 |
-
width: auto !important;
|
6 |
-
margin: 0 4px 0 0;
|
7 |
-
}
|
8 |
-
label {
|
9 |
-
display: inline-block !important;
|
10 |
-
}
|
11 |
-
padding: 4px 0;
|
12 |
-
}
|
13 |
-
&-group {
|
14 |
-
padding-bottom: 8px;
|
15 |
-
label {
|
16 |
-
display: block;
|
17 |
-
}
|
18 |
-
& > label {
|
19 |
-
margin-bottom: 2px;
|
20 |
-
}
|
21 |
-
input, textarea {
|
22 |
-
display: block;
|
23 |
-
width: 100%;
|
24 |
-
}
|
25 |
-
&:last-child {
|
26 |
-
padding-bottom: 0;
|
27 |
-
}
|
28 |
-
p {
|
29 |
-
&:first-child {
|
30 |
-
margin-top: 0;
|
31 |
-
}
|
32 |
-
&:last-child {
|
33 |
-
margin-bottom: 0;
|
34 |
-
}
|
35 |
-
}
|
36 |
-
.error {
|
37 |
-
margin: 0 !important;
|
38 |
-
}
|
39 |
-
}
|
40 |
-
}
|
41 |
-
|
42 |
-
.wpra-plugin-disable-poll {
|
43 |
-
&__logo {
|
44 |
-
img {
|
45 |
-
max-height: 40px;
|
46 |
-
}
|
47 |
-
}
|
48 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/plugins/index.scss
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
$white: #fff;
|
2 |
-
$radius: 4px;
|
3 |
-
|
4 |
-
@mixin breakpoint($point) {
|
5 |
-
@if $point == desktop {
|
6 |
-
@media (min-width: 70em) { @content ; }
|
7 |
-
}
|
8 |
-
@else if $point == laptop {
|
9 |
-
@media (min-width: 64em) { @content ; }
|
10 |
-
}
|
11 |
-
@else if $point == tablet {
|
12 |
-
@media (max-width: 50em) { @content ; }
|
13 |
-
}
|
14 |
-
@else if $point == phablet {
|
15 |
-
@media (min-width: 37.5em) { @content ; }
|
16 |
-
}
|
17 |
-
@else if $point == mobileonly {
|
18 |
-
@media (max-width: 37.5em) { @content ; }
|
19 |
-
|
20 |
-
}
|
21 |
-
}
|
22 |
-
|
23 |
-
@import "./../intro/loading";
|
24 |
-
@import "modal";
|
25 |
-
@import "form";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/plugins/modal.scss
DELETED
@@ -1,173 +0,0 @@
|
|
1 |
-
.modal {
|
2 |
-
&-opened {
|
3 |
-
overflow: hidden;
|
4 |
-
}
|
5 |
-
|
6 |
-
position: fixed;
|
7 |
-
background-color: rgba(0, 0, 0, 0.65);
|
8 |
-
width: 100%;
|
9 |
-
height: 100%;
|
10 |
-
left: 0;
|
11 |
-
top: 0;
|
12 |
-
z-index: 9999;
|
13 |
-
overflow-y: auto;
|
14 |
-
|
15 |
-
@include breakpoint(mobile) {
|
16 |
-
z-index: 100000;
|
17 |
-
}
|
18 |
-
|
19 |
-
&__body {
|
20 |
-
width: 100%;
|
21 |
-
max-width: 30rem;
|
22 |
-
margin: 5rem auto;
|
23 |
-
|
24 |
-
background-color: $white;
|
25 |
-
border-radius: $radius;
|
26 |
-
|
27 |
-
&--no-content-padding {
|
28 |
-
.modal__content {
|
29 |
-
padding: 0;
|
30 |
-
}
|
31 |
-
}
|
32 |
-
|
33 |
-
&--wide {
|
34 |
-
max-width: 50rem;
|
35 |
-
}
|
36 |
-
|
37 |
-
@include breakpoint(mobile) {
|
38 |
-
min-height: 100vh;
|
39 |
-
margin: 0;
|
40 |
-
border-radius: 0;
|
41 |
-
}
|
42 |
-
}
|
43 |
-
|
44 |
-
&__header {
|
45 |
-
padding: .5rem 1rem;
|
46 |
-
font-size: 20px;
|
47 |
-
font-weight: bold;
|
48 |
-
line-height: 1.5;
|
49 |
-
border-bottom: 1px solid #eee;
|
50 |
-
|
51 |
-
&.invisible-header {
|
52 |
-
border: none;
|
53 |
-
font-size: unset;
|
54 |
-
font-weight: unset;
|
55 |
-
padding-top: 12px !important;
|
56 |
-
h3 {
|
57 |
-
margin-top: 0;
|
58 |
-
line-height: 1.5;
|
59 |
-
margin-bottom: 0;
|
60 |
-
}
|
61 |
-
p {
|
62 |
-
margin-top: .25rem;
|
63 |
-
font-size: 14px;
|
64 |
-
opacity: .6;
|
65 |
-
margin-bottom: 0;
|
66 |
-
}
|
67 |
-
& + .modal__content {
|
68 |
-
padding-top: 6px !important;
|
69 |
-
}
|
70 |
-
}
|
71 |
-
|
72 |
-
@include breakpoint(mobile) {
|
73 |
-
position: relative;
|
74 |
-
|
75 |
-
.modal--right {
|
76 |
-
position: absolute;
|
77 |
-
top: 0;
|
78 |
-
padding: 6px 1rem 0 1rem;
|
79 |
-
right: 0;
|
80 |
-
background-color: white;
|
81 |
-
}
|
82 |
-
}
|
83 |
-
|
84 |
-
&-buttons {
|
85 |
-
font-weight: normal;
|
86 |
-
}
|
87 |
-
}
|
88 |
-
|
89 |
-
&__close {
|
90 |
-
opacity: .5;
|
91 |
-
cursor: pointer;
|
92 |
-
&:hover {
|
93 |
-
opacity: .8;
|
94 |
-
}
|
95 |
-
}
|
96 |
-
|
97 |
-
&--right {
|
98 |
-
float: right;
|
99 |
-
}
|
100 |
-
|
101 |
-
&__content {
|
102 |
-
padding: 1rem;
|
103 |
-
}
|
104 |
-
|
105 |
-
&__footer {
|
106 |
-
padding: 1rem;
|
107 |
-
border-top: 1px solid #eee;
|
108 |
-
text-align: right;
|
109 |
-
|
110 |
-
.button {
|
111 |
-
display: inline-block !important;
|
112 |
-
margin-left: 4px !important;
|
113 |
-
}
|
114 |
-
.footer-confirm {
|
115 |
-
margin: 0;
|
116 |
-
padding: 0;
|
117 |
-
display: flex;
|
118 |
-
align-items: center;
|
119 |
-
|
120 |
-
@include breakpoint(mobile) {
|
121 |
-
display: block;
|
122 |
-
&__message {
|
123 |
-
padding-right: 0;
|
124 |
-
padding-bottom: 10px;
|
125 |
-
}
|
126 |
-
}
|
127 |
-
|
128 |
-
&__buttons {
|
129 |
-
flex-shrink: 0;
|
130 |
-
|
131 |
-
&--left {
|
132 |
-
margin-right: auto;
|
133 |
-
flex-grow: 1;
|
134 |
-
text-align: left;
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
&__message {
|
139 |
-
margin-right: auto;
|
140 |
-
&.__right {
|
141 |
-
flex-grow: 1;
|
142 |
-
padding-right: 10px;
|
143 |
-
text-align: right;
|
144 |
-
}
|
145 |
-
}
|
146 |
-
}
|
147 |
-
}
|
148 |
-
}
|
149 |
-
|
150 |
-
.modal-transition {
|
151 |
-
&-enter, &-leave-to {
|
152 |
-
opacity: 0;
|
153 |
-
|
154 |
-
.modal__body {
|
155 |
-
opacity: 0;
|
156 |
-
transform: scaleX(.8) scaleY(.7);
|
157 |
-
}
|
158 |
-
}
|
159 |
-
|
160 |
-
&-enter-active, &-leave-active {
|
161 |
-
transition: opacity 0.25s ease-out;
|
162 |
-
|
163 |
-
.modal__body {
|
164 |
-
transition: all .25s cubic-bezier(.665,1.65,0,.845);
|
165 |
-
}
|
166 |
-
}
|
167 |
-
}
|
168 |
-
|
169 |
-
.button-clear {
|
170 |
-
border: none !important;
|
171 |
-
background: transparent !important;
|
172 |
-
box-shadow: none !important;
|
173 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/templates/bottom-panel.scss
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
.wpra-bottom-panel {
|
2 |
-
position: sticky;
|
3 |
-
bottom: 0;
|
4 |
-
z-index: 9;
|
5 |
-
background-color: #fffce9;
|
6 |
-
padding: 1rem;
|
7 |
-
border: 1px solid #e5e5e5;
|
8 |
-
box-shadow: 0 1px 1px rgba(0,0,0,0.04);
|
9 |
-
|
10 |
-
&__title {
|
11 |
-
font-size: 1rem;
|
12 |
-
font-weight: 500;
|
13 |
-
padding-bottom: 8px;
|
14 |
-
}
|
15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/templates/grid.scss
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
.flex {
|
2 |
-
&-row {
|
3 |
-
display: flex;
|
4 |
-
}
|
5 |
-
&-col {
|
6 |
-
box-sizing: border-box;
|
7 |
-
padding: 0 10px;
|
8 |
-
flex: 1 1 0;
|
9 |
-
|
10 |
-
&:first-child {
|
11 |
-
padding-left: 0;
|
12 |
-
}
|
13 |
-
|
14 |
-
&:last-child {
|
15 |
-
padding-right: 0;
|
16 |
-
}
|
17 |
-
}
|
18 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/templates/index.scss
DELETED
@@ -1,216 +0,0 @@
|
|
1 |
-
@import "./../mixins";
|
2 |
-
@import "bottom-panel";
|
3 |
-
@import "loading";
|
4 |
-
@import "notifications";
|
5 |
-
@import "grid";
|
6 |
-
|
7 |
-
.wpra-postbox {
|
8 |
-
.hndle {
|
9 |
-
cursor: unset !important;
|
10 |
-
}
|
11 |
-
}
|
12 |
-
|
13 |
-
.wpra-shortcode-copy {
|
14 |
-
font-size: 13px;
|
15 |
-
background-color: #fff;
|
16 |
-
margin-left: auto;
|
17 |
-
padding: 9px 14px;
|
18 |
-
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
|
19 |
-
|
20 |
-
border-left: 4px solid #0085ba;
|
21 |
-
|
22 |
-
display: flex;
|
23 |
-
align-items: center;
|
24 |
-
|
25 |
-
@include breakpoint (mobile) {
|
26 |
-
display: block;
|
27 |
-
}
|
28 |
-
|
29 |
-
&__icon {
|
30 |
-
padding-left: 16px;
|
31 |
-
|
32 |
-
@include breakpoint (mobile) {
|
33 |
-
padding-left: 0;
|
34 |
-
margin-top: 1rem;
|
35 |
-
}
|
36 |
-
}
|
37 |
-
}
|
38 |
-
|
39 |
-
.page-title {
|
40 |
-
display: flex;
|
41 |
-
align-items: center;
|
42 |
-
padding: 9px 0 4px 0;
|
43 |
-
|
44 |
-
@include breakpoint (mobile) {
|
45 |
-
display: block;
|
46 |
-
}
|
47 |
-
|
48 |
-
a {
|
49 |
-
&:focus {
|
50 |
-
text-decoration: none;
|
51 |
-
}
|
52 |
-
}
|
53 |
-
|
54 |
-
h1 {
|
55 |
-
margin-left: 6px;
|
56 |
-
padding: 0;
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
.back-button {
|
61 |
-
opacity: .75;
|
62 |
-
text-decoration: none;
|
63 |
-
font-size: 20px;
|
64 |
-
display: flex;
|
65 |
-
align-items: center;
|
66 |
-
padding-right: 10px;
|
67 |
-
margin-right: 4px;
|
68 |
-
border-right: 1px solid #b4b4b4;
|
69 |
-
|
70 |
-
@include breakpoint (mobile) {
|
71 |
-
border-right: none;
|
72 |
-
margin-bottom: .5rem;
|
73 |
-
}
|
74 |
-
|
75 |
-
.dashicons {
|
76 |
-
margin-right: 8px;
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
.tippy-tooltip.light-theme {
|
81 |
-
font-size: 13px !important;
|
82 |
-
font-family: unset !important;
|
83 |
-
text-align: left !important;
|
84 |
-
|
85 |
-
hr {
|
86 |
-
border: none;
|
87 |
-
height: 1px;
|
88 |
-
background-color: #efefef;
|
89 |
-
}
|
90 |
-
}
|
91 |
-
|
92 |
-
.form-input {
|
93 |
-
display: flex;
|
94 |
-
margin: .75rem 0;
|
95 |
-
&--disabled {
|
96 |
-
pointer-events: none;
|
97 |
-
.form-input__label {
|
98 |
-
*:not(.disable-ignored) {
|
99 |
-
opacity: .5;
|
100 |
-
user-select: none;
|
101 |
-
}
|
102 |
-
}
|
103 |
-
}
|
104 |
-
.disable-ignored {
|
105 |
-
opacity: 1;
|
106 |
-
}
|
107 |
-
&--vertical {
|
108 |
-
flex-direction: column;
|
109 |
-
.form-input__label {
|
110 |
-
padding-right: 0;
|
111 |
-
padding-bottom: 4px;
|
112 |
-
flex-basis: 100%;
|
113 |
-
}
|
114 |
-
}
|
115 |
-
|
116 |
-
@include breakpoint(mobile) {
|
117 |
-
flex-direction: column;
|
118 |
-
.form-input__label {
|
119 |
-
padding-right: 0;
|
120 |
-
padding-bottom: 4px;
|
121 |
-
flex-basis: 100%;
|
122 |
-
}
|
123 |
-
}
|
124 |
-
|
125 |
-
&:last-child {
|
126 |
-
margin-bottom: 0;
|
127 |
-
}
|
128 |
-
&__tip {
|
129 |
-
cursor: pointer;
|
130 |
-
display: inline-block;
|
131 |
-
margin-left: 4px;
|
132 |
-
opacity: .25;
|
133 |
-
vertical-align: middle;
|
134 |
-
&:hover {
|
135 |
-
opacity: .85;
|
136 |
-
}
|
137 |
-
.dashicons {
|
138 |
-
font-size: 18px;
|
139 |
-
}
|
140 |
-
}
|
141 |
-
&__label {
|
142 |
-
padding-right: 12px;
|
143 |
-
flex-basis: 260px;
|
144 |
-
&-description {
|
145 |
-
padding-top: 2px;
|
146 |
-
padding-right: 10px;
|
147 |
-
line-height: 1.65;
|
148 |
-
opacity: .6;
|
149 |
-
font-size: 12px;
|
150 |
-
|
151 |
-
a {
|
152 |
-
pointer-events: auto !important;
|
153 |
-
}
|
154 |
-
}
|
155 |
-
}
|
156 |
-
&__field {
|
157 |
-
flex-grow: 1;
|
158 |
-
input:not([type="checkbox"]), textarea, select {
|
159 |
-
width: 100%;
|
160 |
-
max-width: 325px;
|
161 |
-
}
|
162 |
-
}
|
163 |
-
}
|
164 |
-
|
165 |
-
.built-in {
|
166 |
-
background: #f1f1f1;
|
167 |
-
|
168 |
-
[type="checkbox"] {
|
169 |
-
display: none;
|
170 |
-
}
|
171 |
-
}
|
172 |
-
|
173 |
-
.wpra-preview-link {
|
174 |
-
vertical-align: middle;
|
175 |
-
|
176 |
-
span.dashicons {
|
177 |
-
opacity: .75;
|
178 |
-
font-size: 16px;
|
179 |
-
vertical-align: middle;
|
180 |
-
}
|
181 |
-
}
|
182 |
-
|
183 |
-
.wpra-no-cb {
|
184 |
-
.column-cb {
|
185 |
-
input[type="checkbox"] {
|
186 |
-
display: none;
|
187 |
-
}
|
188 |
-
}
|
189 |
-
}
|
190 |
-
|
191 |
-
.column.name {
|
192 |
-
small {
|
193 |
-
@include breakpoint (mobile) {
|
194 |
-
display: block;
|
195 |
-
}
|
196 |
-
}
|
197 |
-
}
|
198 |
-
|
199 |
-
.inside {
|
200 |
-
.wpra-preview-link {
|
201 |
-
@include breakpoint (mobile) {
|
202 |
-
float: none;
|
203 |
-
}
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
.wpra-postbox-container {
|
208 |
-
@include breakpoint (mobile) {
|
209 |
-
display: flex;
|
210 |
-
flex-direction: column;
|
211 |
-
|
212 |
-
.wpra-postbox-last {
|
213 |
-
order: 100;
|
214 |
-
}
|
215 |
-
}
|
216 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/templates/loading.scss
DELETED
@@ -1,220 +0,0 @@
|
|
1 |
-
a.disabled {
|
2 |
-
color: #9c9c9c;
|
3 |
-
pointer-events: none;
|
4 |
-
}
|
5 |
-
|
6 |
-
[v-cloak] {
|
7 |
-
.vcloak {
|
8 |
-
&--visible {
|
9 |
-
display: block;
|
10 |
-
}
|
11 |
-
&--hidden {
|
12 |
-
display: none;
|
13 |
-
}
|
14 |
-
}
|
15 |
-
}
|
16 |
-
.vcloak {
|
17 |
-
&--visible {
|
18 |
-
min-height: 60px;
|
19 |
-
display: none;
|
20 |
-
}
|
21 |
-
}
|
22 |
-
|
23 |
-
.loading-container {
|
24 |
-
min-height: 5rem;
|
25 |
-
position: relative;
|
26 |
-
&:before {
|
27 |
-
display: block;
|
28 |
-
content: '';
|
29 |
-
position: absolute;
|
30 |
-
left: calc(50% - 20px);
|
31 |
-
top: calc(50% - 20px);
|
32 |
-
box-sizing: border-box;
|
33 |
-
height: 40px;
|
34 |
-
width: 40px;
|
35 |
-
border: 0px solid #d0d0d0;
|
36 |
-
border-radius: 50%;
|
37 |
-
box-shadow: 0 -12px 0 16px #d0d0d0 inset;
|
38 |
-
animation: rotate 1s infinite linear;
|
39 |
-
z-index: 3;
|
40 |
-
}
|
41 |
-
&:after {
|
42 |
-
display: block;
|
43 |
-
content: '';
|
44 |
-
position: absolute;
|
45 |
-
z-index: 2;
|
46 |
-
background-color: rgba(241, 241, 241, 0.5);
|
47 |
-
width: 100%;
|
48 |
-
height: 100%;
|
49 |
-
left: 0;
|
50 |
-
top: 0;
|
51 |
-
}
|
52 |
-
&--white {
|
53 |
-
&:after {
|
54 |
-
background-color: white;
|
55 |
-
}
|
56 |
-
}
|
57 |
-
}
|
58 |
-
|
59 |
-
|
60 |
-
.loading-button {
|
61 |
-
pointer-events: none;
|
62 |
-
position: relative;
|
63 |
-
&:before {
|
64 |
-
display: block;
|
65 |
-
content: '';
|
66 |
-
position: absolute;
|
67 |
-
left: calc(50% - 8px);
|
68 |
-
top: calc(50% - 8px);
|
69 |
-
box-sizing: border-box;
|
70 |
-
height: 16px;
|
71 |
-
width: 16px;
|
72 |
-
border: 0px solid #fff;
|
73 |
-
border-radius: 50%;
|
74 |
-
box-shadow: 0 -4px 0 6px #fff inset;
|
75 |
-
animation: rotate 1s infinite linear;
|
76 |
-
z-index: 3;
|
77 |
-
}
|
78 |
-
&:after {
|
79 |
-
display: block;
|
80 |
-
content: '';
|
81 |
-
position: absolute;
|
82 |
-
z-index: 2;
|
83 |
-
background-color: inherit;
|
84 |
-
width: 100%;
|
85 |
-
height: 100%;
|
86 |
-
left: 0;
|
87 |
-
top: 0;
|
88 |
-
}
|
89 |
-
}
|
90 |
-
|
91 |
-
.button-default {
|
92 |
-
&.loading-button:before {
|
93 |
-
box-shadow: inset 0 -4px 0 6px #6f6f6f;
|
94 |
-
}
|
95 |
-
}
|
96 |
-
|
97 |
-
.loading-inline {
|
98 |
-
display: inline-block;
|
99 |
-
pointer-events: none;
|
100 |
-
position: relative;
|
101 |
-
&:before {
|
102 |
-
display: block;
|
103 |
-
content: '';
|
104 |
-
position: absolute;
|
105 |
-
left: calc(50% + 1px);
|
106 |
-
top: calc(50% - 11px);
|
107 |
-
box-sizing: border-box;
|
108 |
-
height: 14px;
|
109 |
-
width: 14px;
|
110 |
-
border: 0px solid #d0d0d0;
|
111 |
-
border-radius: 50%;
|
112 |
-
box-shadow: 0 -3px 0 5px #d0d0d0 inset;
|
113 |
-
animation: rotate 1s infinite linear;
|
114 |
-
z-index: 3;
|
115 |
-
}
|
116 |
-
&:after {
|
117 |
-
display: block;
|
118 |
-
content: '';
|
119 |
-
position: absolute;
|
120 |
-
z-index: 2;
|
121 |
-
background-color: inherit;
|
122 |
-
width: 100%;
|
123 |
-
height: 100%;
|
124 |
-
left: 0;
|
125 |
-
top: 0;
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
|
130 |
-
@keyframes rotate {
|
131 |
-
0% {
|
132 |
-
transform: rotate(0deg);
|
133 |
-
}
|
134 |
-
100% {
|
135 |
-
transform: rotate(360deg);
|
136 |
-
}
|
137 |
-
}
|
138 |
-
|
139 |
-
.table-loading {
|
140 |
-
position: relative;
|
141 |
-
}
|
142 |
-
.table-loading .table-loader-wrap {
|
143 |
-
position: absolute;
|
144 |
-
width: 100%;
|
145 |
-
height: 100%;
|
146 |
-
z-index: 9;
|
147 |
-
}
|
148 |
-
.table-loading .table-loader-wrap .table-loader-center {
|
149 |
-
position: absolute;
|
150 |
-
top: 50%;
|
151 |
-
transform: translateY(-50%);
|
152 |
-
width: 100%;
|
153 |
-
}
|
154 |
-
.table-loading .wp-list-table,
|
155 |
-
.table-loading .tablenav {
|
156 |
-
opacity: 0.4;
|
157 |
-
}
|
158 |
-
.table-loader {
|
159 |
-
font-size: 10px;
|
160 |
-
margin: 50px auto;
|
161 |
-
text-indent: -9999em;
|
162 |
-
width: 11em;
|
163 |
-
height: 11em;
|
164 |
-
border-radius: 50%;
|
165 |
-
background: #ffffff;
|
166 |
-
background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
167 |
-
background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
168 |
-
background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
169 |
-
background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
170 |
-
background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
171 |
-
position: relative;
|
172 |
-
-webkit-animation: tableLoading 1s infinite linear;
|
173 |
-
animation: tableLoading 1s infinite linear;
|
174 |
-
-webkit-transform: translateZ(0);
|
175 |
-
-ms-transform: translateZ(0);
|
176 |
-
transform: translateZ(0);
|
177 |
-
}
|
178 |
-
.table-loader:before {
|
179 |
-
width: 50%;
|
180 |
-
height: 50%;
|
181 |
-
background: #ffffff;
|
182 |
-
border-radius: 100% 0 0 0;
|
183 |
-
position: absolute;
|
184 |
-
top: 0;
|
185 |
-
left: 0;
|
186 |
-
content: '';
|
187 |
-
}
|
188 |
-
.table-loader:after {
|
189 |
-
background: #f4f4f4;
|
190 |
-
width: 75%;
|
191 |
-
height: 75%;
|
192 |
-
border-radius: 50%;
|
193 |
-
content: '';
|
194 |
-
margin: auto;
|
195 |
-
position: absolute;
|
196 |
-
top: 0;
|
197 |
-
left: 0;
|
198 |
-
bottom: 0;
|
199 |
-
right: 0;
|
200 |
-
}
|
201 |
-
@-webkit-keyframes tableLoading {
|
202 |
-
0% {
|
203 |
-
-webkit-transform: rotate(0deg);
|
204 |
-
transform: rotate(0deg);
|
205 |
-
}
|
206 |
-
100% {
|
207 |
-
-webkit-transform: rotate(360deg);
|
208 |
-
transform: rotate(360deg);
|
209 |
-
}
|
210 |
-
}
|
211 |
-
@keyframes tableLoading {
|
212 |
-
0% {
|
213 |
-
-webkit-transform: rotate(0deg);
|
214 |
-
transform: rotate(0deg);
|
215 |
-
}
|
216 |
-
100% {
|
217 |
-
-webkit-transform: rotate(360deg);
|
218 |
-
transform: rotate(360deg);
|
219 |
-
}
|
220 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/templates/notifications.scss
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
.toasted-container.top-center {
|
2 |
-
top: 44px !important;
|
3 |
-
}
|
4 |
-
|
5 |
-
.toasted {
|
6 |
-
background: #23282d !important;
|
7 |
-
color: #e5e5e5 !important;
|
8 |
-
font-size: inherit !important;
|
9 |
-
font-weight: inherit !important;
|
10 |
-
|
11 |
-
justify-content: start !important;
|
12 |
-
border-left: none !important;
|
13 |
-
|
14 |
-
&.success {}
|
15 |
-
|
16 |
-
&.error {
|
17 |
-
.dashicons {
|
18 |
-
color: #ff7781;
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
.dashicons {
|
23 |
-
margin-right: 12px;
|
24 |
-
margin-left: -8px;
|
25 |
-
display: inline-block;
|
26 |
-
opacity: .65;
|
27 |
-
}
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/src/update/index.scss
DELETED
@@ -1,149 +0,0 @@
|
|
1 |
-
@import "./../mixins";
|
2 |
-
|
3 |
-
.wrap--wpra-update {
|
4 |
-
padding-top: 1rem;
|
5 |
-
|
6 |
-
@include breakpoint(not-mobile) {
|
7 |
-
width: 100%;
|
8 |
-
max-width: 1400px;
|
9 |
-
margin: 0 auto;
|
10 |
-
padding-right: 20px;
|
11 |
-
box-sizing: border-box;
|
12 |
-
}
|
13 |
-
}
|
14 |
-
|
15 |
-
.wpra-text-center {
|
16 |
-
text-align: center;
|
17 |
-
}
|
18 |
-
|
19 |
-
.wpra-updates ul {
|
20 |
-
list-style: disc;
|
21 |
-
padding: 0 1.25rem;
|
22 |
-
}
|
23 |
-
|
24 |
-
.wpra-inline-form {
|
25 |
-
display: flex;
|
26 |
-
align-items: baseline;
|
27 |
-
|
28 |
-
button {
|
29 |
-
margin-right: 12px !important;
|
30 |
-
}
|
31 |
-
|
32 |
-
small {
|
33 |
-
font-size: 12px;
|
34 |
-
opacity: .75;
|
35 |
-
}
|
36 |
-
}
|
37 |
-
|
38 |
-
|
39 |
-
.wpra-update-head__title {
|
40 |
-
font-size: 24px;
|
41 |
-
font-weight: 500;
|
42 |
-
padding: 1.5rem 0 1.5rem;
|
43 |
-
line-height: 1.4;
|
44 |
-
}
|
45 |
-
|
46 |
-
.wpra-update__logo img {
|
47 |
-
width: 56px;
|
48 |
-
}
|
49 |
-
|
50 |
-
.button-icon span {
|
51 |
-
vertical-align: baseline;
|
52 |
-
margin-right: -7px;
|
53 |
-
opacity: .6;
|
54 |
-
font-size: 16px;
|
55 |
-
top: 4px;
|
56 |
-
position: relative;
|
57 |
-
}
|
58 |
-
|
59 |
-
.wpra-links {
|
60 |
-
padding-top: .5rem;
|
61 |
-
}
|
62 |
-
|
63 |
-
.wpra-update-head__link {
|
64 |
-
font-size: 1rem;
|
65 |
-
padding-bottom: 1.5rem;
|
66 |
-
line-height: 1.5;
|
67 |
-
}
|
68 |
-
|
69 |
-
.wpra-update-feature {
|
70 |
-
display: flex;
|
71 |
-
padding: 0 18px 12px !important;
|
72 |
-
|
73 |
-
@include breakpoint(mobile) {
|
74 |
-
flex-direction: column-reverse;
|
75 |
-
}
|
76 |
-
}
|
77 |
-
|
78 |
-
.wpra-update-feature__text {
|
79 |
-
@include breakpoint(not-mobile) {
|
80 |
-
padding-right: 12px;
|
81 |
-
}
|
82 |
-
|
83 |
-
h3 {
|
84 |
-
margin-top: 8px;
|
85 |
-
@include breakpoint(mobile) {
|
86 |
-
margin-top: 16px;
|
87 |
-
}
|
88 |
-
}
|
89 |
-
|
90 |
-
p {
|
91 |
-
font-size: 14px;
|
92 |
-
}
|
93 |
-
}
|
94 |
-
|
95 |
-
.wpra-update-feature__image {
|
96 |
-
flex-shrink: 0;
|
97 |
-
width: 30rem;
|
98 |
-
overflow: hidden;
|
99 |
-
min-height: 336px;
|
100 |
-
position: relative;
|
101 |
-
margin: -11px -18px -23px 0;
|
102 |
-
cursor: pointer;
|
103 |
-
transition-duration: 0.5s;
|
104 |
-
|
105 |
-
&:hover {
|
106 |
-
transition-duration: 0.2s;
|
107 |
-
background-color: #111;
|
108 |
-
|
109 |
-
img {
|
110 |
-
opacity: 0.95;
|
111 |
-
|
112 |
-
}
|
113 |
-
|
114 |
-
&::before {
|
115 |
-
content: "\f177";
|
116 |
-
display: block;
|
117 |
-
position: absolute;
|
118 |
-
top: calc(50% - 45px);
|
119 |
-
width: 100%;
|
120 |
-
height: 90px;
|
121 |
-
font-size: 5em;
|
122 |
-
font-family: dashicons;
|
123 |
-
text-align: center;
|
124 |
-
z-index: 100;
|
125 |
-
opacity: 0.5;
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
@include breakpoint(mobile) {
|
130 |
-
flex-shrink: unset;
|
131 |
-
width: unset;
|
132 |
-
min-height: unset;
|
133 |
-
|
134 |
-
max-height: 15rem;
|
135 |
-
margin: -11px -18px 0px;
|
136 |
-
}
|
137 |
-
|
138 |
-
img {
|
139 |
-
max-height: 29rem;
|
140 |
-
position: absolute;
|
141 |
-
|
142 |
-
@include breakpoint(mobile) {
|
143 |
-
max-height: unset;
|
144 |
-
position: unset;
|
145 |
-
|
146 |
-
max-width: 100%;
|
147 |
-
}
|
148 |
-
}
|
149 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/Aventura/Wprss/Core/Model/AssetsAbstract.php
CHANGED
@@ -482,7 +482,7 @@ abstract class AssetsAbstract extends Core\Plugin\ComponentAbstract implements A
|
|
482 |
$prefix = $this->_getHandlePrefix();
|
483 |
return is_null($handle)
|
484 |
? $prefix
|
485 |
-
: static::stringHadPrefix($handle) ? $handle : "{$prefix}{$handle}";
|
486 |
}
|
487 |
|
488 |
/**
|
@@ -607,4 +607,4 @@ abstract class AssetsAbstract extends Core\Plugin\ComponentAbstract implements A
|
|
607 |
{
|
608 |
return $this;
|
609 |
}
|
610 |
-
}
|
482 |
$prefix = $this->_getHandlePrefix();
|
483 |
return is_null($handle)
|
484 |
? $prefix
|
485 |
+
: (static::stringHadPrefix($handle) ? $handle : "{$prefix}{$handle}");
|
486 |
}
|
487 |
|
488 |
/**
|
607 |
{
|
608 |
return $this;
|
609 |
}
|
610 |
+
}
|
includes/admin-debugging.php
DELETED
@@ -1,341 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use Interop\Container\Exception\NotFoundException as ServiceNotFoundException;
|
4 |
-
use Aventura\Wprss\Core\Model\AdminAjaxNotice\NoticeInterface;
|
5 |
-
use Psr\Log\LogLevel;
|
6 |
-
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Returns the debugging operations array
|
10 |
-
*
|
11 |
-
* @since 3.4.6
|
12 |
-
*/
|
13 |
-
function wprss_get_debug_operations() {
|
14 |
-
$operations = apply_filters(
|
15 |
-
'wprss_debug_operations',
|
16 |
-
array(
|
17 |
-
'update-feeds' => array(
|
18 |
-
'nonce' => 'wprss-update-feed-items',
|
19 |
-
'run' => 'wprss_fetch_insert_all_feed_items',
|
20 |
-
'redirect' => 'edit.php?post_type=wprss_feed&page=wprss-debugging&debug_message=1',
|
21 |
-
'render' => 'wprss_debug_update_feeds',
|
22 |
-
),
|
23 |
-
|
24 |
-
'reimport-feeds' => array(
|
25 |
-
'nonce' => 'wprss-delete-import-feed-items',
|
26 |
-
'run' => 'wprss_feed_reset',
|
27 |
-
'redirect' => 'edit.php?post_type=wprss_feed&page=wprss-debugging&debug_message=2',
|
28 |
-
'render' => 'wprss_debug_reimport_feeds',
|
29 |
-
),
|
30 |
-
|
31 |
-
)
|
32 |
-
);
|
33 |
-
|
34 |
-
$operations ['restore-settings'] = apply_filters(
|
35 |
-
'wprss_debug_restore_settings_operation',
|
36 |
-
array(
|
37 |
-
'nonce' => 'wprss-restore-settings',
|
38 |
-
'run' => 'wprss_restore_settings',
|
39 |
-
'redirect' => 'edit.php?post_type=wprss_feed&page=wprss-debugging&debug_message=4',
|
40 |
-
'render' => 'wprss_debug_restore_settings',
|
41 |
-
'pos' => 'bottom'
|
42 |
-
)
|
43 |
-
);
|
44 |
-
|
45 |
-
return $operations;
|
46 |
-
}
|
47 |
-
|
48 |
-
|
49 |
-
add_action( 'admin_init', 'wprss_debug_operations' );
|
50 |
-
/**
|
51 |
-
* Performs debug operations, depending on the POST request.
|
52 |
-
*
|
53 |
-
* @since 3.3
|
54 |
-
*/
|
55 |
-
function wprss_debug_operations(){
|
56 |
-
|
57 |
-
// Define the debugging operations
|
58 |
-
$debug_operations = wprss_get_debug_operations();
|
59 |
-
|
60 |
-
// Check which of the operations needs to be run
|
61 |
-
foreach ( $debug_operations as $id => $operation ) {
|
62 |
-
// If page loading after having clicked 'Update all fields'
|
63 |
-
if ( !isset($_POST[$id]) ) {
|
64 |
-
continue;
|
65 |
-
}
|
66 |
-
|
67 |
-
$nonce = isset($operation['nonce']) ? $operation['nonce'] : null;
|
68 |
-
if ( ! check_admin_referer( $nonce ) ) {
|
69 |
-
continue;
|
70 |
-
}
|
71 |
-
|
72 |
-
$run = isset($operation['run']) ? $operation['run'] : null;
|
73 |
-
if ( is_callable($run) ) {
|
74 |
-
call_user_func( $run );
|
75 |
-
}
|
76 |
-
|
77 |
-
$redirect = isset( $operation['redirect'] )
|
78 |
-
? $operation['redirect']
|
79 |
-
: 'edit.php?post_type=wprss_feed&page=wprss-debugging';
|
80 |
-
wp_redirect( $redirect );
|
81 |
-
|
82 |
-
break;
|
83 |
-
}
|
84 |
-
}
|
85 |
-
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Build the Update Feeds section
|
89 |
-
*
|
90 |
-
* @since 3.4.6
|
91 |
-
*/
|
92 |
-
function wprss_debug_update_feeds() {
|
93 |
-
?>
|
94 |
-
<h3><?php _e( 'Update All Feeds Now', WPRSS_TEXT_DOMAIN ); ?></h3>
|
95 |
-
<p><?php _e( 'Click the blue button to update all active feed items now. This will check all feed sources for any new feed items.', WPRSS_TEXT_DOMAIN ); ?>
|
96 |
-
<br><?php _e( 'Existing feed items will not be modified.', WPRSS_TEXT_DOMAIN ); ?>
|
97 |
-
</p>
|
98 |
-
<p><?php _e( '<strong>Note:</strong> This might take more than a few seconds if you have many feed sources.', WPRSS_TEXT_DOMAIN ); ?></p>
|
99 |
-
|
100 |
-
<form action="edit.php?post_type=wprss_feed&page=wprss-debugging" method="post">
|
101 |
-
|
102 |
-
<?php wp_nonce_field( 'wprss-update-feed-items' );
|
103 |
-
submit_button( __( 'Update all feeds', WPRSS_TEXT_DOMAIN ), 'primary', 'update-feeds', true ); ?>
|
104 |
-
|
105 |
-
</form>
|
106 |
-
<?php
|
107 |
-
}
|
108 |
-
|
109 |
-
|
110 |
-
/**
|
111 |
-
* Build the Delete and Re-Import Feeds section
|
112 |
-
*
|
113 |
-
* @since 3.4.6
|
114 |
-
*/
|
115 |
-
function wprss_debug_reimport_feeds() {
|
116 |
-
?>
|
117 |
-
<h3><?php _e( 'Delete and Re-import Feeds', WPRSS_TEXT_DOMAIN ); ?></h3>
|
118 |
-
<p><?php _e( 'Click the red button to delete all imported feed items and re-import them.', WPRSS_TEXT_DOMAIN ); ?></p>
|
119 |
-
<p><?php _e( '<em><strong>Note:</strong> This is a server-intensive process and should only be used when instructed to by support staff.</em>', WPRSS_TEXT_DOMAIN ); ?></p>
|
120 |
-
|
121 |
-
<form action="edit.php?post_type=wprss_feed&page=wprss-debugging" method="post">
|
122 |
-
|
123 |
-
<?php wp_nonce_field( 'wprss-delete-import-feed-items' );
|
124 |
-
submit_button( __( 'Delete and Re-import all feeds', WPRSS_TEXT_DOMAIN ), 'button-red', 'reimport-feeds', true ); ?>
|
125 |
-
|
126 |
-
</form>
|
127 |
-
<?php
|
128 |
-
}
|
129 |
-
|
130 |
-
|
131 |
-
/**
|
132 |
-
* Render the restore settings button
|
133 |
-
*
|
134 |
-
* @since 4.4
|
135 |
-
*/
|
136 |
-
function wprss_debug_restore_settings() {
|
137 |
-
?>
|
138 |
-
<h3><?php _e( 'Restore Default Settings', WPRSS_TEXT_DOMAIN ); ?></h3>
|
139 |
-
<p><?php _e( 'Click the red button to reset the plugin settings to default.', WPRSS_TEXT_DOMAIN ); ?></p>
|
140 |
-
<p><?php _e( '<em><strong>Note:</strong> This cannot be undone. Once the settings have been reset, your old settings cannot be restored.</em>', WPRSS_TEXT_DOMAIN ); ?></p>
|
141 |
-
|
142 |
-
<form action="edit.php?post_type=wprss_feed&page=wprss-debugging" method="post">
|
143 |
-
|
144 |
-
<?php wp_nonce_field( 'wprss-restore-settings' );
|
145 |
-
submit_button( __( 'Restore Default Settings', WPRSS_TEXT_DOMAIN ), 'button-red', 'restore-settings', true ); ?>
|
146 |
-
|
147 |
-
</form>
|
148 |
-
<?php
|
149 |
-
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* Renders the "Clear log" button
|
153 |
-
*
|
154 |
-
* @since 3.9.6
|
155 |
-
*/
|
156 |
-
function wprss_debug_clear_log_button() {
|
157 |
-
$form_url = admin_url( 'edit.php?post_type=wprss_feed&page=wprss-debugging' ); ?>
|
158 |
-
<form id="wprss-clear-error-log-form" action="<?php echo $form_url; ?>" method="POST" class="wprss-error-log-action">
|
159 |
-
<?php wp_nonce_field( 'wprss-clear-error-log' ); ?>
|
160 |
-
<button type="submit" for="wprss-clear-error-log-form" name="clear-error-log" class="button button-red">
|
161 |
-
<i class="fa fa-trash-o"></i>
|
162 |
-
<?php _e( 'Clear log', WPRSS_TEXT_DOMAIN ); ?>
|
163 |
-
</button>
|
164 |
-
</form>
|
165 |
-
<?php
|
166 |
-
}
|
167 |
-
|
168 |
-
/**
|
169 |
-
* Renders the "Download Error Log" button
|
170 |
-
*
|
171 |
-
* @since 4.7.8
|
172 |
-
*/
|
173 |
-
function wprss_debug_download_log_button() {
|
174 |
-
$form_url = admin_url( 'edit.php?post_type=wprss_feed&page=wprss-debugging' ); ?>
|
175 |
-
<form id="wprss-download-error-log-form" action="<?php echo $form_url; ?>" method="POST" class="wprss-error-log-action">
|
176 |
-
<?php wp_nonce_field( 'wprss-download-error-log' ); ?>
|
177 |
-
<button type="submit" for="wprss-download-error-log-form" name="download-error-log" class="button button-primary">
|
178 |
-
<i class="fa fa-download"></i>
|
179 |
-
<?php _e( 'Download log', WPRSS_TEXT_DOMAIN ); ?>
|
180 |
-
</button>
|
181 |
-
</form>
|
182 |
-
<?php
|
183 |
-
}
|
184 |
-
|
185 |
-
|
186 |
-
/**
|
187 |
-
* Build the debugging page
|
188 |
-
*
|
189 |
-
* @since 3.0
|
190 |
-
*/
|
191 |
-
function wprss_debugging_page_display() {
|
192 |
-
$debug_messages = apply_filters(
|
193 |
-
'wprss_debug_messages',
|
194 |
-
array(
|
195 |
-
'1' => 'debug_feeds_updating',
|
196 |
-
'2' => 'debug_feeds_reimporting',
|
197 |
-
'4' => 'debug_settings_reset',
|
198 |
-
)
|
199 |
-
);
|
200 |
-
|
201 |
-
?>
|
202 |
-
|
203 |
-
<div class="wrap">
|
204 |
-
<h2><?php _e( 'Debugging', WPRSS_TEXT_DOMAIN ); ?></h2>
|
205 |
-
<?php
|
206 |
-
if ( isset( $_GET['debug_message'] )) {//&& ( check_admin_referer( 'wprss-delete-import-feed-items' ) || check_admin_referer( 'wprss-update-feed-items' ) ) ) {
|
207 |
-
$message = $_GET['debug_message'];
|
208 |
-
|
209 |
-
$helper = wprss()->getAdminHelper();
|
210 |
-
foreach ( $debug_messages as $id => $noticeId) {
|
211 |
-
if ( $message == $id ) {
|
212 |
-
$noticeId = $helper->resolveValueOutput($noticeId);
|
213 |
-
|
214 |
-
$component = wprss()->getAdminAjaxNotices();
|
215 |
-
$collection = $component->getNoticeCollection();
|
216 |
-
|
217 |
-
try {
|
218 |
-
$noticeObj = $component->getNotice($noticeId);
|
219 |
-
|
220 |
-
if (!$noticeObj instanceof Aventura\Wprss\Core\DataObject) {
|
221 |
-
throw new Exception(
|
222 |
-
sprintf(
|
223 |
-
__('Expected notice to be a DataObject instance: %s given.', WPRSS_TEXT_DOMAIN),
|
224 |
-
is_object($noticeObj)? get_class($noticeObj) : gettype($noticeObj)
|
225 |
-
)
|
226 |
-
);
|
227 |
-
}
|
228 |
-
} catch (ServiceNotFoundException $ex) {
|
229 |
-
$content = trim(strip_tags($noticeId, '<strong><em><br><p>'));
|
230 |
-
$noticeObj = $helper->createNotice(array(
|
231 |
-
'content' => $content,
|
232 |
-
'dismiss_mode' => NoticeInterface::DISMISS_MODE_FRONTEND,
|
233 |
-
));
|
234 |
-
}
|
235 |
-
|
236 |
-
$noticeData = $noticeObj->getData();
|
237 |
-
echo $collection->render_notice($collection->normalize_notice_data($noticeData));
|
238 |
-
|
239 |
-
break;
|
240 |
-
}
|
241 |
-
}
|
242 |
-
}
|
243 |
-
|
244 |
-
do_action( 'wprss_debugging_before' );
|
245 |
-
|
246 |
-
$bottom = array();
|
247 |
-
$debug_operations = wprss_get_debug_operations();
|
248 |
-
foreach( $debug_operations as $id => $data ) {
|
249 |
-
if ( !isset( $data['render'] ) ) continue;
|
250 |
-
$pos = isset( $data['pos'] ) ? $data['pos'] : 'normal';
|
251 |
-
if ( $pos == 'normal' ) {
|
252 |
-
call_user_func( $data['render'] );
|
253 |
-
} elseif( $pos == 'bottom' ) {
|
254 |
-
$bottom[$id] = $data;
|
255 |
-
}
|
256 |
-
}
|
257 |
-
|
258 |
-
do_action( 'wprss_debugging_after' );
|
259 |
-
|
260 |
-
if ( count($bottom) > 0 ) {
|
261 |
-
foreach( $bottom as $id => $data ) {
|
262 |
-
if ( !isset( $data['render'] ) ) continue;
|
263 |
-
call_user_func( $data['render'] );
|
264 |
-
}
|
265 |
-
}
|
266 |
-
|
267 |
-
?>
|
268 |
-
</div>
|
269 |
-
<?php
|
270 |
-
}
|
271 |
-
|
272 |
-
|
273 |
-
/**
|
274 |
-
* Output admin notice that feeds have been updated successfully
|
275 |
-
*
|
276 |
-
* @since 3.0
|
277 |
-
*/
|
278 |
-
function wprss_debugging_admin_notice_update_feeds() {
|
279 |
-
?><div class="updated"><p><?php _e( 'Feeds are being updated in the background.', WPRSS_TEXT_DOMAIN ) ?></p></div><?php
|
280 |
-
}
|
281 |
-
|
282 |
-
/**
|
283 |
-
* Output admin notice that feeds have been deleted and re-imported successfully
|
284 |
-
*
|
285 |
-
* @since 3.0
|
286 |
-
*/
|
287 |
-
function wprss_debugging_admin_notice_reimport_feeds() {
|
288 |
-
?><div class="updated"><p><?php _e( 'Feeds deleted and are being re-imported in the background.', WPRSS_TEXT_DOMAIN ) ?></p></div><?php
|
289 |
-
}
|
290 |
-
|
291 |
-
|
292 |
-
/**
|
293 |
-
* Output admin notice that log has been cleard
|
294 |
-
*
|
295 |
-
* @since 3.9.6
|
296 |
-
*/
|
297 |
-
function wprss_debugging_admin_notice_clear_log() {
|
298 |
-
?><div class="updated"><p><?php _e( 'The error log has been cleared.', WPRSS_TEXT_DOMAIN ) ?></p></div><?php
|
299 |
-
}
|
300 |
-
|
301 |
-
|
302 |
-
/**
|
303 |
-
* Output admin notice that log has been cleard
|
304 |
-
*
|
305 |
-
* @since 4.4
|
306 |
-
*/
|
307 |
-
function wprss_debugging_admin_notice_reset_settings() {
|
308 |
-
?><div class="updated"><p><?php _e( 'The plugin settings have been reset to default.', WPRSS_TEXT_DOMAIN ) ?></p></div><?php
|
309 |
-
}
|
310 |
-
|
311 |
-
|
312 |
-
/**
|
313 |
-
* Resets the plugin settings to default
|
314 |
-
*
|
315 |
-
* @since 4.4
|
316 |
-
*/
|
317 |
-
function wprss_restore_settings() {
|
318 |
-
// Action Hook
|
319 |
-
do_action( 'wprss_before_restore_settings' );
|
320 |
-
|
321 |
-
// Prepare the settings to reset
|
322 |
-
$settings_to_restore = apply_filters(
|
323 |
-
'wprss_settings_to_restore',
|
324 |
-
array(
|
325 |
-
'wprss_settings_general',
|
326 |
-
'wprss_settings_notices',
|
327 |
-
'wprss_addon_notices',
|
328 |
-
'wprss_pwsv',
|
329 |
-
'wprss_db_version',
|
330 |
-
WPRSS_INTRO_DID_INTRO_OPTION,
|
331 |
-
WPRSS_UPDATE_PAGE_PREV_VERSION_OPTION
|
332 |
-
)
|
333 |
-
);
|
334 |
-
// Delete the settings
|
335 |
-
foreach( $settings_to_restore as $setting ) {
|
336 |
-
delete_option( $setting );
|
337 |
-
}
|
338 |
-
|
339 |
-
// Action Hook
|
340 |
-
do_action( 'wprss_after_restore_settings' );
|
341 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/cron-jobs.php
CHANGED
@@ -70,7 +70,7 @@ function wprss_schedule_fetch_all_feeds_cron()
|
|
70 |
/**
|
71 |
* Gets the time of the global fetch cron.
|
72 |
*
|
73 |
-
* @since
|
74 |
*
|
75 |
* @return false|string A time string in the form `H:i`
|
76 |
*/
|
70 |
/**
|
71 |
* Gets the time of the global fetch cron.
|
72 |
*
|
73 |
+
* @since 4.17
|
74 |
*
|
75 |
* @return false|string A time string in the form `H:i`
|
76 |
*/
|
includes/feed-importing.php
CHANGED
@@ -669,8 +669,14 @@ function wprss_get_feed_cache_dir()
|
|
669 |
// increment the inserted counter
|
670 |
elseif ( ( is_bool($item) && $item === TRUE ) || ( $still_update_count === TRUE && $item !== FALSE ) ) {
|
671 |
$items_inserted++;
|
672 |
-
}
|
673 |
-
$logger->
|
|
|
|
|
|
|
|
|
|
|
|
|
674 |
}
|
675 |
}
|
676 |
}
|
669 |
// increment the inserted counter
|
670 |
elseif ( ( is_bool($item) && $item === TRUE ) || ( $still_update_count === TRUE && $item !== FALSE ) ) {
|
671 |
$items_inserted++;
|
672 |
+
} elseif (has_filter('wprss_insert_post_item_conditionals', 'wprss_kf_check_post_item_keywords')) {
|
673 |
+
$logger->info('Item "{0}" was rejected by your keyword or tag filtering.', [
|
674 |
+
$ogItem->get_title()
|
675 |
+
]);
|
676 |
+
} else {
|
677 |
+
$logger->notice('Item "{0}" was rejected by an add-on.', [
|
678 |
+
$ogItem->get_title()
|
679 |
+
]);
|
680 |
}
|
681 |
}
|
682 |
}
|
includes/functions.php
CHANGED
@@ -326,3 +326,37 @@ function wpra_get_ready_cron_jobs() {
|
|
326 |
|
327 |
return $results;
|
328 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
|
327 |
return $results;
|
328 |
}
|
329 |
+
|
330 |
+
/**
|
331 |
+
* Retrieves the translation for some text from the "wprss" domain.
|
332 |
+
*
|
333 |
+
* @since 4.17.3
|
334 |
+
*
|
335 |
+
* @param string $text The text whose translation to retrieve.
|
336 |
+
*
|
337 |
+
* @return string
|
338 |
+
*/
|
339 |
+
function wprss_translate($text)
|
340 |
+
{
|
341 |
+
$translations = get_translations_for_domain('wprss');
|
342 |
+
|
343 |
+
return $translations->translate($text);
|
344 |
+
}
|
345 |
+
|
346 |
+
/**
|
347 |
+
* Retrieves the singular or plural translation for some text from the "wprss" domain.
|
348 |
+
*
|
349 |
+
* @since 4.17.3
|
350 |
+
*
|
351 |
+
* @param string $single The singular text.
|
352 |
+
* @param string $plural The plural text.
|
353 |
+
* @param int $number The amount, used to determine whether the singular or plural translation will be retrieved.
|
354 |
+
*
|
355 |
+
* @return string
|
356 |
+
*/
|
357 |
+
function wprss_translate_n($single, $plural, $number)
|
358 |
+
{
|
359 |
+
$translations = get_translations_for_domain('wprss');
|
360 |
+
|
361 |
+
return $translations->translate_plural($single, $plural, $number);
|
362 |
+
}
|
includes/scripts.php
CHANGED
@@ -81,14 +81,23 @@
|
|
81 |
wp_register_script('wpra-logs-tool', WPRSS_JS . 'admin/tools/logs.js', ['jquery'], $version, true);
|
82 |
wp_register_script('wpra-blacklist-tool', WPRSS_JS . 'admin/tools/blacklist.js', ['jquery'], $version, true);
|
83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
wp_register_script('wpra-crons-tool', WPRSS_JS . 'admin/tools/crons.js', ['jquery'], $version, true);
|
85 |
wp_localize_script('wpra-crons-tool', 'WpraCronsTool', [
|
|
|
86 |
'restApiNonce' => wp_create_nonce('wp_rest'),
|
87 |
-
'
|
88 |
-
'globalInterval' => wprss_get_general_setting('cron_interval'),
|
89 |
'globalTime' => wprss_get_global_update_time(),
|
90 |
'globalWord' => __('Global', 'wprss'),
|
91 |
-
'perPage' =>
|
|
|
92 |
]);
|
93 |
|
94 |
wp_register_script('wpra-reset-tool', WPRSS_JS . 'admin/tools/reset.js', ['jquery'], $version, true);
|
81 |
wp_register_script('wpra-logs-tool', WPRSS_JS . 'admin/tools/logs.js', ['jquery'], $version, true);
|
82 |
wp_register_script('wpra-blacklist-tool', WPRSS_JS . 'admin/tools/blacklist.js', ['jquery'], $version, true);
|
83 |
|
84 |
+
$wpSchedules = wp_get_schedules();
|
85 |
+
$globSchedule = wprss_get_general_setting('cron_interval');
|
86 |
+
$customSchedule = [
|
87 |
+
'display' => __('Use Global Cron', 'wprss'),
|
88 |
+
'interval' => $wpSchedules[$globSchedule]['interval'],
|
89 |
+
];
|
90 |
+
$schedules = array_merge(['global' => $customSchedule], $wpSchedules);
|
91 |
+
|
92 |
wp_register_script('wpra-crons-tool', WPRSS_JS . 'admin/tools/crons.js', ['jquery'], $version, true);
|
93 |
wp_localize_script('wpra-crons-tool', 'WpraCronsTool', [
|
94 |
+
'restUrl' => rest_url(),
|
95 |
'restApiNonce' => wp_create_nonce('wp_rest'),
|
96 |
+
'globalInterval' => $globSchedule,
|
|
|
97 |
'globalTime' => wprss_get_global_update_time(),
|
98 |
'globalWord' => __('Global', 'wprss'),
|
99 |
+
'perPage' => 30,
|
100 |
+
'schedules' => $schedules
|
101 |
]);
|
102 |
|
103 |
wp_register_script('wpra-reset-tool', WPRSS_JS . 'admin/tools/reset.js', ['jquery'], $version, true);
|
js/admin/tools/crons.js
CHANGED
@@ -1,4 +1,7 @@
|
|
1 |
-
(function ($, Config) {
|
|
|
|
|
|
|
2 |
|
3 |
// Update the table only when the tool is shown
|
4 |
$(document).on('wpra/tools/on_loaded', function (event, tool) {
|
@@ -17,30 +20,125 @@
|
|
17 |
* Initializes the crons tool.
|
18 |
*/
|
19 |
function init() {
|
|
|
20 |
Pagination.init();
|
21 |
Table.init();
|
22 |
Timeline.init();
|
23 |
Info.init();
|
|
|
|
|
24 |
}
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
/**
|
27 |
* The data store.
|
28 |
*/
|
29 |
var Store = {
|
30 |
-
feeds:
|
|
|
31 |
count: 0,
|
32 |
isLoaded: false,
|
33 |
page: 1,
|
|
|
34 |
|
35 |
-
|
36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
$.ajax({
|
39 |
-
url: '
|
40 |
method: 'GET',
|
41 |
data: {
|
42 |
num: Config.perPage,
|
43 |
-
page:
|
44 |
},
|
45 |
beforeSend: function (request) {
|
46 |
request.setRequestHeader("X-WP-NONCE", Config.restApiNonce);
|
@@ -48,15 +146,32 @@
|
|
48 |
success: function (response) {
|
49 |
if (response && response.items) {
|
50 |
Store.count = response.count;
|
51 |
-
Store.feeds = response.items
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
});
|
54 |
-
}
|
55 |
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
|
|
|
|
|
|
|
|
|
|
60 |
|
61 |
if (callback) {
|
62 |
callback();
|
@@ -65,9 +180,6 @@
|
|
65 |
error: function (response) {
|
66 |
console.error(response);
|
67 |
},
|
68 |
-
complete: function () {
|
69 |
-
Pagination.hideLoading();
|
70 |
-
}
|
71 |
});
|
72 |
},
|
73 |
|
@@ -77,31 +189,61 @@
|
|
77 |
: interval;
|
78 |
},
|
79 |
|
80 |
-
|
81 |
-
|
82 |
|
83 |
for (var i in Store.feeds) {
|
84 |
var feed = Store.feeds[i];
|
85 |
var time = Feed.getUpdateTime(feed),
|
86 |
-
timeStr =
|
87 |
|
88 |
-
if (!
|
89 |
-
|
90 |
}
|
91 |
|
92 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
}
|
94 |
|
95 |
var collapsed = {};
|
96 |
-
for (var timeStr in
|
97 |
// Get the time object and string for the previous minute
|
98 |
-
var group =
|
99 |
-
time =
|
100 |
-
prevTime =
|
101 |
-
prevTimeStr =
|
102 |
|
103 |
// The key to use - either this group's time string or a time string for 1 minute less
|
104 |
-
var key =
|
105 |
? prevTimeStr
|
106 |
: timeStr;
|
107 |
|
@@ -114,7 +256,7 @@
|
|
114 |
collapsed[key] = collapsed[key].concat(group);
|
115 |
}
|
116 |
|
117 |
-
|
118 |
},
|
119 |
};
|
120 |
|
@@ -126,14 +268,12 @@
|
|
126 |
return feed.active ? 'active' : 'paused';
|
127 |
},
|
128 |
getUpdateInterval: function (feed) {
|
129 |
-
return
|
130 |
-
? Config.globalWord
|
131 |
-
: feed.update_interval;
|
132 |
},
|
133 |
getUpdateTime: function (feed) {
|
134 |
return (feed.update_time)
|
135 |
-
?
|
136 |
-
:
|
137 |
},
|
138 |
};
|
139 |
|
@@ -143,41 +283,117 @@
|
|
143 |
var Table = {
|
144 |
element: null,
|
145 |
body: null,
|
146 |
-
|
|
|
|
|
147 |
init: function () {
|
148 |
if (Table.element === null) {
|
149 |
Table.element = $('#wpra-crons-tool-table');
|
150 |
Table.body = Table.element.find('tbody');
|
151 |
}
|
152 |
-
if (Store.feeds === null) {
|
153 |
-
Store.fetchSources();
|
154 |
-
}
|
155 |
},
|
156 |
createRow: function (feed) {
|
157 |
var id = feed.id,
|
158 |
state = Feed.getState(feed),
|
159 |
name = feed.name,
|
160 |
-
interval =
|
161 |
-
timeStr =
|
162 |
|
163 |
var elRow = $('<tr></tr>').addClass('wpra-crons-feed-' + Feed.getState(feed));
|
164 |
|
165 |
-
$('<td></td>').appendTo(elRow).addClass('wpra-crons-feed-id-col').text('#' + id);
|
166 |
-
$('<td></td>').appendTo(elRow).addClass('wpra-crons-feed-name-col').text(name);
|
167 |
-
$('<td></td>').appendTo(elRow).addClass('wpra-crons-interval-col')
|
168 |
-
$('<td></td>').appendTo(elRow).addClass('wpra-crons-time-col')
|
169 |
|
170 |
-
|
171 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
|
173 |
-
if (Table.hovered === id) {
|
174 |
-
Table.hovered = null;
|
175 |
-
} else {
|
176 |
$(this).addClass('wpra-crons-highlighted-feed');
|
177 |
-
Table.
|
178 |
-
}
|
179 |
|
180 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
});
|
182 |
|
183 |
return elRow;
|
@@ -185,8 +401,13 @@
|
|
185 |
update: function () {
|
186 |
Table.body.empty();
|
187 |
|
188 |
-
|
189 |
-
Table.
|
|
|
|
|
|
|
|
|
|
|
190 |
}
|
191 |
},
|
192 |
};
|
@@ -195,55 +416,67 @@
|
|
195 |
* The pagination component.
|
196 |
*/
|
197 |
var Pagination = {
|
|
|
198 |
nextBtn: null,
|
199 |
prevBtn: null,
|
200 |
-
|
201 |
-
|
|
|
|
|
202 |
// Initializes the pagination
|
203 |
init: function () {
|
204 |
Pagination.nextBtn = $('#wpra-crons-next-page');
|
205 |
Pagination.prevBtn = $('#wpra-crons-prev-page');
|
|
|
|
|
|
|
|
|
206 |
Pagination.numFeeds = $('.wpra-crons-num-feeds');
|
207 |
-
Pagination.loadingText = $('#wpra-crons-loading');
|
208 |
|
209 |
// Hide the feed counter until the component updates
|
210 |
Pagination.numFeeds.parent().hide();
|
211 |
|
212 |
Pagination.nextBtn.click(Pagination.nextPage);
|
213 |
Pagination.prevBtn.click(Pagination.prevPage);
|
|
|
|
|
214 |
},
|
215 |
// Updates the pagination component
|
216 |
update: function () {
|
217 |
-
Pagination.
|
218 |
-
Pagination.
|
|
|
|
|
|
|
|
|
|
|
|
|
219 |
|
220 |
Pagination.numFeeds.text(Store.count);
|
221 |
Pagination.numFeeds.parent().toggle(Store.count > 0);
|
222 |
},
|
223 |
-
//
|
224 |
-
|
225 |
-
|
|
|
|
|
|
|
226 |
},
|
227 |
// Switches to the next page
|
228 |
nextPage: function () {
|
229 |
-
Pagination.changePage(Math.min(
|
230 |
},
|
231 |
// Switches to the previous page
|
232 |
prevPage: function () {
|
233 |
-
Pagination.changePage(Math.max(
|
234 |
-
},
|
235 |
-
// Switches to a specific page
|
236 |
-
changePage: function (page) {
|
237 |
-
Store.page = page;
|
238 |
-
Store.fetchSources();
|
239 |
},
|
240 |
-
//
|
241 |
-
|
242 |
-
Pagination.
|
243 |
},
|
244 |
-
//
|
245 |
-
|
246 |
-
Pagination.
|
247 |
},
|
248 |
};
|
249 |
|
@@ -305,15 +538,15 @@
|
|
305 |
textSpacing = 20,
|
306 |
lineY = height - textSpacing - textHeight,
|
307 |
lineColor = "#555",
|
308 |
-
hourGuideColor = "#
|
309 |
-
minsGuideColor = "#
|
310 |
lineWidth = 2,
|
311 |
evenTextColor = "#444",
|
312 |
oddTextColor = "#888",
|
313 |
-
bubbleColor = "#
|
314 |
-
bubbleWarningColor = "#
|
315 |
-
bubbleSeriousColor = "#
|
316 |
-
|
317 |
bubbleRadius = 12,
|
318 |
bubbleTopOffset = 5,
|
319 |
bubbleTop = (bubbleRadius * 2) + bubbleTopOffset;
|
@@ -336,18 +569,19 @@
|
|
336 |
|
337 |
// Pad along the x-axis so that the numbers are not exactly at the edges
|
338 |
ctx.translate(axisOffset, 0);
|
|
|
339 |
|
340 |
// Draw the numbers and dotted lines
|
341 |
{
|
342 |
-
var hourWidth =
|
343 |
minFontSize = 12,
|
344 |
maxFontSize = 18,
|
345 |
fontSizeRatio = 0.011,
|
346 |
-
fontSize = Math.max(Math.min(
|
347 |
|
348 |
ctx.font = fontSize + "px sans-serif";
|
349 |
ctx.textBaseline = "hanging";
|
350 |
-
for (var hour = 0; hour
|
351 |
var hourStr = (hour < 10) ? "0" + hour : hour,
|
352 |
text = hourStr + ":00",
|
353 |
even = (hour % 2 === 0),
|
@@ -357,15 +591,16 @@
|
|
357 |
ty = y + 3,
|
358 |
color = (even) ? evenTextColor : oddTextColor;
|
359 |
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
|
|
369 |
|
370 |
// The hour guide lines
|
371 |
ctx.save();
|
@@ -395,139 +630,189 @@
|
|
395 |
|
396 |
// Draw the indicators
|
397 |
{
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
var
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
bgColor = color;
|
417 |
-
textColor = "#fff";
|
418 |
-
} else if (count > 10) {
|
419 |
-
color = bubbleSeriousColor;
|
420 |
-
} else if (count > 5) {
|
421 |
-
color = bubbleWarningColor;
|
422 |
-
}
|
423 |
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
|
|
455 |
|
456 |
-
|
457 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
458 |
|
459 |
-
|
460 |
-
|
461 |
-
});
|
462 |
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
|
|
|
|
|
467 |
drawFn(group, timeStr);
|
|
|
|
|
468 |
}
|
469 |
|
470 |
-
|
471 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
472 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
473 |
}
|
474 |
}
|
475 |
|
476 |
ctx.translate(0, 0);
|
477 |
},
|
478 |
-
|
479 |
-
drawLollipop: function () {
|
480 |
-
|
481 |
-
},
|
482 |
};
|
483 |
|
|
|
484 |
/**
|
485 |
-
*
|
486 |
*/
|
487 |
-
var
|
488 |
-
|
489 |
-
return
|
490 |
-
|
491 |
-
:
|
|
|
492 |
},
|
493 |
-
|
494 |
-
if (!
|
495 |
return "";
|
496 |
}
|
497 |
|
498 |
-
var hours =
|
499 |
-
var minutes =
|
500 |
|
501 |
return hours + ":" + minutes;
|
502 |
},
|
503 |
-
|
504 |
-
var parts =
|
505 |
var hours = parseInt(parts[0]);
|
506 |
var mins = parseInt(parts[1]);
|
507 |
|
508 |
-
return
|
509 |
},
|
510 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
511 |
var newObj = {
|
512 |
-
hours:
|
513 |
-
minutes:
|
514 |
};
|
515 |
|
516 |
-
|
|
|
|
|
517 |
newObj.minutes = newObj.minutes % 60;
|
518 |
|
|
|
|
|
|
|
|
|
|
|
519 |
return newObj;
|
520 |
},
|
521 |
-
|
522 |
-
|
523 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
524 |
|
525 |
if (an === bn) {
|
526 |
return 0;
|
527 |
}
|
528 |
|
529 |
return (an < bn) ? -1 : 1;
|
530 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
531 |
};
|
532 |
|
533 |
})(jQuery, WpraCronsTool);
|
1 |
+
(function ($, Config, undefined) {
|
2 |
+
|
3 |
+
// The length of a day in seconds
|
4 |
+
var DAY_IN_SECONDS = 24 * 60 * 60;
|
5 |
|
6 |
// Update the table only when the tool is shown
|
7 |
$(document).on('wpra/tools/on_loaded', function (event, tool) {
|
20 |
* Initializes the crons tool.
|
21 |
*/
|
22 |
function init() {
|
23 |
+
Loading.init();
|
24 |
Pagination.init();
|
25 |
Table.init();
|
26 |
Timeline.init();
|
27 |
Info.init();
|
28 |
+
|
29 |
+
Store.init();
|
30 |
}
|
31 |
|
32 |
+
/**
|
33 |
+
* The loading component.
|
34 |
+
*/
|
35 |
+
var Loading = {
|
36 |
+
element: null,
|
37 |
+
wrapper: null,
|
38 |
+
shown: false,
|
39 |
+
progress: null,
|
40 |
+
maxWidth: 100,
|
41 |
+
init: function () {
|
42 |
+
Loading.element = $('.wpra-crons-loading');
|
43 |
+
Loading.wrapper = $('.wpra-crons-wrap');
|
44 |
+
Loading.bar = Loading.element.find('.wpra-crons-loading-bar');
|
45 |
+
|
46 |
+
Loading.hide().update();
|
47 |
+
},
|
48 |
+
update: function () {
|
49 |
+
Loading.element.toggle(Loading.shown);
|
50 |
+
Loading.wrapper.toggle(!Loading.shown);
|
51 |
+
|
52 |
+
Loading.bar.css({
|
53 |
+
width: (Loading.progress * Loading.maxWidth) + '%'
|
54 |
+
});
|
55 |
+
},
|
56 |
+
setProgress: function (progress) {
|
57 |
+
Loading.progress = progress;
|
58 |
+
|
59 |
+
return Loading;
|
60 |
+
},
|
61 |
+
show: function () {
|
62 |
+
Loading.shown = true;
|
63 |
+
|
64 |
+
return Loading;
|
65 |
+
},
|
66 |
+
hide: function () {
|
67 |
+
Loading.shown = false;
|
68 |
+
Loading.progress = 0;
|
69 |
+
|
70 |
+
return Loading;
|
71 |
+
},
|
72 |
+
};
|
73 |
+
|
74 |
/**
|
75 |
* The data store.
|
76 |
*/
|
77 |
var Store = {
|
78 |
+
feeds: [],
|
79 |
+
groups: {},
|
80 |
count: 0,
|
81 |
isLoaded: false,
|
82 |
page: 1,
|
83 |
+
numPages: 1,
|
84 |
|
85 |
+
init: function () {
|
86 |
+
// Show the loading message with an empty progress bar
|
87 |
+
Loading.setProgress(0).show().update();
|
88 |
+
|
89 |
+
var currPage = 1;
|
90 |
+
var loadNextPage = function () {
|
91 |
+
// Update the loading
|
92 |
+
Loading.setProgress(currPage / Store.numPages).update();
|
93 |
+
|
94 |
+
// If reached the last page, hide the progress bar
|
95 |
+
if (currPage >= Store.numPages) {
|
96 |
+
// Generate the groups
|
97 |
+
Store.groupFeeds();
|
98 |
+
|
99 |
+
// Update the components
|
100 |
+
setTimeout(function () {
|
101 |
+
Loading.hide().update();
|
102 |
+
Pagination.update();
|
103 |
+
Table.update();
|
104 |
+
Timeline.update();
|
105 |
+
Info.update();
|
106 |
+
}, 500);
|
107 |
+
|
108 |
+
return;
|
109 |
+
}
|
110 |
+
|
111 |
+
// Increment the page
|
112 |
+
currPage++;
|
113 |
+
|
114 |
+
// Fetch the page
|
115 |
+
Store.fetchSources(currPage, loadNextPage);
|
116 |
+
};
|
117 |
+
|
118 |
+
// Load the first page
|
119 |
+
Store.fetchSources(1, loadNextPage);
|
120 |
+
},
|
121 |
+
|
122 |
+
update: function (delegateUpate) {
|
123 |
+
// Re-group the feeds
|
124 |
+
Store.groupFeeds();
|
125 |
+
|
126 |
+
// Update the table and timeline
|
127 |
+
if (delegateUpate !== false) {
|
128 |
+
Table.update();
|
129 |
+
Timeline.update();
|
130 |
+
}
|
131 |
+
},
|
132 |
+
|
133 |
+
fetchSources: function (page, callback) {
|
134 |
+
page = (page === null || page === undefined) ? Store.page : page;
|
135 |
|
136 |
$.ajax({
|
137 |
+
url: Config.restUrl + '/wpra/v1/sources',
|
138 |
method: 'GET',
|
139 |
data: {
|
140 |
num: Config.perPage,
|
141 |
+
page: page
|
142 |
},
|
143 |
beforeSend: function (request) {
|
144 |
request.setRequestHeader("X-WP-NONCE", Config.restApiNonce);
|
146 |
success: function (response) {
|
147 |
if (response && response.items) {
|
148 |
Store.count = response.count;
|
149 |
+
Store.feeds = Store.feeds.concat(response.items);
|
150 |
+
|
151 |
+
if (!Store.isLoaded) {
|
152 |
+
Store.numPages = Math.ceil(Store.count / Store.feeds.length);
|
153 |
+
}
|
154 |
+
|
155 |
+
// Save the original cron information
|
156 |
+
Store.feeds = Store.feeds.map(function (feed) {
|
157 |
+
feed.original = {
|
158 |
+
active: feed.active,
|
159 |
+
update_time: feed.update_time,
|
160 |
+
update_interval: feed.update_interval,
|
161 |
+
};
|
162 |
+
|
163 |
+
return feed;
|
164 |
});
|
|
|
165 |
|
166 |
+
// Sort the feeds
|
167 |
+
Store.feeds = Store.feeds.sort(function (a, b) {
|
168 |
+
return Time.compare(Feed.getUpdateTime(a), Feed.getUpdateTime(b));
|
169 |
+
});
|
170 |
+
|
171 |
+
Store.isLoaded = true;
|
172 |
+
|
173 |
+
Store.update();
|
174 |
+
}
|
175 |
|
176 |
if (callback) {
|
177 |
callback();
|
180 |
error: function (response) {
|
181 |
console.error(response);
|
182 |
},
|
|
|
|
|
|
|
183 |
});
|
184 |
},
|
185 |
|
189 |
: interval;
|
190 |
},
|
191 |
|
192 |
+
groupFeeds: function () {
|
193 |
+
Store.groups = {};
|
194 |
|
195 |
for (var i in Store.feeds) {
|
196 |
var feed = Store.feeds[i];
|
197 |
var time = Feed.getUpdateTime(feed),
|
198 |
+
timeStr = Time.format(time);
|
199 |
|
200 |
+
if (!Store.groups[timeStr]) {
|
201 |
+
Store.groups[timeStr] = [];
|
202 |
}
|
203 |
|
204 |
+
Store.groups[timeStr].push(feed);
|
205 |
+
|
206 |
+
// Get the interval time in seconds
|
207 |
+
var interval = Config.schedules[Feed.getUpdateInterval(feed)]['interval'];
|
208 |
+
var intervalObj = Time.fromSeconds(interval);
|
209 |
+
|
210 |
+
// Add recurrences for feeds that fetch more than once a day
|
211 |
+
if (interval < DAY_IN_SECONDS) {
|
212 |
+
var t = {
|
213 |
+
hours: time.hours,
|
214 |
+
minutes: time.minutes,
|
215 |
+
};
|
216 |
+
|
217 |
+
var numRepeats = Math.floor(DAY_IN_SECONDS / interval) - 1;
|
218 |
+
for (var i = 0; i < numRepeats; ++i) {
|
219 |
+
// Add the interval to the temporary time
|
220 |
+
t = Time.add(t, intervalObj);
|
221 |
+
|
222 |
+
// Convert to seconds, clamp to 24 hours and convert back to an object
|
223 |
+
// This lets us format it into a time string without having 24+ hours
|
224 |
+
var t2 = Time.fromSeconds(Time.toSeconds(t) % DAY_IN_SECONDS);
|
225 |
+
// Get the time string for the clamped time
|
226 |
+
var str = Time.format(t2);
|
227 |
+
|
228 |
+
// Add the recurrence to the groups
|
229 |
+
if (!Store.groups[str]) {
|
230 |
+
Store.groups[str] = [];
|
231 |
+
}
|
232 |
+
Store.groups[str].push(feed);
|
233 |
+
}
|
234 |
+
}
|
235 |
}
|
236 |
|
237 |
var collapsed = {};
|
238 |
+
for (var timeStr in Store.groups) {
|
239 |
// Get the time object and string for the previous minute
|
240 |
+
var group = Store.groups[timeStr],
|
241 |
+
time = Time.parse(timeStr),
|
242 |
+
prevTime = Time.add(time, {hours: 0, minutes: -1}),
|
243 |
+
prevTimeStr = Time.format(prevTime);
|
244 |
|
245 |
// The key to use - either this group's time string or a time string for 1 minute less
|
246 |
+
var key = Store.groups.hasOwnProperty(prevTimeStr)
|
247 |
? prevTimeStr
|
248 |
: timeStr;
|
249 |
|
256 |
collapsed[key] = collapsed[key].concat(group);
|
257 |
}
|
258 |
|
259 |
+
Store.groups = Object.keys(collapsed).sort().reduce((acc, key) => (acc[key] = collapsed[key], acc), {});
|
260 |
},
|
261 |
};
|
262 |
|
268 |
return feed.active ? 'active' : 'paused';
|
269 |
},
|
270 |
getUpdateInterval: function (feed) {
|
271 |
+
return feed.update_interval;
|
|
|
|
|
272 |
},
|
273 |
getUpdateTime: function (feed) {
|
274 |
return (feed.update_time)
|
275 |
+
? Time.parse(feed.update_time)
|
276 |
+
: Time.parse(Config.globalTime);
|
277 |
},
|
278 |
};
|
279 |
|
283 |
var Table = {
|
284 |
element: null,
|
285 |
body: null,
|
286 |
+
page: 1,
|
287 |
+
numPerPage: Config.perPage,
|
288 |
+
highlighted: null,
|
289 |
init: function () {
|
290 |
if (Table.element === null) {
|
291 |
Table.element = $('#wpra-crons-tool-table');
|
292 |
Table.body = Table.element.find('tbody');
|
293 |
}
|
|
|
|
|
|
|
294 |
},
|
295 |
createRow: function (feed) {
|
296 |
var id = feed.id,
|
297 |
state = Feed.getState(feed),
|
298 |
name = feed.name,
|
299 |
+
interval = Feed.getUpdateInterval(feed),
|
300 |
+
timeStr = Time.format(Feed.getUpdateTime(feed));
|
301 |
|
302 |
var elRow = $('<tr></tr>').addClass('wpra-crons-feed-' + Feed.getState(feed));
|
303 |
|
304 |
+
var idCol = $('<td></td>').appendTo(elRow).addClass('wpra-crons-feed-id-col').text('#' + id);
|
305 |
+
var nameCol = $('<td></td>').appendTo(elRow).addClass('wpra-crons-feed-name-col').text(name);
|
306 |
+
var intervalCol = $('<td></td>').appendTo(elRow).addClass('wpra-crons-interval-col');
|
307 |
+
var timeCol = $('<td></td>').appendTo(elRow).addClass('wpra-crons-time-col');
|
308 |
|
309 |
+
{
|
310 |
+
// The interval selector
|
311 |
+
var intervalSelect = $('<select>').appendTo(intervalCol);
|
312 |
+
// The reset time button
|
313 |
+
var resetIntervalBtn = $('<a>').appendTo(intervalCol)
|
314 |
+
.attr('href', 'javascript:void(0)')
|
315 |
+
.addClass('wpra-crons-reset-interval')
|
316 |
+
.text('Reset')
|
317 |
+
.toggle(feed.update_interval !== feed.original.update_interval);
|
318 |
+
|
319 |
+
// Add the options to the interval selector
|
320 |
+
for (var i in Config.schedules) {
|
321 |
+
var option = $('<option>')
|
322 |
+
.val(i)
|
323 |
+
.text(Config.schedules[i]['display'])
|
324 |
+
.prop('selected', i === interval);
|
325 |
+
|
326 |
+
intervalSelect.append(option);
|
327 |
+
}
|
328 |
+
|
329 |
+
// Event for when the selected interval changes
|
330 |
+
intervalSelect.on('change', function () {
|
331 |
+
var newInterval = $(this).val();
|
332 |
+
|
333 |
+
// Show the reset button if the value is different from the original
|
334 |
+
resetIntervalBtn.toggle(newInterval !== feed.original.update_interval);
|
335 |
+
|
336 |
+
// Update the time in the store
|
337 |
+
feed.update_interval = newInterval;
|
338 |
+
Store.update(false);
|
339 |
+
Timeline.update();
|
340 |
+
});
|
341 |
+
|
342 |
+
// Event for when the reset interval button is clicked
|
343 |
+
resetIntervalBtn.click(function () {
|
344 |
+
feed.update_interval = feed.original.update_interval;
|
345 |
+
Store.update();
|
346 |
+
});
|
347 |
+
}
|
348 |
+
|
349 |
+
{
|
350 |
+
// The time field
|
351 |
+
var timeField = $('<input />').appendTo(timeCol).attr({type: 'time', value: timeStr});
|
352 |
+
// The reset time button
|
353 |
+
var resetTimeBtn = $('<a>').appendTo(timeCol)
|
354 |
+
.attr('href', 'javascript:void(0)')
|
355 |
+
.addClass('wpra-crons-reset-time')
|
356 |
+
.text('Reset')
|
357 |
+
.toggle(feed.update_time !== feed.original.update_time);
|
358 |
+
|
359 |
+
|
360 |
+
// When the time field's value changes, update the store and timeline
|
361 |
+
// (But not the table, otherwise the field will lose focus)
|
362 |
+
timeField.on('change', function (e) {
|
363 |
+
var newTime = $(this).val();
|
364 |
+
|
365 |
+
// Show the reset button if the value is different from the original
|
366 |
+
resetTimeBtn.toggle(newTime !== feed.original.update_time);
|
367 |
+
|
368 |
+
// Update the time in the store
|
369 |
+
feed.update_time = newTime;
|
370 |
+
Store.update(false);
|
371 |
+
Timeline.update();
|
372 |
+
});
|
373 |
+
|
374 |
+
// Event for when the reset time button is clicked
|
375 |
+
resetTimeBtn.click(function () {
|
376 |
+
feed.update_time = feed.original.update_time;
|
377 |
+
Store.update();
|
378 |
+
});
|
379 |
+
}
|
380 |
+
|
381 |
+
elRow.on('hover', function (e) {
|
382 |
+
if (e.type === "mouseenter") {
|
383 |
+
Table.body.find('.wpra-crons-highlighted-feed').removeClass('wpra-crons-highlighted-feed');
|
384 |
|
|
|
|
|
|
|
385 |
$(this).addClass('wpra-crons-highlighted-feed');
|
386 |
+
Table.highlighted = id;
|
|
|
387 |
|
388 |
+
Timeline.update();
|
389 |
+
} else {
|
390 |
+
if (Table.highlighted === id) {
|
391 |
+
$(this).removeClass('wpra-crons-highlighted-feed');
|
392 |
+
Table.highlighted = null;
|
393 |
+
|
394 |
+
Timeline.update();
|
395 |
+
}
|
396 |
+
}
|
397 |
});
|
398 |
|
399 |
return elRow;
|
401 |
update: function () {
|
402 |
Table.body.empty();
|
403 |
|
404 |
+
var pagedFeeds = Store.feeds.slice(
|
405 |
+
Table.numPerPage * (Table.page - 1),
|
406 |
+
Table.numPerPage * Table.page
|
407 |
+
);
|
408 |
+
|
409 |
+
for (var i in pagedFeeds) {
|
410 |
+
Table.body.append(Table.createRow(pagedFeeds[i]));
|
411 |
}
|
412 |
},
|
413 |
};
|
416 |
* The pagination component.
|
417 |
*/
|
418 |
var Pagination = {
|
419 |
+
numFeeds: null,
|
420 |
nextBtn: null,
|
421 |
prevBtn: null,
|
422 |
+
firstPageBtn: null,
|
423 |
+
lastPageBtn: null,
|
424 |
+
currPageSpan: null,
|
425 |
+
numPagesSpan: null,
|
426 |
// Initializes the pagination
|
427 |
init: function () {
|
428 |
Pagination.nextBtn = $('#wpra-crons-next-page');
|
429 |
Pagination.prevBtn = $('#wpra-crons-prev-page');
|
430 |
+
Pagination.firstPageBtn = $('#wpra-crons-first-page');
|
431 |
+
Pagination.lastPageBtn = $('#wpra-crons-last-page');
|
432 |
+
Pagination.currPageSpan = $('.wpra-crons-curr-page');
|
433 |
+
Pagination.numPagesSpan = $('.wpra-crons-num-pages');
|
434 |
Pagination.numFeeds = $('.wpra-crons-num-feeds');
|
|
|
435 |
|
436 |
// Hide the feed counter until the component updates
|
437 |
Pagination.numFeeds.parent().hide();
|
438 |
|
439 |
Pagination.nextBtn.click(Pagination.nextPage);
|
440 |
Pagination.prevBtn.click(Pagination.prevPage);
|
441 |
+
Pagination.firstPageBtn.click(Pagination.firstPage);
|
442 |
+
Pagination.lastPageBtn.click(Pagination.lastPage);
|
443 |
},
|
444 |
// Updates the pagination component
|
445 |
update: function () {
|
446 |
+
Pagination.currPageSpan.text(Table.page);
|
447 |
+
Pagination.numPagesSpan.text(Store.numPages);
|
448 |
+
|
449 |
+
Pagination.nextBtn.prop('disabled', Table.page >= Store.numPages);
|
450 |
+
Pagination.prevBtn.prop('disabled', Table.page <= 1);
|
451 |
+
|
452 |
+
Pagination.firstPageBtn.prop('disabled', Table.page <= 1);
|
453 |
+
Pagination.lastPageBtn.prop('disabled', Table.page === Store.numPages);
|
454 |
|
455 |
Pagination.numFeeds.text(Store.count);
|
456 |
Pagination.numFeeds.parent().toggle(Store.count > 0);
|
457 |
},
|
458 |
+
// Switches to a specific page
|
459 |
+
changePage: function (page) {
|
460 |
+
Table.page = page;
|
461 |
+
|
462 |
+
Table.update();
|
463 |
+
Pagination.update();
|
464 |
},
|
465 |
// Switches to the next page
|
466 |
nextPage: function () {
|
467 |
+
Pagination.changePage(Math.min(Table.page + 1, Store.numPages));
|
468 |
},
|
469 |
// Switches to the previous page
|
470 |
prevPage: function () {
|
471 |
+
Pagination.changePage(Math.max(Table.page - 1, 1));
|
|
|
|
|
|
|
|
|
|
|
472 |
},
|
473 |
+
// Switches to the first page
|
474 |
+
firstPage: function () {
|
475 |
+
Pagination.changePage(1);
|
476 |
},
|
477 |
+
// Switches to the last page
|
478 |
+
lastPage: function () {
|
479 |
+
Pagination.changePage(Store.numPages);
|
480 |
},
|
481 |
};
|
482 |
|
538 |
textSpacing = 20,
|
539 |
lineY = height - textSpacing - textHeight,
|
540 |
lineColor = "#555",
|
541 |
+
hourGuideColor = "#666",
|
542 |
+
minsGuideColor = "#999",
|
543 |
lineWidth = 2,
|
544 |
evenTextColor = "#444",
|
545 |
oddTextColor = "#888",
|
546 |
+
bubbleColor = "#317596",
|
547 |
+
bubbleWarningColor = "#b97d50",
|
548 |
+
bubbleSeriousColor = "#9b3832",
|
549 |
+
bubbleBlurColor = "#ccc",
|
550 |
bubbleRadius = 12,
|
551 |
bubbleTopOffset = 5,
|
552 |
bubbleTop = (bubbleRadius * 2) + bubbleTopOffset;
|
569 |
|
570 |
// Pad along the x-axis so that the numbers are not exactly at the edges
|
571 |
ctx.translate(axisOffset, 0);
|
572 |
+
var availWidth = width - (axisOffset * 2);
|
573 |
|
574 |
// Draw the numbers and dotted lines
|
575 |
{
|
576 |
+
var hourWidth = availWidth / 24,
|
577 |
minFontSize = 12,
|
578 |
maxFontSize = 18,
|
579 |
fontSizeRatio = 0.011,
|
580 |
+
fontSize = Math.max(Math.min(availWidth * fontSizeRatio, maxFontSize), minFontSize);
|
581 |
|
582 |
ctx.font = fontSize + "px sans-serif";
|
583 |
ctx.textBaseline = "hanging";
|
584 |
+
for (var hour = 0; hour <= 24; ++hour) {
|
585 |
var hourStr = (hour < 10) ? "0" + hour : hour,
|
586 |
text = hourStr + ":00",
|
587 |
even = (hour % 2 === 0),
|
591 |
ty = y + 3,
|
592 |
color = (even) ? evenTextColor : oddTextColor;
|
593 |
|
594 |
+
// Do not draw the hour text for 24:00 or later
|
595 |
+
if (hour < 24) {
|
596 |
+
ctx.save();
|
597 |
+
ctx.translate(tx, ty);
|
598 |
+
ctx.rotate(Math.PI / 5);
|
599 |
+
ctx.fillStyle = color;
|
600 |
+
ctx.textAlign = "left";
|
601 |
+
ctx.fillText(text, 0, 0);
|
602 |
+
ctx.restore();
|
603 |
+
}
|
604 |
|
605 |
// The hour guide lines
|
606 |
ctx.save();
|
630 |
|
631 |
// Draw the indicators
|
632 |
{
|
633 |
+
var minuteWidth = availWidth / (24 * 60),
|
634 |
+
fetchDuration = 5, // in minutes
|
635 |
+
fetchWidth = fetchDuration * minuteWidth;
|
636 |
+
|
637 |
+
// The function for drawing a group
|
638 |
+
var drawFn = function (group, timeStr, highlighted) {
|
639 |
+
var time = Time.parse(timeStr),
|
640 |
+
groupX = (time.hours * hourWidth) + (time.minutes / 60 * hourWidth),
|
641 |
+
count = group.length,
|
642 |
+
color = bubbleColor,
|
643 |
+
bgColor = "#fff",
|
644 |
+
textColor = color;
|
645 |
+
|
646 |
+
if (count > 10) {
|
647 |
+
textColor = color = bubbleSeriousColor;
|
648 |
+
} else if (count > 5) {
|
649 |
+
textColor = color = bubbleWarningColor;
|
650 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
651 |
|
652 |
+
// If highlighted is `true`, draw highlighted group
|
653 |
+
// If highlighted is `false`, draw blurred group
|
654 |
+
// If highlighted is anything else, draw normally
|
655 |
+
if (highlighted === true) {
|
656 |
+
bgColor = color;
|
657 |
+
textColor = "#fff";
|
658 |
+
} else if (highlighted === false) {
|
659 |
+
color = bubbleBlurColor;
|
660 |
+
textColor = bubbleBlurColor;
|
661 |
+
}
|
662 |
|
663 |
+
// Draw the indicator line
|
664 |
+
ctx.save();
|
665 |
+
ctx.beginPath();
|
666 |
+
ctx.moveTo(groupX, lineY);
|
667 |
+
ctx.lineTo(groupX, bubbleTop);
|
668 |
+
ctx.lineCap = "square";
|
669 |
+
ctx.lineWidth = 2;
|
670 |
+
ctx.strokeStyle = color;
|
671 |
+
ctx.stroke();
|
672 |
+
ctx.restore();
|
673 |
|
674 |
+
// Draw the bubble
|
675 |
+
ctx.save();
|
676 |
+
ctx.beginPath();
|
677 |
+
ctx.arc(groupX, bubbleRadius + bubbleTopOffset, bubbleRadius, 0, 2 * Math.PI);
|
678 |
+
ctx.fillStyle = bgColor;
|
679 |
+
ctx.fill();
|
680 |
+
ctx.lineWidth = 2;
|
681 |
+
ctx.strokeStyle = color;
|
682 |
+
ctx.stroke();
|
683 |
+
ctx.restore();
|
684 |
|
685 |
+
// Draw the feed count
|
686 |
+
ctx.save();
|
687 |
+
ctx.font = "12px sans-serif";
|
688 |
+
ctx.textAlign = "center";
|
689 |
+
ctx.textBaseline = "middle";
|
690 |
+
ctx.fillStyle = textColor;
|
691 |
+
ctx.fillText(count, groupX, bubbleRadius + bubbleTopOffset + 1);
|
692 |
+
ctx.restore();
|
693 |
+
};
|
694 |
|
695 |
+
// Stores groups to be drawn later, for a higher "z index"
|
696 |
+
var drawLater = {};
|
|
|
697 |
|
698 |
+
// Draw the groups
|
699 |
+
for (var timeStr in Store.groups) {
|
700 |
+
var group = Store.groups[timeStr];
|
701 |
|
702 |
+
// If no group is highlighted, draw normally
|
703 |
+
if (Table.highlighted === null) {
|
704 |
drawFn(group, timeStr);
|
705 |
+
|
706 |
+
continue;
|
707 |
}
|
708 |
|
709 |
+
// Check if the group contains the highlighted feed
|
710 |
+
var hasHighlightedFeed = group.find(function (feed) {
|
711 |
+
return feed.id === Table.highlighted;
|
712 |
+
});
|
713 |
+
|
714 |
+
// If so, draw it later
|
715 |
+
if (hasHighlightedFeed) {
|
716 |
+
drawLater[timeStr] = group;
|
717 |
+
|
718 |
+
continue;
|
719 |
}
|
720 |
+
|
721 |
+
// If not, draw it as blurred
|
722 |
+
drawFn(group, timeStr, false);
|
723 |
+
}
|
724 |
+
|
725 |
+
for (var timeStr in drawLater) {
|
726 |
+
drawFn(drawLater[timeStr], timeStr, true);
|
727 |
}
|
728 |
}
|
729 |
|
730 |
ctx.translate(0, 0);
|
731 |
},
|
|
|
|
|
|
|
|
|
732 |
};
|
733 |
|
734 |
+
|
735 |
/**
|
736 |
+
* Time related functions.
|
737 |
*/
|
738 |
+
var Time = {
|
739 |
+
create: function (h, m) {
|
740 |
+
return {
|
741 |
+
hours: h,
|
742 |
+
minutes: m
|
743 |
+
};
|
744 |
},
|
745 |
+
format: function (time) {
|
746 |
+
if (!time) {
|
747 |
return "";
|
748 |
}
|
749 |
|
750 |
+
var hours = time.hours < 10 ? "0" + time.hours : time.hours;
|
751 |
+
var minutes = time.minutes < 10 ? "0" + time.minutes : time.minutes;
|
752 |
|
753 |
return hours + ":" + minutes;
|
754 |
},
|
755 |
+
parse: function (str) {
|
756 |
+
var parts = str.split(':');
|
757 |
var hours = parseInt(parts[0]);
|
758 |
var mins = parseInt(parts[1]);
|
759 |
|
760 |
+
return Time.create(hours, mins);
|
761 |
},
|
762 |
+
toSeconds: function (time) {
|
763 |
+
return time.hours * 3600 + time.minutes * 60;
|
764 |
+
},
|
765 |
+
fromSeconds: function (seconds) {
|
766 |
+
var hours = Math.floor(seconds / 3600);
|
767 |
+
var minutes = (seconds - (hours * 3600)) / 60;
|
768 |
+
|
769 |
+
return Time.create(hours, minutes);
|
770 |
+
},
|
771 |
+
add: function (time1, time2, clamp) {
|
772 |
var newObj = {
|
773 |
+
hours: time1.hours + time2.hours,
|
774 |
+
minutes: time1.minutes + time2.minutes
|
775 |
};
|
776 |
|
777 |
+
// Add overflowing minutes to the hours
|
778 |
+
newObj.hours += Math.floor(newObj.minutes / 60);
|
779 |
+
// Clamp the minutes
|
780 |
newObj.minutes = newObj.minutes % 60;
|
781 |
|
782 |
+
// If clamping is on, clamp the hours to 24
|
783 |
+
if (clamp !== false) {
|
784 |
+
newObj.hours = newObj.hours % 24;
|
785 |
+
}
|
786 |
+
|
787 |
return newObj;
|
788 |
},
|
789 |
+
diff: function (time1, time2, clamp) {
|
790 |
+
return Time.add(time1, {
|
791 |
+
hours: -(time2.hours),
|
792 |
+
minutes: -(time2.minutes),
|
793 |
+
}, clamp);
|
794 |
+
},
|
795 |
+
compare(a, b) {
|
796 |
+
var an = Time.toSeconds(a);
|
797 |
+
var bn = Time.toSeconds(b);
|
798 |
|
799 |
if (an === bn) {
|
800 |
return 0;
|
801 |
}
|
802 |
|
803 |
return (an < bn) ? -1 : 1;
|
804 |
+
},
|
805 |
+
};
|
806 |
+
|
807 |
+
/**
|
808 |
+
* Utility functions.
|
809 |
+
*/
|
810 |
+
var Util = {
|
811 |
+
getIntervalName: function (interval) {
|
812 |
+
return Config.schedules[interval]
|
813 |
+
? Config.schedules[interval]['display']
|
814 |
+
: interval;
|
815 |
+
},
|
816 |
};
|
817 |
|
818 |
})(jQuery, WpraCronsTool);
|
js/src/components/BottomPanel.vue
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
<template>
|
2 |
-
<div class="wpra-bottom-panel">
|
3 |
-
<slot></slot>
|
4 |
-
</div>
|
5 |
-
</template>
|
6 |
-
|
7 |
-
<script>
|
8 |
-
export default {}
|
9 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/Button.js
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
export default {
|
2 |
-
props: {
|
3 |
-
loading: {
|
4 |
-
type: Boolean,
|
5 |
-
default: false,
|
6 |
-
}
|
7 |
-
},
|
8 |
-
render () {
|
9 |
-
return <button
|
10 |
-
disabled={this.loading}
|
11 |
-
class={{'button': true, 'loading-button': this.loading}}
|
12 |
-
>{ this.$slots.default }</button>
|
13 |
-
}
|
14 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/Expander.vue
DELETED
@@ -1,36 +0,0 @@
|
|
1 |
-
<template>
|
2 |
-
<div class="wpra-expander" :class="{'wpra-expander--expanded':isExpanded}">
|
3 |
-
<div class="wpra-expander__title" @click="isExpanded = !isExpanded">
|
4 |
-
{{ title }}
|
5 |
-
<span class="dashicons dashicons-arrow-down-alt2"></span>
|
6 |
-
</div>
|
7 |
-
<transition-expand>
|
8 |
-
<div v-if="isExpanded">
|
9 |
-
<div class="wpra-expander__content">
|
10 |
-
<slot></slot>
|
11 |
-
</div>
|
12 |
-
</div>
|
13 |
-
</transition-expand>
|
14 |
-
</div>
|
15 |
-
</template>
|
16 |
-
|
17 |
-
<script>
|
18 |
-
import TransitionExpand from './TransitionExpand'
|
19 |
-
|
20 |
-
export default {
|
21 |
-
data () {
|
22 |
-
return {
|
23 |
-
isExpanded: this.defaultExpanded
|
24 |
-
}
|
25 |
-
},
|
26 |
-
props: {
|
27 |
-
title: {},
|
28 |
-
defaultExpanded: {
|
29 |
-
value: false
|
30 |
-
}
|
31 |
-
},
|
32 |
-
components: {
|
33 |
-
TransitionExpand
|
34 |
-
}
|
35 |
-
}
|
36 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/Input.js
DELETED
@@ -1,100 +0,0 @@
|
|
1 |
-
import MediaInput from './MediaInput'
|
2 |
-
|
3 |
-
export default {
|
4 |
-
mixins: [
|
5 |
-
MediaInput
|
6 |
-
],
|
7 |
-
props: {
|
8 |
-
id: {
|
9 |
-
type: String,
|
10 |
-
default () {
|
11 |
-
return Math.random().toString(36).substr(0, 12)
|
12 |
-
}
|
13 |
-
},
|
14 |
-
label: {},
|
15 |
-
description: {},
|
16 |
-
after: {},
|
17 |
-
type: {},
|
18 |
-
value: {},
|
19 |
-
placeholder: {},
|
20 |
-
title: {},
|
21 |
-
inputDisabled: {},
|
22 |
-
options: {
|
23 |
-
default () {
|
24 |
-
return {}
|
25 |
-
}
|
26 |
-
},
|
27 |
-
},
|
28 |
-
methods: {
|
29 |
-
inputNode () {
|
30 |
-
if (this.type === 'media') {
|
31 |
-
return this.mediaNode()
|
32 |
-
}
|
33 |
-
|
34 |
-
if (this.type === 'checkbox') {
|
35 |
-
return <input type="checkbox"
|
36 |
-
id={this.id}
|
37 |
-
checked={!!this.value}
|
38 |
-
onChange={() => this.$emit('input', !this.value)}
|
39 |
-
placeholder={this.placeholder}
|
40 |
-
disabled={this.$attrs.disabled || this.inputDisabled}
|
41 |
-
{...{attrs: this.$attrs}}
|
42 |
-
/>
|
43 |
-
}
|
44 |
-
|
45 |
-
if (this.type !== 'select') {
|
46 |
-
return <input type={this.type}
|
47 |
-
value={this.value}
|
48 |
-
id={this.id}
|
49 |
-
onInput={(e) => this.$emit('input', e.target.value)}
|
50 |
-
placeholder={this.placeholder}
|
51 |
-
disabled={this.$attrs.disabled || this.inputDisabled}
|
52 |
-
{...{attrs: this.$attrs}}
|
53 |
-
/>
|
54 |
-
}
|
55 |
-
return this.selectNode()
|
56 |
-
},
|
57 |
-
|
58 |
-
selectNode () {
|
59 |
-
let options = Object.keys(this.options)
|
60 |
-
.map(key => <option value={key} selected={ this.value === key }>{ this.options[key] }</option>)
|
61 |
-
|
62 |
-
return <select
|
63 |
-
{...{attrs: this.$attrs}}
|
64 |
-
id={this.id}
|
65 |
-
disabled={this.$attrs.disabled || this.inputDisabled}
|
66 |
-
onChange={(e) => this.$emit('input', e.target.value)}
|
67 |
-
>{ options }</select>
|
68 |
-
},
|
69 |
-
},
|
70 |
-
render () {
|
71 |
-
let directives = []
|
72 |
-
|
73 |
-
if (this.title) {
|
74 |
-
directives.push({
|
75 |
-
name: 'tippy',
|
76 |
-
})
|
77 |
-
}
|
78 |
-
|
79 |
-
return <div class={{'form-input': true, 'form-input--disabled': this.$attrs.disabled || false}}>
|
80 |
-
{ this.label ? (
|
81 |
-
<label class="form-input__label" for={this.id}>
|
82 |
-
<div>
|
83 |
-
{this.label}
|
84 |
-
{
|
85 |
-
this.title ? (
|
86 |
-
<div class="form-input__tip" {...{directives}} title={this.title}>
|
87 |
-
<span class="dashicons dashicons-editor-help"/>
|
88 |
-
</div>
|
89 |
-
) : null
|
90 |
-
}
|
91 |
-
</div>
|
92 |
-
{this.description ? <div class="form-input__label-description" {...{domProps: {innerHTML: this.description}}}/> : ''}
|
93 |
-
</label>
|
94 |
-
) : null }
|
95 |
-
<div class="form-input__field">
|
96 |
-
{ this.inputNode() }{ this.after }
|
97 |
-
</div>
|
98 |
-
</div>
|
99 |
-
}
|
100 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/Layout.js
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
export default {
|
2 |
-
render () {
|
3 |
-
return (
|
4 |
-
<div id="post-body">
|
5 |
-
{
|
6 |
-
this.$slots.default
|
7 |
-
}
|
8 |
-
</div>
|
9 |
-
)
|
10 |
-
}
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/Main.js
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
export default {
|
2 |
-
render () {
|
3 |
-
return (
|
4 |
-
<div id="postbox-container-2" class="postbox-container">
|
5 |
-
{
|
6 |
-
this.$slots.default
|
7 |
-
}
|
8 |
-
</div>
|
9 |
-
)
|
10 |
-
}
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/MediaInput.js
DELETED
@@ -1,96 +0,0 @@
|
|
1 |
-
let imageFrame = null
|
2 |
-
|
3 |
-
/**
|
4 |
-
* @see https://core.trac.wordpress.org/browser/tags/5.1.1/src/js/_enqueues/wp/media?order=name
|
5 |
-
*
|
6 |
-
* @var {{media: Function}} wp
|
7 |
-
*
|
8 |
-
* @property {{}} value
|
9 |
-
*/
|
10 |
-
export default {
|
11 |
-
props: {
|
12 |
-
mediaType: {
|
13 |
-
type: String,
|
14 |
-
default: 'image'
|
15 |
-
},
|
16 |
-
mediaTitle: {
|
17 |
-
type: String,
|
18 |
-
default: 'Select Media'
|
19 |
-
},
|
20 |
-
/**
|
21 |
-
* Property to use as a value for the media. Can be `id` or `url`.
|
22 |
-
*
|
23 |
-
* @property {string} mediaValueProperty
|
24 |
-
*/
|
25 |
-
mediaValueProperty: {
|
26 |
-
type: String,
|
27 |
-
default: 'id',
|
28 |
-
},
|
29 |
-
},
|
30 |
-
methods: {
|
31 |
-
mediaNode () {
|
32 |
-
this.assertMediaLoaded()
|
33 |
-
|
34 |
-
return <div>
|
35 |
-
<input type="text" value={this.value}/>
|
36 |
-
<button class="button" onClick={this.openFrame}>Choose image</button>
|
37 |
-
</div>
|
38 |
-
},
|
39 |
-
|
40 |
-
openFrame () {
|
41 |
-
if (!imageFrame) {
|
42 |
-
imageFrame = this.createFrame()
|
43 |
-
}
|
44 |
-
imageFrame.open()
|
45 |
-
},
|
46 |
-
|
47 |
-
createFrame () {
|
48 |
-
imageFrame = wp.media({
|
49 |
-
title: this.mediaTitle,
|
50 |
-
multiple: false,
|
51 |
-
library: {
|
52 |
-
type: this.mediaType,
|
53 |
-
}
|
54 |
-
})
|
55 |
-
|
56 |
-
imageFrame.on('close', () => {
|
57 |
-
const selection = imageFrame.state().get('selection')
|
58 |
-
let selectedAttachment = null
|
59 |
-
selection.each((attachment) => {
|
60 |
-
console.info({attachment})
|
61 |
-
selectedAttachment = attachment
|
62 |
-
})
|
63 |
-
if (!selectedAttachment || !selectedAttachment.id) {
|
64 |
-
return
|
65 |
-
}
|
66 |
-
this.$emit('input', ({
|
67 |
-
id: selectedAttachment.id,
|
68 |
-
url: selectedAttachment.attributes.url
|
69 |
-
})[this.mediaValueProperty])
|
70 |
-
})
|
71 |
-
|
72 |
-
imageFrame.on('open', () => {
|
73 |
-
const selection = imageFrame.state().get('selection')
|
74 |
-
|
75 |
-
if (this.mediaValueProperty === 'id' && this.value) {
|
76 |
-
const attachment = wp.media.attachment(this.value)
|
77 |
-
attachment.fetch()
|
78 |
-
selection.add(attachment ? [attachment] : [])
|
79 |
-
}
|
80 |
-
})
|
81 |
-
|
82 |
-
return imageFrame
|
83 |
-
},
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Check whether wp.media is loaded. If not - throw an error.
|
87 |
-
*
|
88 |
-
* @throws Error When wp.media is not loaded.
|
89 |
-
*/
|
90 |
-
assertMediaLoaded () {
|
91 |
-
if (!window.wp.media) {
|
92 |
-
throw Error('[MediaInput] wp.media dependency is not loaded')
|
93 |
-
}
|
94 |
-
}
|
95 |
-
},
|
96 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/Modal.vue
DELETED
@@ -1,114 +0,0 @@
|
|
1 |
-
<template>
|
2 |
-
<transition name="modal-transition">
|
3 |
-
<div class="modal" v-if="active" @click.self="$emit('close')">
|
4 |
-
<div :class="['modal__body', this.modalBodyClass]">
|
5 |
-
<div class="modal__header" :class="headerClass">
|
6 |
-
<slot name="header"></slot>
|
7 |
-
</div>
|
8 |
-
<div class="modal__content">
|
9 |
-
<slot name="body"></slot>
|
10 |
-
</div>
|
11 |
-
<div class="modal__footer">
|
12 |
-
<slot name="footer"></slot>
|
13 |
-
</div>
|
14 |
-
</div>
|
15 |
-
</div>
|
16 |
-
</transition>
|
17 |
-
</template>
|
18 |
-
|
19 |
-
<script>
|
20 |
-
/**
|
21 |
-
* Abstract dialog component, solid foundation for
|
22 |
-
* any modals and dialogs that opened over the rest page content.
|
23 |
-
*
|
24 |
-
* @param Vue
|
25 |
-
*/
|
26 |
-
export default {
|
27 |
-
props: {
|
28 |
-
/**
|
29 |
-
* Determines dialog visibility. This property is passed
|
30 |
-
* from outside and cannot be changed inside dialog.
|
31 |
-
* Dialog's consumer is responsible for manipulating dialog's visibility.
|
32 |
-
*
|
33 |
-
* @property {bool}
|
34 |
-
*/
|
35 |
-
active: {
|
36 |
-
type: Boolean
|
37 |
-
},
|
38 |
-
|
39 |
-
/**
|
40 |
-
* Modal title
|
41 |
-
*
|
42 |
-
* @property {string}
|
43 |
-
*/
|
44 |
-
title: {
|
45 |
-
type: String
|
46 |
-
},
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Additional class modifier for modal customization.
|
50 |
-
*
|
51 |
-
* @property {string}
|
52 |
-
*/
|
53 |
-
modalBodyClass: {
|
54 |
-
type: String,
|
55 |
-
default: ''
|
56 |
-
},
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Additional classes for modal header.
|
60 |
-
*
|
61 |
-
* @property {object|Array}
|
62 |
-
*/
|
63 |
-
headerClass: {
|
64 |
-
default () {
|
65 |
-
return {}
|
66 |
-
}
|
67 |
-
},
|
68 |
-
|
69 |
-
/**
|
70 |
-
* Class that applies to the body and used
|
71 |
-
* to prevent body's scroll catch, so long dialog can be scrolled
|
72 |
-
* without interfering with body scroll.
|
73 |
-
*
|
74 |
-
* @property {string}
|
75 |
-
*/
|
76 |
-
dialogOpenedClass: {
|
77 |
-
type: String,
|
78 |
-
default: 'modal-opened'
|
79 |
-
}
|
80 |
-
},
|
81 |
-
|
82 |
-
watch: {
|
83 |
-
/**
|
84 |
-
* Watch for "active" property change and emit corresponding
|
85 |
-
* event when it changed.
|
86 |
-
*
|
87 |
-
* @param isDialogActive {bool}
|
88 |
-
*/
|
89 |
-
active (isDialogActive) {
|
90 |
-
this.$emit(isDialogActive ? 'open' : 'close')
|
91 |
-
}
|
92 |
-
},
|
93 |
-
|
94 |
-
mounted () {
|
95 |
-
/*
|
96 |
-
* Add body "frozen" class to the body when dialog is opened.
|
97 |
-
*/
|
98 |
-
this.$on('open', () => {
|
99 |
-
document.querySelector('body')
|
100 |
-
.classList
|
101 |
-
.add(this.dialogOpenedClass);
|
102 |
-
});
|
103 |
-
|
104 |
-
/*
|
105 |
-
* Remove body "frozen" class from the body when dialog is closed.
|
106 |
-
*/
|
107 |
-
this.$on('close', () => {
|
108 |
-
document.querySelector('body')
|
109 |
-
.classList
|
110 |
-
.remove(this.dialogOpenedClass);
|
111 |
-
});
|
112 |
-
},
|
113 |
-
}
|
114 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/NoticeBlock.js
DELETED
@@ -1,143 +0,0 @@
|
|
1 |
-
import Button from './Button'
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Big notice block that is used to provide some information for users.
|
5 |
-
* Also can display "learn more" button to allow users to read more about
|
6 |
-
* the announce.
|
7 |
-
*/
|
8 |
-
export default {
|
9 |
-
data () {
|
10 |
-
return {
|
11 |
-
shouldBeVisible: true,
|
12 |
-
}
|
13 |
-
},
|
14 |
-
|
15 |
-
props: {
|
16 |
-
/**
|
17 |
-
* Unique identifier of the notice block.
|
18 |
-
*
|
19 |
-
* @property {string}
|
20 |
-
*/
|
21 |
-
id: {
|
22 |
-
type: String,
|
23 |
-
required: true,
|
24 |
-
},
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Visible title on top of the block.
|
28 |
-
*
|
29 |
-
* @property {string}
|
30 |
-
*/
|
31 |
-
title: {
|
32 |
-
type: String,
|
33 |
-
},
|
34 |
-
|
35 |
-
/**
|
36 |
-
* The notice's block body. Can be HTML with text formatting, links and so on.
|
37 |
-
*
|
38 |
-
* @property {string}
|
39 |
-
*/
|
40 |
-
body: {
|
41 |
-
type: String,
|
42 |
-
},
|
43 |
-
|
44 |
-
/**
|
45 |
-
* The link to a "learn more" article. Will be opened in a new tab.
|
46 |
-
* If value is empty, "learn more" button won't be rendered.
|
47 |
-
*
|
48 |
-
* @property {string|boolean}
|
49 |
-
*/
|
50 |
-
learnMore: {
|
51 |
-
default: false,
|
52 |
-
},
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Text on the button that will hide the message.
|
56 |
-
*
|
57 |
-
* @property {string}
|
58 |
-
*/
|
59 |
-
okayText: {
|
60 |
-
type: String,
|
61 |
-
default: 'Got it'
|
62 |
-
},
|
63 |
-
|
64 |
-
/**
|
65 |
-
* Text on the button that will open a "learn more" article.
|
66 |
-
*
|
67 |
-
* @property {string}
|
68 |
-
*/
|
69 |
-
learnMoreText: {
|
70 |
-
type: String,
|
71 |
-
default: 'Learn more'
|
72 |
-
},
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Whether the notice block is visible in UI.
|
76 |
-
*
|
77 |
-
* @property {boolean}
|
78 |
-
*/
|
79 |
-
visible: {
|
80 |
-
type: Boolean,
|
81 |
-
default: true,
|
82 |
-
},
|
83 |
-
},
|
84 |
-
|
85 |
-
computed: {
|
86 |
-
isVisible () {
|
87 |
-
return this.visible
|
88 |
-
&& this.shouldBeVisible
|
89 |
-
&& JSON.parse(localStorage.getItem(this.getBlockKey()) || 'true')
|
90 |
-
}
|
91 |
-
},
|
92 |
-
|
93 |
-
methods: {
|
94 |
-
/**
|
95 |
-
* Hide the block.
|
96 |
-
*/
|
97 |
-
onOkayClick () {
|
98 |
-
this.shouldBeVisible = false
|
99 |
-
localStorage.setItem(this.getBlockKey(), JSON.stringify(false))
|
100 |
-
},
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Open learn more link in a new tab when user clicks on the "learn more" button.
|
104 |
-
*/
|
105 |
-
onLearnMoreClick () {
|
106 |
-
window.open(this.learnMore, '_blank').focus()
|
107 |
-
},
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Notice's block key in local storage.
|
111 |
-
*
|
112 |
-
* @return {string}
|
113 |
-
*/
|
114 |
-
getBlockKey () {
|
115 |
-
return `wpra-${this.id}-visible`
|
116 |
-
}
|
117 |
-
},
|
118 |
-
|
119 |
-
render () {
|
120 |
-
/*
|
121 |
-
* Template is not rendered when it was hidden by user, or server.
|
122 |
-
*/
|
123 |
-
if (!this.isVisible) {
|
124 |
-
return null
|
125 |
-
}
|
126 |
-
|
127 |
-
let learnMoreButton = this.learnMore ?
|
128 |
-
<Button class="button-clear" nativeOnClick={this.onLearnMoreClick}>
|
129 |
-
{this.learnMoreText} <span class="dashicons dashicons-external"/>
|
130 |
-
</Button> : null
|
131 |
-
|
132 |
-
return (
|
133 |
-
<div class="wpra-notice-block">
|
134 |
-
<div class="wpra-notice-block__title">{this.title}</div>
|
135 |
-
<div class="wpra-notice-block__body" {...{domProps: {innerHTML: this.body}}}/>
|
136 |
-
<div class="wpra-notice-block__buttons">
|
137 |
-
<Button class="brand button-primary" nativeOnClick={this.onOkayClick}>{this.okayText}</Button>
|
138 |
-
{learnMoreButton}
|
139 |
-
</div>
|
140 |
-
</div>
|
141 |
-
)
|
142 |
-
}
|
143 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/Postbox.vue
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
<script>
|
2 |
-
export default {
|
3 |
-
inject: ['hooks'],
|
4 |
-
data () {
|
5 |
-
return {
|
6 |
-
expanded: true,
|
7 |
-
}
|
8 |
-
},
|
9 |
-
props: {
|
10 |
-
title: {},
|
11 |
-
id: {},
|
12 |
-
submit: {
|
13 |
-
type: Boolean,
|
14 |
-
default: false,
|
15 |
-
},
|
16 |
-
context: {},
|
17 |
-
},
|
18 |
-
methods: {
|
19 |
-
toggle () {
|
20 |
-
this.expanded = !this.expanded
|
21 |
-
}
|
22 |
-
},
|
23 |
-
render (h) {
|
24 |
-
return this.hooks.apply('postbox-' + this.id, this.context || this, (
|
25 |
-
<div class="postbox wpra-postbox" id={ this.submit ? 'submitdiv' : ''}>
|
26 |
-
<button type="button" class="handlediv" aria-expanded="true" onClick={this.toggle}>
|
27 |
-
<span class="screen-reader-text">Toggle panel: { this.title }</span>
|
28 |
-
<span class="toggle-indicator" aria-hidden="true"></span>
|
29 |
-
</button>
|
30 |
-
<h2 class="hndle ui-sortable-handle"
|
31 |
-
onClick={this.toggle}
|
32 |
-
><span>{ this.title }</span></h2>
|
33 |
-
<div class="inside">
|
34 |
-
{
|
35 |
-
this.hooks.apply('postbox-content-' + this.id, this.context || this, [
|
36 |
-
this.$slots.default
|
37 |
-
], {h})
|
38 |
-
}
|
39 |
-
</div>
|
40 |
-
</div>
|
41 |
-
), {h})
|
42 |
-
}
|
43 |
-
}
|
44 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/RouteLink.js
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
export default {
|
2 |
-
props: {
|
3 |
-
path: {},
|
4 |
-
gate: {}
|
5 |
-
},
|
6 |
-
inject: [
|
7 |
-
'router'
|
8 |
-
],
|
9 |
-
methods: {
|
10 |
-
getPath () {
|
11 |
-
return this.router.buildRoute(this.path)
|
12 |
-
},
|
13 |
-
navigate (e) {
|
14 |
-
const allowed = !this.gate || this.gate()
|
15 |
-
|
16 |
-
e.preventDefault()
|
17 |
-
|
18 |
-
if (allowed) {
|
19 |
-
this.router.navigate(this.path)
|
20 |
-
}
|
21 |
-
}
|
22 |
-
},
|
23 |
-
render () {
|
24 |
-
const path = this.getPath()
|
25 |
-
return <a href={path} onClick={this.navigate}>{ this.$slots.default }</a>
|
26 |
-
}
|
27 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/RouterApp.js
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
export default function ({ store, router }) {
|
2 |
-
return {
|
3 |
-
store,
|
4 |
-
data () {
|
5 |
-
return {
|
6 |
-
afterNavigate: () => {},
|
7 |
-
params: {},
|
8 |
-
currentRoute: null,
|
9 |
-
}
|
10 |
-
},
|
11 |
-
created () {
|
12 |
-
router.setApp(this)
|
13 |
-
this.currentRoute = router.parseLocation(window.location)
|
14 |
-
this.navigated()
|
15 |
-
},
|
16 |
-
mounted () {
|
17 |
-
window.addEventListener('popstate', () => {
|
18 |
-
this.currentRoute = router.parseLocation(window.location)
|
19 |
-
this.navigated()
|
20 |
-
})
|
21 |
-
},
|
22 |
-
methods: {
|
23 |
-
ViewComponent () {
|
24 |
-
const matchingView = router.findRoute(this.currentRoute)
|
25 |
-
return matchingView.component
|
26 |
-
},
|
27 |
-
navigated () {
|
28 |
-
this.$nextTick(() => {
|
29 |
-
const main = this.$refs.main
|
30 |
-
if (!main || !main.navigated) {
|
31 |
-
return
|
32 |
-
}
|
33 |
-
main.navigated({
|
34 |
-
route: router.findRoute(this.currentRoute),
|
35 |
-
})
|
36 |
-
})
|
37 |
-
}
|
38 |
-
},
|
39 |
-
render (h) {
|
40 |
-
const content = h(this.ViewComponent(), {
|
41 |
-
ref: 'main'
|
42 |
-
})
|
43 |
-
this.afterNavigate()
|
44 |
-
return content
|
45 |
-
}
|
46 |
-
}
|
47 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/SerializedForm.vue
DELETED
@@ -1,89 +0,0 @@
|
|
1 |
-
<template>
|
2 |
-
<div class="form">
|
3 |
-
<div class="form-group"
|
4 |
-
v-for="datum of form"
|
5 |
-
v-if="satisfiesCondition(datum)"
|
6 |
-
>
|
7 |
-
<template v-if="datum.type === 'radio'">
|
8 |
-
<label :for="datum.name" v-html="datum.label" v-if="datum.label"></label>
|
9 |
-
<div class="form-check" v-for="(radio, $i) of datum.options">
|
10 |
-
<input type="radio"
|
11 |
-
:name="datum.name"
|
12 |
-
:id="datum.name + '_' + $i"
|
13 |
-
:value="radio.value"
|
14 |
-
v-model="model[datum.name]"
|
15 |
-
>
|
16 |
-
<label :for="datum.name + '_' + $i">
|
17 |
-
{{ radio.label || radio.value }}
|
18 |
-
</label>
|
19 |
-
</div>
|
20 |
-
</template>
|
21 |
-
|
22 |
-
<template v-if="datum.type === 'textarea'">
|
23 |
-
<label :for="datum.name" v-html="datum.label" v-if="datum.label"></label>
|
24 |
-
<textarea v-model="model[datum.name]" :id="datum.name"></textarea>
|
25 |
-
</template>
|
26 |
-
|
27 |
-
<template v-if="datum.type === 'content'">
|
28 |
-
<div :class="datum.className">
|
29 |
-
<p v-html="datum.label"></p>
|
30 |
-
</div>
|
31 |
-
</template>
|
32 |
-
</div>
|
33 |
-
</div>
|
34 |
-
</template>
|
35 |
-
|
36 |
-
<script>
|
37 |
-
export default {
|
38 |
-
props: {
|
39 |
-
/*
|
40 |
-
* Form, described by object containing information
|
41 |
-
* about each field.
|
42 |
-
*/
|
43 |
-
form: {
|
44 |
-
type: Array,
|
45 |
-
},
|
46 |
-
|
47 |
-
/*
|
48 |
-
* Form model.
|
49 |
-
*/
|
50 |
-
value: {
|
51 |
-
type: Object,
|
52 |
-
}
|
53 |
-
},
|
54 |
-
computed: {
|
55 |
-
model: {
|
56 |
-
get () {
|
57 |
-
return this.value
|
58 |
-
},
|
59 |
-
set (value) {
|
60 |
-
this.$emit('input', value)
|
61 |
-
}
|
62 |
-
}
|
63 |
-
},
|
64 |
-
methods: {
|
65 |
-
satisfiesCondition (datum) {
|
66 |
-
if (!datum.condition) {
|
67 |
-
return true
|
68 |
-
}
|
69 |
-
let compareFunction = this.getConditionFunction(datum.condition.operator);
|
70 |
-
if (!compareFunction) {
|
71 |
-
return false
|
72 |
-
}
|
73 |
-
return compareFunction(datum.condition.field, datum.condition.value)
|
74 |
-
},
|
75 |
-
|
76 |
-
getConditionFunction (operator) {
|
77 |
-
const fns = {
|
78 |
-
'=': (field, value) => {
|
79 |
-
return this.model[field] === value
|
80 |
-
}
|
81 |
-
}
|
82 |
-
if (!fns[operator]) {
|
83 |
-
return null
|
84 |
-
}
|
85 |
-
return fns[operator]
|
86 |
-
}
|
87 |
-
}
|
88 |
-
}
|
89 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/Sidebar.js
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
export default {
|
2 |
-
render () {
|
3 |
-
return (
|
4 |
-
<div id="postbox-container-1" class="wpra-postbox-container postbox-container">
|
5 |
-
{
|
6 |
-
this.$slots.default
|
7 |
-
}
|
8 |
-
</div>
|
9 |
-
)
|
10 |
-
}
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/TransitionExpand.vue
DELETED
@@ -1,66 +0,0 @@
|
|
1 |
-
<script>
|
2 |
-
export default {
|
3 |
-
name: `TransitionExpand`,
|
4 |
-
functional: true,
|
5 |
-
render (createElement, context) {
|
6 |
-
const data = {
|
7 |
-
props: {
|
8 |
-
name: `expand`,
|
9 |
-
},
|
10 |
-
on: {
|
11 |
-
afterEnter (element) {
|
12 |
-
// eslint-disable-next-line no-param-reassign
|
13 |
-
element.style.height = `auto`
|
14 |
-
},
|
15 |
-
enter (element) {
|
16 |
-
const {width} = getComputedStyle(element)
|
17 |
-
|
18 |
-
/* eslint-disable no-param-reassign */
|
19 |
-
element.style.width = width
|
20 |
-
element.style.position = `absolute`
|
21 |
-
element.style.visibility = `hidden`
|
22 |
-
element.style.height = `auto`
|
23 |
-
/* eslint-enable */
|
24 |
-
|
25 |
-
const {height} = getComputedStyle(element)
|
26 |
-
|
27 |
-
/* eslint-disable no-param-reassign */
|
28 |
-
element.style.width = null
|
29 |
-
element.style.position = null
|
30 |
-
element.style.visibility = null
|
31 |
-
element.style.height = 0
|
32 |
-
/* eslint-enable */
|
33 |
-
|
34 |
-
// Force repaint to make sure the
|
35 |
-
// animation is triggered correctly.
|
36 |
-
// eslint-disable-next-line no-unused-expressions
|
37 |
-
getComputedStyle(element).height
|
38 |
-
|
39 |
-
setTimeout(() => {
|
40 |
-
// eslint-disable-next-line no-param-reassign
|
41 |
-
element.style.height = height
|
42 |
-
})
|
43 |
-
},
|
44 |
-
leave (element) {
|
45 |
-
const {height} = getComputedStyle(element)
|
46 |
-
|
47 |
-
// eslint-disable-next-line no-param-reassign
|
48 |
-
element.style.height = height
|
49 |
-
|
50 |
-
// Force repaint to make sure the
|
51 |
-
// animation is triggered correctly.
|
52 |
-
// eslint-disable-next-line no-unused-expressions
|
53 |
-
getComputedStyle(element).height
|
54 |
-
|
55 |
-
setTimeout(() => {
|
56 |
-
// eslint-disable-next-line no-param-reassign
|
57 |
-
element.style.height = 0
|
58 |
-
})
|
59 |
-
},
|
60 |
-
},
|
61 |
-
}
|
62 |
-
|
63 |
-
return createElement(`transition`, data, context.children)
|
64 |
-
},
|
65 |
-
}
|
66 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/components/index.js
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
import Input from './Input'
|
2 |
-
import NoticeBlock from './NoticeBlock'
|
3 |
-
import Postbox from './Postbox'
|
4 |
-
import RouteLink from './RouteLink'
|
5 |
-
import TransitionExpand from './TransitionExpand'
|
6 |
-
import Button from './Button'
|
7 |
-
|
8 |
-
export default {
|
9 |
-
Input,
|
10 |
-
NoticeBlock,
|
11 |
-
Postbox,
|
12 |
-
RouteLink,
|
13 |
-
TransitionExpand,
|
14 |
-
Button,
|
15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/libs/NotificationCenter.js
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Library agnostic wrapper for notifications.
|
3 |
-
*
|
4 |
-
* @since 4.14
|
5 |
-
*
|
6 |
-
* @class NotificationsCenter
|
7 |
-
*/
|
8 |
-
export default class NotificationsCenter {
|
9 |
-
/**
|
10 |
-
* NotificationsCenter constructor.
|
11 |
-
*
|
12 |
-
* @since 4.14
|
13 |
-
*
|
14 |
-
* @param {Function} show Function implementation for displaying messages.
|
15 |
-
* @param {Function} error Function implementation for displaying errors.
|
16 |
-
*/
|
17 |
-
constructor (show, error) {
|
18 |
-
this.showMethod = show
|
19 |
-
this.errorMethod = error
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Display informational message.
|
24 |
-
*
|
25 |
-
* @since 4.14
|
26 |
-
*
|
27 |
-
* @param {string} msg Message for displaying
|
28 |
-
* @param {object} options Options for notification.
|
29 |
-
*/
|
30 |
-
show (msg, options = {}) {
|
31 |
-
this.showMethod(msg, options)
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Display error message.
|
36 |
-
*
|
37 |
-
* @since 4.14
|
38 |
-
*
|
39 |
-
* @param {string} msg Message for displaying
|
40 |
-
* @param {object} options Options for notification.
|
41 |
-
*/
|
42 |
-
error (msg, options = {}) {
|
43 |
-
this.errorMethod(msg, options)
|
44 |
-
}
|
45 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/libs/Router.js
DELETED
@@ -1,122 +0,0 @@
|
|
1 |
-
const getJsonFromUrl = (url) => {
|
2 |
-
if (!url) url = location.href
|
3 |
-
var question = url.indexOf('?')
|
4 |
-
var hash = url.indexOf('#')
|
5 |
-
if (hash == -1 && question == -1) return {}
|
6 |
-
if (hash == -1) hash = url.length
|
7 |
-
var query = question == -1 || hash == question + 1 ? url.substring(hash) :
|
8 |
-
url.substring(question + 1, hash)
|
9 |
-
var result = {}
|
10 |
-
query.split('&').forEach(function (part) {
|
11 |
-
if (!part) return
|
12 |
-
part = part.split('+').join(' ') // replace every + with space, regexp-free version
|
13 |
-
var eq = part.indexOf('=')
|
14 |
-
var key = eq > -1 ? part.substr(0, eq) : part
|
15 |
-
var val = eq > -1 ? decodeURIComponent(part.substr(eq + 1)) : ''
|
16 |
-
var from = key.indexOf('[')
|
17 |
-
if (from == -1) result[decodeURIComponent(key)] = val
|
18 |
-
else {
|
19 |
-
var to = key.indexOf(']', from)
|
20 |
-
var index = decodeURIComponent(key.substring(from + 1, to))
|
21 |
-
key = decodeURIComponent(key.substring(0, from))
|
22 |
-
if (!result[key]) result[key] = []
|
23 |
-
if (!index) result[key].push(val)
|
24 |
-
else result[key][index] = val
|
25 |
-
}
|
26 |
-
})
|
27 |
-
return result
|
28 |
-
}
|
29 |
-
|
30 |
-
export default class Router {
|
31 |
-
constructor (routes, options) {
|
32 |
-
this.routes = routes
|
33 |
-
this.options = options
|
34 |
-
this.baseParams = options.baseParams || ['post_type', 'page', 'action', 'id']
|
35 |
-
}
|
36 |
-
|
37 |
-
get params () {
|
38 |
-
return this.app ? this.app.params : {}
|
39 |
-
}
|
40 |
-
|
41 |
-
setApp (app) {
|
42 |
-
this.app = app
|
43 |
-
this.app.afterNavigate = this.options.afterNavigating || (() => {})
|
44 |
-
}
|
45 |
-
|
46 |
-
findRoute (location) {
|
47 |
-
return this.routes.find(({route}) => {
|
48 |
-
return location.indexOf(route) !== -1
|
49 |
-
})
|
50 |
-
}
|
51 |
-
|
52 |
-
updateParams (params) {
|
53 |
-
this.app.$set(this.app, 'params', params)
|
54 |
-
}
|
55 |
-
|
56 |
-
mergeParams (paramsPart) {
|
57 |
-
let currentParams = Object.keys(this.params).filter(key => {
|
58 |
-
return this.baseParams.indexOf(key) !== -1 || paramsPart.hasOwnProperty(key)
|
59 |
-
}).reduce((acc, key) => {
|
60 |
-
acc[key] = this.params[key]
|
61 |
-
return acc
|
62 |
-
}, {})
|
63 |
-
|
64 |
-
let params = Object.assign({}, currentParams, paramsPart)
|
65 |
-
|
66 |
-
this.updateParams(params)
|
67 |
-
|
68 |
-
window.history.pushState(
|
69 |
-
null,
|
70 |
-
null,
|
71 |
-
this.routeFromParams()
|
72 |
-
)
|
73 |
-
|
74 |
-
this.app.navigated()
|
75 |
-
}
|
76 |
-
|
77 |
-
routeFromParams () {
|
78 |
-
const hasParams = !!Object.keys(this.params).length
|
79 |
-
return location.pathname + (hasParams ? '?' + this.buildParams(this.params) : '')
|
80 |
-
}
|
81 |
-
|
82 |
-
buildRoute (route) {
|
83 |
-
if (route.name) {
|
84 |
-
let routeObject = this.routes.find(r => r.name === route.name)
|
85 |
-
if (!routeObject) {
|
86 |
-
return null
|
87 |
-
}
|
88 |
-
const routeStr = routeObject.route
|
89 |
-
const join = routeStr.indexOf('?') !== -1 ? '&' : '?'
|
90 |
-
|
91 |
-
return routeStr + (route.params ? join + this.buildParams(route.params ? route.params : {}) : '')
|
92 |
-
}
|
93 |
-
}
|
94 |
-
|
95 |
-
buildParams (params) {
|
96 |
-
return Object.keys(params).map(param => {
|
97 |
-
return `${param}=${params[param]}`
|
98 |
-
}).join('&')
|
99 |
-
}
|
100 |
-
|
101 |
-
parseLocation (location) {
|
102 |
-
this.updateParams(getJsonFromUrl(location.search))
|
103 |
-
console.info('ROUTE PARSE LOCATION PARAMS', getJsonFromUrl(location.search))
|
104 |
-
return location.pathname + location.search
|
105 |
-
}
|
106 |
-
|
107 |
-
navigate (route) {
|
108 |
-
if (this.app) {
|
109 |
-
this.app.currentRoute = this.buildRoute(route)
|
110 |
-
}
|
111 |
-
|
112 |
-
this.updateParams(Object.assign({}, route.params || {}, getJsonFromUrl(this.buildRoute(route))))
|
113 |
-
|
114 |
-
window.history.pushState(
|
115 |
-
null,
|
116 |
-
null,
|
117 |
-
this.buildRoute(route)
|
118 |
-
)
|
119 |
-
|
120 |
-
this.app.navigated()
|
121 |
-
}
|
122 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/mixins/DataChangesAware.js
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
import jsonClone from 'app/utils/jsonClone'
|
2 |
-
import equal from 'fast-deep-equal'
|
3 |
-
|
4 |
-
/**
|
5 |
-
* Mixing for functionality that allows to track down and revert changes made on
|
6 |
-
* the primary editing data model.
|
7 |
-
*
|
8 |
-
* `model` property on base object is required for using this mixin.
|
9 |
-
*/
|
10 |
-
export default {
|
11 |
-
data () {
|
12 |
-
return {
|
13 |
-
changes: {
|
14 |
-
model: {},
|
15 |
-
}
|
16 |
-
}
|
17 |
-
},
|
18 |
-
methods: {
|
19 |
-
/**
|
20 |
-
* Whether the model has been changed after last model "remembering".
|
21 |
-
*
|
22 |
-
* @return {boolean}
|
23 |
-
*/
|
24 |
-
isChanged () {
|
25 |
-
return !equal(this.model, this.changes.model)
|
26 |
-
},
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Remember current data model, but without any references to main model
|
30 |
-
* properties. It is important to clean any additional observers from object
|
31 |
-
* otherwise "memorized" model clone will be changed when model get changed.
|
32 |
-
*/
|
33 |
-
rememberModel () {
|
34 |
-
this.$set(this.changes, 'model', jsonClone(this.model))
|
35 |
-
},
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Cancel any changes on main model object.
|
39 |
-
*/
|
40 |
-
cancelChanges () {
|
41 |
-
if (!confirm('Are you sure you want to cancel your changes for this template? This action cannot be reverted and all changes made since your last save will be lost.')) {
|
42 |
-
return
|
43 |
-
}
|
44 |
-
this.$set(this, 'model', jsonClone(this.changes.model))
|
45 |
-
},
|
46 |
-
}
|
47 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/gutenberg-block/components/MultipleSelectControl.js
DELETED
@@ -1,85 +0,0 @@
|
|
1 |
-
import { Component } from '@wordpress/element'
|
2 |
-
import {
|
3 |
-
FormTokenField,
|
4 |
-
Placeholder,
|
5 |
-
Spinner,
|
6 |
-
BaseControl,
|
7 |
-
} from '@wordpress/components'
|
8 |
-
|
9 |
-
export default class MultipleSelectControl extends Component {
|
10 |
-
constructor (props) {
|
11 |
-
super(...arguments)
|
12 |
-
this.props = props
|
13 |
-
this.state = {
|
14 |
-
tokens: [],
|
15 |
-
loading: false,
|
16 |
-
items: []
|
17 |
-
}
|
18 |
-
}
|
19 |
-
|
20 |
-
componentDidMount () {
|
21 |
-
this.setState({loading: true})
|
22 |
-
|
23 |
-
jQuery.post(WPRA_BLOCK.ajax_url, {
|
24 |
-
action: 'wprss_fetch_items',
|
25 |
-
}, (data) => {
|
26 |
-
data = JSON.parse(data)
|
27 |
-
this.setState({
|
28 |
-
loading: false,
|
29 |
-
items: data.items
|
30 |
-
})
|
31 |
-
})
|
32 |
-
}
|
33 |
-
|
34 |
-
render () {
|
35 |
-
const setState = this.setState.bind(this)
|
36 |
-
const onChange = this.props.onChange
|
37 |
-
const items = this.state.items
|
38 |
-
|
39 |
-
if (this.state.loading) {
|
40 |
-
return <Placeholder>
|
41 |
-
<Spinner/>
|
42 |
-
</Placeholder>
|
43 |
-
}
|
44 |
-
return <BaseControl
|
45 |
-
help={this.props.help || ''}
|
46 |
-
>
|
47 |
-
<FormTokenField
|
48 |
-
label={this.props.label || ''}
|
49 |
-
placeholder={this.props.placeholder || ''}
|
50 |
-
value={this.props.value.map(function (id) {
|
51 |
-
return items.find(item => item.value === id)
|
52 |
-
}).filter(item => !!item)}
|
53 |
-
suggestions={this.state.items.map(function (item) {
|
54 |
-
item.toLocaleLowerCase = function () {
|
55 |
-
return item.title.toLocaleLowerCase()
|
56 |
-
}
|
57 |
-
item.toString = function () {
|
58 |
-
return item.title
|
59 |
-
}
|
60 |
-
return item
|
61 |
-
})}
|
62 |
-
displayTransform={function (item) {
|
63 |
-
if ('number' === typeof item) {
|
64 |
-
item = items.find(function (iteratedItem) {
|
65 |
-
return iteratedItem.value === item
|
66 |
-
})
|
67 |
-
}
|
68 |
-
if ('object' === typeof item) {
|
69 |
-
return item.title
|
70 |
-
}
|
71 |
-
return item
|
72 |
-
}}
|
73 |
-
saveTransform={function (token) {
|
74 |
-
return token
|
75 |
-
}}
|
76 |
-
onChange={function (tokens) {
|
77 |
-
setState({tokens})
|
78 |
-
onChange(tokens.map(function (item) {
|
79 |
-
return item.value
|
80 |
-
}))
|
81 |
-
}}
|
82 |
-
/>
|
83 |
-
</BaseControl>
|
84 |
-
}
|
85 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/gutenberg-block/index.js
DELETED
@@ -1,209 +0,0 @@
|
|
1 |
-
require('css/src/gutenberg-block/index.scss')
|
2 |
-
|
3 |
-
import { __ } from '@wordpress/i18n'
|
4 |
-
import { registerBlockType } from '@wordpress/blocks'
|
5 |
-
import { InspectorControls } from '@wordpress/editor'
|
6 |
-
import {
|
7 |
-
ToggleControl,
|
8 |
-
ServerSideRender,
|
9 |
-
TextControl,
|
10 |
-
TextareaControl,
|
11 |
-
BaseControl,
|
12 |
-
PanelBody,
|
13 |
-
PanelRow,
|
14 |
-
Spinner,
|
15 |
-
Placeholder,
|
16 |
-
FormTokenField,
|
17 |
-
SelectControl,
|
18 |
-
} from '@wordpress/components'
|
19 |
-
import { addFilter, applyFilters } from '@wordpress/hooks'
|
20 |
-
|
21 |
-
import MultipleSelectControl from './components/MultipleSelectControl'
|
22 |
-
|
23 |
-
// Default template is selected by default.
|
24 |
-
let selectedTemplate = WPRA_BLOCK.templates[0]
|
25 |
-
|
26 |
-
// Selected template field getter. Additional function can be passed.
|
27 |
-
const getTemplateDefault = (field, wrapper = val => val, def = 0) => selectedTemplate[field] ? wrapper(selectedTemplate[field]) : def
|
28 |
-
|
29 |
-
// Helps to not override attributes that selected manually by user.
|
30 |
-
let templateLock = {}
|
31 |
-
|
32 |
-
// Whether the block is loaded initial information.
|
33 |
-
let _isLoaded = false
|
34 |
-
|
35 |
-
registerBlockType('wpra-shortcode/wpra-shortcode', {
|
36 |
-
title: __('WP RSS Aggregator Feeds'),
|
37 |
-
description: __('Display feed items imported using WP RSS Aggregator.'),
|
38 |
-
icon: 'rss',
|
39 |
-
category: 'widgets',
|
40 |
-
|
41 |
-
// Remove to make block editable in HTML mode.
|
42 |
-
supportHTML: false,
|
43 |
-
|
44 |
-
attributes: applyFilters('wpra.gutenbergBlock.attributes', {
|
45 |
-
isAll: {
|
46 |
-
type: 'boolean',
|
47 |
-
default: true
|
48 |
-
},
|
49 |
-
template: {
|
50 |
-
type: 'string',
|
51 |
-
default: 'default'
|
52 |
-
},
|
53 |
-
pagination: {
|
54 |
-
type: 'boolean',
|
55 |
-
default: true
|
56 |
-
},
|
57 |
-
limit: {
|
58 |
-
type: 'number',
|
59 |
-
},
|
60 |
-
page: {
|
61 |
-
type: 'number',
|
62 |
-
},
|
63 |
-
exclude: {
|
64 |
-
type: 'string'
|
65 |
-
},
|
66 |
-
source: {
|
67 |
-
type: 'string'
|
68 |
-
}
|
69 |
-
}),
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Called when Gutenberg initially loads the block.
|
73 |
-
*/
|
74 |
-
edit: function (props) {
|
75 |
-
/*
|
76 |
-
* If block is not loaded, check whether we should block auto limit selection.
|
77 |
-
* It will be blocked if user selected entered limit value different from template's default.
|
78 |
-
*/
|
79 |
-
if (!_isLoaded && props.attributes.template) {
|
80 |
-
selectedTemplate = WPRA_BLOCK.templates.find(item => item.value === (props.attributes.template || 'default'))
|
81 |
-
|
82 |
-
if (parseInt(props.attributes.limit) !== getTemplateDefault('limit', parseInt)) {
|
83 |
-
templateLock['limit'] = true
|
84 |
-
}
|
85 |
-
|
86 |
-
if (!!props.attributes.pagination !== getTemplateDefault('pagination', v => !!v, false)) {
|
87 |
-
templateLock['pagination'] = true
|
88 |
-
}
|
89 |
-
|
90 |
-
_isLoaded = true
|
91 |
-
}
|
92 |
-
|
93 |
-
const etWarning = WPRA_BLOCK.is_et_active ? <p style={{fontStyle: 'italic'}}>
|
94 |
-
Excerpts & Thumbnails is incompatible with the WP RSS Aggregator Feeds block. <a
|
95 |
-
href="https://kb.wprssaggregator.com/article/459-using-excerpts-thumbnails-with-templates" target={'_blank'}>Learn
|
96 |
-
more</a>.
|
97 |
-
</p> : null
|
98 |
-
|
99 |
-
const panels = applyFilters('wpra.gutenbergBlock.panels', [
|
100 |
-
<PanelBody
|
101 |
-
title={__('Feed Sources')}
|
102 |
-
initialOpen={true}
|
103 |
-
>
|
104 |
-
{applyFilters('wpra.gutenbergBlock.panelItems', [
|
105 |
-
<ToggleControl
|
106 |
-
label={__('Show all Feed Sources ')}
|
107 |
-
checked={props.attributes.isAll}
|
108 |
-
onChange={(value) => {
|
109 |
-
props.setAttributes({isAll: value})
|
110 |
-
props.setAttributes({exclude: ''})
|
111 |
-
props.setAttributes({source: ''})
|
112 |
-
}}
|
113 |
-
/>,
|
114 |
-
<MultipleSelectControl
|
115 |
-
label={props.attributes.isAll ? __('Feed Sources to Exclude') : __('Feed Sources to Show')}
|
116 |
-
key={'select'}
|
117 |
-
help={__('Start typing to search feed sources by name')}
|
118 |
-
value={((props.attributes.isAll ? props.attributes.exclude : props.attributes.source) || '').split(',').map(item => parseInt(item))}
|
119 |
-
onChange={(selected) => {
|
120 |
-
selected = selected.join(',')
|
121 |
-
if (props.attributes.isAll) {
|
122 |
-
props.setAttributes({exclude: selected})
|
123 |
-
props.setAttributes({source: ''})
|
124 |
-
return
|
125 |
-
}
|
126 |
-
props.setAttributes({exclude: ''})
|
127 |
-
props.setAttributes({source: selected})
|
128 |
-
}}
|
129 |
-
/>
|
130 |
-
], 'feedSources', {props})}
|
131 |
-
</PanelBody>,
|
132 |
-
<PanelBody
|
133 |
-
title={__('Display Options')}
|
134 |
-
initialOpen={false}
|
135 |
-
>
|
136 |
-
{applyFilters('wpra.gutenbergBlock.panelItems', [
|
137 |
-
<SelectControl
|
138 |
-
label={__('Select Template')}
|
139 |
-
value={props.attributes.template}
|
140 |
-
onChange={(template) => {
|
141 |
-
selectedTemplate = WPRA_BLOCK.templates.find(item => item.value === template)
|
142 |
-
props.setAttributes({template: template || ''})
|
143 |
-
if (!templateLock['limit']) {
|
144 |
-
props.setAttributes({limit: getTemplateDefault('limit', parseInt, 15)})
|
145 |
-
}
|
146 |
-
if (!templateLock['pagination']) {
|
147 |
-
props.setAttributes({pagination: getTemplateDefault('pagination', v => !!v, false)})
|
148 |
-
}
|
149 |
-
}}
|
150 |
-
options={WPRA_BLOCK.templates}
|
151 |
-
/>,
|
152 |
-
<TextControl
|
153 |
-
label={__('Feed Limit')}
|
154 |
-
help={__('Number of feed items to display')}
|
155 |
-
placeholder={getTemplateDefault('limit', parseInt)}
|
156 |
-
type={'number'}
|
157 |
-
min={1}
|
158 |
-
value={props.attributes.limit || getTemplateDefault('limit', parseInt)}
|
159 |
-
onChange={(value) => {
|
160 |
-
templateLock['limit'] = true
|
161 |
-
props.setAttributes({limit: parseInt(value) || getTemplateDefault('limit', parseInt)})
|
162 |
-
}}
|
163 |
-
/>,
|
164 |
-
<ToggleControl
|
165 |
-
label={__('Show Pagination ')}
|
166 |
-
checked={props.attributes.pagination}
|
167 |
-
onChange={(value) => {
|
168 |
-
templateLock['pagination'] = true
|
169 |
-
props.setAttributes({pagination: value})
|
170 |
-
}}
|
171 |
-
/>,
|
172 |
-
<TextControl
|
173 |
-
label={__('Page')}
|
174 |
-
placeholder={__('1')}
|
175 |
-
type={'number'}
|
176 |
-
min={1}
|
177 |
-
value={props.attributes.page || 1}
|
178 |
-
onChange={(value) => {
|
179 |
-
props.setAttributes({page: parseInt(value) || 1})
|
180 |
-
}}
|
181 |
-
/>,
|
182 |
-
etWarning
|
183 |
-
], 'displayOptions', {props})}
|
184 |
-
</PanelBody>,
|
185 |
-
], {props})
|
186 |
-
|
187 |
-
console.warn({panels})
|
188 |
-
|
189 |
-
return <div>
|
190 |
-
<ServerSideRender
|
191 |
-
block={'wpra-shortcode/wpra-shortcode'}
|
192 |
-
attributes={props.attributes}
|
193 |
-
className={'wpra-gutenberg-block'}
|
194 |
-
/>
|
195 |
-
{applyFilters('wpra.gutenbergBlock.before', [], {props})}
|
196 |
-
<InspectorControls>
|
197 |
-
{panels}
|
198 |
-
</InspectorControls>
|
199 |
-
{applyFilters('wpra.gutenbergBlock.after', [], {props})}
|
200 |
-
</div>
|
201 |
-
},
|
202 |
-
|
203 |
-
/**
|
204 |
-
* Called when Gutenberg "saves" the block to post_content
|
205 |
-
*/
|
206 |
-
save: function (props) {
|
207 |
-
return null
|
208 |
-
}
|
209 |
-
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/intro/Wizard.vue
DELETED
@@ -1,440 +0,0 @@
|
|
1 |
-
<template>
|
2 |
-
<div class="wizard-holder animated fadeIn">
|
3 |
-
<div class="connect-steps">
|
4 |
-
<div class="step-items">
|
5 |
-
<div class="step-progress" :class="'step-progress--' + activeScreenIndex"></div>
|
6 |
-
<div class="step-item"
|
7 |
-
:class="{ 'step-item_active': active(screen.id), 'step-item_completed' : screen.completed() && index < activeScreenIndex }"
|
8 |
-
v-for="(screen, index) of screens"
|
9 |
-
>
|
10 |
-
<div class="step-item__status">
|
11 |
-
<span class="dashicons dashicons-yes" v-if="screen.completed() && index < activeScreenIndex"></span>
|
12 |
-
</div>
|
13 |
-
<div class="step-item__info">
|
14 |
-
<div class="step-item__title">{{ screen.title }}</div>
|
15 |
-
<div class="step-item__description" v-if="screen.description">{{ screen.description }}</div>
|
16 |
-
</div>
|
17 |
-
</div>
|
18 |
-
</div>
|
19 |
-
</div>
|
20 |
-
<div class="wizard">
|
21 |
-
<transition :name="transition" mode="out-in">
|
22 |
-
<div class="wizard_content" :key="activeScreen" v-if="active('feed')">
|
23 |
-
<div class="wizard_hello">
|
24 |
-
Enter your first RSS Feed URL
|
25 |
-
</div>
|
26 |
-
|
27 |
-
<form id="feedForm" @submit.prevent="next" class="wizard_info">
|
28 |
-
<div class="form-group">
|
29 |
-
<input type="text" placeholder="https://www.sourcedomain.com/feed/" v-model="form.feedSourceUrl"
|
30 |
-
class="wpra-feed-input"
|
31 |
-
>
|
32 |
-
<span class="dashicons dashicons-warning warning-icon" v-if="isFeedError"></span>
|
33 |
-
<a :href="validateLink" target="_blank" v-if="isFeedError">Validate feed</a>
|
34 |
-
</div>
|
35 |
-
</form>
|
36 |
-
|
37 |
-
<div class="wizard_error" v-if="isFeedError">
|
38 |
-
<p>This RSS feed URL appears to be invalid. Here are a couple of things you can try:</p>
|
39 |
-
<ol>
|
40 |
-
<li>Check whether the URL you entered is the correct one by trying one of the options when clicking on "How do I find an RSS feed URL?" below.</li>
|
41 |
-
<li>
|
42 |
-
Test out this other RSS feed URL to make sure the plugin is working correctly - https://www.wpmayor.com/feed/ - If it works, you may <a :href="supportUrl" target="_blank">contact us here</a> to help you with your source.
|
43 |
-
</li>
|
44 |
-
<li>Test the URL's validity by W3C standards, the standards we use in our plugins, using the “Validate feed” link above.</li>
|
45 |
-
</ol>
|
46 |
-
</div>
|
47 |
-
|
48 |
-
<expander title="How do I find an RSS feed URL?">
|
49 |
-
<p>WP RSS Aggregator fetches feed items through RSS feeds. Almost every website in the world provides an RSS feed. Here's how to find it:</p>
|
50 |
-
<p>Option 1: Add /feed to the website's homepage URL </p>
|
51 |
-
<p>Many sites have their RSS feed at the same URL. For instance, if the website's URL is www.thiswebsite.com, then the RSS feed could be at www.thiswebsite.com/feed.</p>
|
52 |
-
<p>Option 2: Look for the RSS share icon</p>
|
53 |
-
<p>Many websites have share icons on their pages for Facebook, Twitter and more. Many times, there will also be an orange RSS icon. Click on that to access the RSS feed URL.</p>
|
54 |
-
<p>Option 3: Browser RSS Auto-Discovery</p>
|
55 |
-
<p>Most browsers either include an RSS auto-discovery tool by default or they allow you to add extensions for it. Firefox shows an RSS icon above the website, in the address bar, which you can click on directly. Chrome offers extensions such as this one.</p>
|
56 |
-
<p>Option 4: Look at the Page Source</p>
|
57 |
-
<p>When on any page of the website you're looking to import feed items from, right click and press "View Page Source". Once the new window opens, use the “Find” feature (Ctrl-F on PC, Command-F on Mac) and search for " RSS". This should take you to a line that reads like this (or similar):</p>
|
58 |
-
<p>
|
59 |
-
<code>
|
60 |
-
<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="https://www.sourcedomain.com/feed/" />
|
61 |
-
</code>
|
62 |
-
</p>
|
63 |
-
<p>The RSS feed’s URL is found between the quotes after href=. In the above case, it would be https://www.sourcedomain.com/feed/.</p>
|
64 |
-
<p><a :href="knowledgeBaseUrl" target="_blank">Browse our Knowledge Base for more information.</a></p>
|
65 |
-
</expander>
|
66 |
-
</div>
|
67 |
-
|
68 |
-
<div class="wizard_content" :key="activeScreen" v-if="active('feedItems')">
|
69 |
-
<div class="wizard_hello">
|
70 |
-
Latest feed items from your selected feed source:
|
71 |
-
</div>
|
72 |
-
|
73 |
-
<div class="wpra-feed-items">
|
74 |
-
<div class="wpra-feed-item" v-for="item of feed.items">
|
75 |
-
<div class="wpra-feed-item__link">
|
76 |
-
<a :href="item.permalink" target="_blank">{{ item.title }}</a>
|
77 |
-
</div>
|
78 |
-
<div class="wpra-feed-item__info">
|
79 |
-
<template v-if="item.date || item.author">
|
80 |
-
<template v-if="item.date">
|
81 |
-
Published on {{ item.date }}
|
82 |
-
</template>
|
83 |
-
<template v-if="item.date && item.author">|</template>
|
84 |
-
<template v-if="item.author">
|
85 |
-
By {{ item.author }}
|
86 |
-
</template>
|
87 |
-
</template>
|
88 |
-
</div>
|
89 |
-
</div>
|
90 |
-
</div>
|
91 |
-
|
92 |
-
<div class="wrpa-shortcode">
|
93 |
-
<div class="wrpa-shortcode-preview">
|
94 |
-
<div class="wrpa-shortcode-label">
|
95 |
-
Create a draft page to preview these feed items on your site:
|
96 |
-
</div>
|
97 |
-
<a :href="previewUrl" target="_blank" class="button"
|
98 |
-
@click="preparePreview"
|
99 |
-
:class="{'button-primary': isPrepared, 'loading-button': isPreparing}"
|
100 |
-
>
|
101 |
-
{{ isPrepared ? 'Preview the Page' : 'Create Draft Page' }}
|
102 |
-
</a>
|
103 |
-
</div>
|
104 |
-
<div class="wrpa-shortcode-form" @click="copyToClipboard()">
|
105 |
-
<div class="wrpa-shortcode-label">
|
106 |
-
Copy the shortcode to any page or post on your site:
|
107 |
-
</div>
|
108 |
-
<input class="wrpa-shortcode-form__shortcode"
|
109 |
-
type="text"
|
110 |
-
readonly
|
111 |
-
value="[wp-rss-aggregator]"
|
112 |
-
ref="selected"
|
113 |
-
/>
|
114 |
-
<div class="wrpa-shortcode-form__button">
|
115 |
-
{{ isCopied ? 'Copied!' : 'Click to copy' }}
|
116 |
-
</div>
|
117 |
-
</div>
|
118 |
-
</div>
|
119 |
-
</div>
|
120 |
-
|
121 |
-
<div class="wizard_content" :key="activeScreen" v-if="active('finish')">
|
122 |
-
<div class="wizard_hello">
|
123 |
-
You’ve successfully set up your first feed source 😄
|
124 |
-
</div>
|
125 |
-
|
126 |
-
<div class="wpra-cols-title">
|
127 |
-
Do more with WP RSS Aggregator - here is what we did at CryptoHeadlines.com.
|
128 |
-
</div>
|
129 |
-
|
130 |
-
<div class="wpra-cols">
|
131 |
-
<div class="col">
|
132 |
-
<p>CryptoHeadlines.com displays latest news, Youtube videos, podcasts, jobs and more from the Cryptocurrency industry.</p>
|
133 |
-
<p>It uses Feed to Post to import articles, Youtube videos, and podcast links.</p>
|
134 |
-
<p>Full Text RSS Feeds is used to fetch the full content of the job listings to present more information to the potential applicant.</p>
|
135 |
-
<p>Keyword Filtering is used to filter out content that contains profanity and keywords or phrases deemed as inappropriate.</p>
|
136 |
-
<div style="margin-bottom: .5rem">
|
137 |
-
<a :href="addOnsUrl" class="button" target="_blank">
|
138 |
-
Browse Add-ons ⭐️
|
139 |
-
</a>
|
140 |
-
</div>
|
141 |
-
<div>
|
142 |
-
<a :href="supportUrl" target="_blank" style="font-size: .9em">Contact support for more information.</a>
|
143 |
-
</div>
|
144 |
-
</div>
|
145 |
-
<div class="col">
|
146 |
-
<img :src="demoImageUrl"
|
147 |
-
class="img wpra-demo-photo">
|
148 |
-
|
149 |
-
<div class="wpra-feedback">
|
150 |
-
<!--<div class="wpra-feedback__photo">-->
|
151 |
-
<!--<img src="https://www.wprssaggregator.com/wp-content/themes/wp_rss_theme/assets/images/review2.jpg">-->
|
152 |
-
<!--</div>-->
|
153 |
-
<div class="wpra-feedback__copy">
|
154 |
-
<div class="wpra-feedback__text">
|
155 |
-
This plugin has made my life a lot easier, and the support has been great as well.
|
156 |
-
</div>
|
157 |
-
<div class="wpra-feedback__rating">
|
158 |
-
<span class="dashicons dashicons-star-filled"></span>
|
159 |
-
<span class="dashicons dashicons-star-filled"></span>
|
160 |
-
<span class="dashicons dashicons-star-filled"></span>
|
161 |
-
<span class="dashicons dashicons-star-filled"></span>
|
162 |
-
<span class="dashicons dashicons-star-filled"></span>
|
163 |
-
</div>
|
164 |
-
<div class="wpra-feedback__by">
|
165 |
-
<a :href="feedbackUrl" target="_blank">
|
166 |
-
Review by officeinnovator
|
167 |
-
</a>
|
168 |
-
</div>
|
169 |
-
</div>
|
170 |
-
</div>
|
171 |
-
</div>
|
172 |
-
</div>
|
173 |
-
</div>
|
174 |
-
</transition>
|
175 |
-
|
176 |
-
<div class="connect-actions pad">
|
177 |
-
<div class="pad-item--grow">
|
178 |
-
<button v-if="!active('finish')"
|
179 |
-
class="button-clear"
|
180 |
-
@click="finish"
|
181 |
-
>
|
182 |
-
Skip the introduction
|
183 |
-
</button>
|
184 |
-
</div>
|
185 |
-
<div class="pad-item--no-shrink">
|
186 |
-
<button class="button-clear"
|
187 |
-
@click="back"
|
188 |
-
v-if="isBackAvailable"
|
189 |
-
>
|
190 |
-
Back
|
191 |
-
</button>
|
192 |
-
<button @click="next"
|
193 |
-
class="button button-primary button-large"
|
194 |
-
:class="{'loading-button': isLoading}"
|
195 |
-
>
|
196 |
-
{{ active('finish') ? 'Continue to Plugin' : 'Next' }}
|
197 |
-
</button>
|
198 |
-
</div>
|
199 |
-
</div>
|
200 |
-
</div>
|
201 |
-
</div>
|
202 |
-
</template>
|
203 |
-
|
204 |
-
<script>
|
205 |
-
import Expander from 'app/components/Expander'
|
206 |
-
import { post } from 'app/utils/fetch'
|
207 |
-
import { copyToClipboard } from 'app/utils/copy'
|
208 |
-
|
209 |
-
const _ = (str) => str
|
210 |
-
|
211 |
-
const CONFIG = window.wprssWizardConfig
|
212 |
-
|
213 |
-
export default {
|
214 |
-
data () {
|
215 |
-
return {
|
216 |
-
prevHeight: 0,
|
217 |
-
screens: [{
|
218 |
-
id: 'feed',
|
219 |
-
title: _('Add feed source URL'),
|
220 |
-
description: false,
|
221 |
-
next: this.submitFeed,
|
222 |
-
completed: () => {
|
223 |
-
return this.feed.items.length
|
224 |
-
},
|
225 |
-
entered: () => {
|
226 |
-
this.focusOnInput('feed')
|
227 |
-
}
|
228 |
-
}, {
|
229 |
-
id: 'feedItems',
|
230 |
-
title: _('Display feed items'),
|
231 |
-
description: false,
|
232 |
-
next: this.continueItems,
|
233 |
-
completed: () => {
|
234 |
-
return this.feed.items.length && this.itemsPassed
|
235 |
-
}
|
236 |
-
}, {
|
237 |
-
id: 'finish',
|
238 |
-
title: _('Complete introduction'),
|
239 |
-
description: false,
|
240 |
-
next: this.completeIntroduction,
|
241 |
-
completed: () => {
|
242 |
-
return this.feed.items.length && this.itemsPassed
|
243 |
-
}
|
244 |
-
}],
|
245 |
-
isCopied: false,
|
246 |
-
|
247 |
-
isPreparing: false,
|
248 |
-
isPrepared: false,
|
249 |
-
|
250 |
-
transition: 'slide-up', // 'slide-down',
|
251 |
-
|
252 |
-
activeScreen: 'feed',
|
253 |
-
form: {
|
254 |
-
feedSourceUrl: null,
|
255 |
-
},
|
256 |
-
itemsPassed: false,
|
257 |
-
|
258 |
-
stepLoading: false,
|
259 |
-
isLoading: false,
|
260 |
-
|
261 |
-
isFeedError: false,
|
262 |
-
|
263 |
-
feed: {
|
264 |
-
items: [],
|
265 |
-
},
|
266 |
-
previewUrl: CONFIG.previewUrl,
|
267 |
-
addOnsUrl: CONFIG.addOnsUrl,
|
268 |
-
supportUrl: CONFIG.supportUrl,
|
269 |
-
demoImageUrl: CONFIG.demoImageUrl,
|
270 |
-
feedbackUrl: CONFIG.feedbackUrl,
|
271 |
-
knowledgeBaseUrl: CONFIG.knowledgeBaseUrl,
|
272 |
-
}
|
273 |
-
},
|
274 |
-
computed: {
|
275 |
-
validateLink () {
|
276 |
-
return 'https://validator.w3.org/feed/check.cgi?url=' + encodeURI(this.form.feedSourceUrl)
|
277 |
-
},
|
278 |
-
|
279 |
-
activeScreenIndex () {
|
280 |
-
return this.screens.findIndex(screen => screen.id === this.activeScreen)
|
281 |
-
},
|
282 |
-
currentScreen () {
|
283 |
-
return this.screens.find(screen => screen.id === this.activeScreen)
|
284 |
-
},
|
285 |
-
actionCompleted () {
|
286 |
-
return this.currentScreen.completed()
|
287 |
-
},
|
288 |
-
isBackAvailable () {
|
289 |
-
return this.activeScreenIndex > 0 && this.activeScreenIndex < this.screens.length
|
290 |
-
},
|
291 |
-
},
|
292 |
-
mounted () {
|
293 |
-
this.onScreenEnter()
|
294 |
-
},
|
295 |
-
methods: {
|
296 |
-
preparePreview (e) {
|
297 |
-
if (this.isPreparing) {
|
298 |
-
e.preventDefault()
|
299 |
-
return
|
300 |
-
}
|
301 |
-
if (!this.isPrepared) {
|
302 |
-
e.preventDefault()
|
303 |
-
this.isPreparing = true
|
304 |
-
fetch(this.previewUrl).then(() => {
|
305 |
-
this.isPreparing = false
|
306 |
-
this.isPrepared = true
|
307 |
-
})
|
308 |
-
}
|
309 |
-
},
|
310 |
-
|
311 |
-
/**
|
312 |
-
* Submits first feed step.
|
313 |
-
*
|
314 |
-
* @return {Promise<any>}
|
315 |
-
*/
|
316 |
-
submitFeed () {
|
317 |
-
const data = Object.assign(CONFIG.feedEndpoint.defaultPayload, {
|
318 |
-
wprss_intro_feed_url: this.form.feedSourceUrl
|
319 |
-
})
|
320 |
-
this.isLoading = true
|
321 |
-
this.isFeedError = false
|
322 |
-
return post(CONFIG.feedEndpoint.url, data).then((responseData) => {
|
323 |
-
this.feed.items = responseData.data.feed_items.slice(0, 3)
|
324 |
-
this.isLoading = false
|
325 |
-
return {}
|
326 |
-
}).catch((resp) => {
|
327 |
-
this.isLoading = false
|
328 |
-
this.isFeedError = true
|
329 |
-
throw resp
|
330 |
-
})
|
331 |
-
},
|
332 |
-
|
333 |
-
/**
|
334 |
-
* Continue from items step.
|
335 |
-
*
|
336 |
-
* @return {Promise<any>}
|
337 |
-
*/
|
338 |
-
continueItems () {
|
339 |
-
this.itemsPassed = true
|
340 |
-
return Promise.resolve({})
|
341 |
-
},
|
342 |
-
|
343 |
-
/**
|
344 |
-
* Complete the introduction and proceed to sources list.
|
345 |
-
*
|
346 |
-
* @return {Promise<any>}
|
347 |
-
*/
|
348 |
-
completeIntroduction () {
|
349 |
-
return Promise.resolve({})
|
350 |
-
},
|
351 |
-
|
352 |
-
/**
|
353 |
-
* Go to the next screen in this wizard.
|
354 |
-
*/
|
355 |
-
next () {
|
356 |
-
this.transition = 'slide-up'
|
357 |
-
const nextTransistor = this.currentScreen.next ? this.currentScreen.next : () => Promise.resolve(false)
|
358 |
-
this.stepLoading = true
|
359 |
-
nextTransistor().then(result => {
|
360 |
-
this.stepLoading = false
|
361 |
-
}, (err) => {
|
362 |
-
throw err
|
363 |
-
}).then(() => {
|
364 |
-
const nextStepIndex = this.activeScreenIndex + 1
|
365 |
-
if (nextStepIndex >= this.screens.length) {
|
366 |
-
this.finish()
|
367 |
-
}
|
368 |
-
else {
|
369 |
-
this.activeScreen = this.screens[nextStepIndex].id
|
370 |
-
this.onScreenEnter()
|
371 |
-
}
|
372 |
-
}).catch((err) => {
|
373 |
-
console.error(err)
|
374 |
-
})
|
375 |
-
},
|
376 |
-
|
377 |
-
/**
|
378 |
-
* Run on screen event.
|
379 |
-
*/
|
380 |
-
onScreenEnter () {
|
381 |
-
this.$nextTick(() => {
|
382 |
-
if (this.currentScreen.entered) {
|
383 |
-
this.currentScreen.entered()
|
384 |
-
}
|
385 |
-
})
|
386 |
-
},
|
387 |
-
|
388 |
-
/**
|
389 |
-
* Focus on some ref input.
|
390 |
-
*/
|
391 |
-
focusOnInput (refName) {
|
392 |
-
if (!this.$refs[refName] || !this.$refs[refName].focus) {
|
393 |
-
return false
|
394 |
-
}
|
395 |
-
this.$refs[refName].focus()
|
396 |
-
},
|
397 |
-
|
398 |
-
/**
|
399 |
-
* Go back in the wizard on one step.
|
400 |
-
*/
|
401 |
-
back () {
|
402 |
-
this.transition = 'slide-down'
|
403 |
-
this.activeScreen = this.screens[this.activeScreenIndex - 1].id
|
404 |
-
},
|
405 |
-
|
406 |
-
/**
|
407 |
-
* Finish this wizard.
|
408 |
-
*/
|
409 |
-
finish (confirmFinish = false) {
|
410 |
-
const visitList = () => window.location.href = CONFIG.feedListUrl
|
411 |
-
if (confirmFinish) {
|
412 |
-
if (confirm('Are you sure you want to skip the introduction?')) {
|
413 |
-
visitList()
|
414 |
-
}
|
415 |
-
return
|
416 |
-
}
|
417 |
-
visitList()
|
418 |
-
// redirect to the URL.
|
419 |
-
},
|
420 |
-
|
421 |
-
active (pageName) {
|
422 |
-
return this.activeScreen === pageName
|
423 |
-
},
|
424 |
-
|
425 |
-
copyToClipboard () {
|
426 |
-
if (this.isCopied) {
|
427 |
-
return
|
428 |
-
}
|
429 |
-
copyToClipboard('[wp-rss-aggregator]')
|
430 |
-
this.isCopied = true
|
431 |
-
setTimeout(() => {
|
432 |
-
this.isCopied = false
|
433 |
-
}, 1000)
|
434 |
-
}
|
435 |
-
},
|
436 |
-
components: {
|
437 |
-
Expander
|
438 |
-
}
|
439 |
-
}
|
440 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/intro/index.js
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
require('css/src/intro/steps.scss')
|
2 |
-
|
3 |
-
import Vue from 'vue'
|
4 |
-
import Wizard from './Wizard'
|
5 |
-
import 'whatwg-fetch'
|
6 |
-
|
7 |
-
new Vue({
|
8 |
-
el: '#wpra-wizard-app',
|
9 |
-
template: '<Wizard/>',
|
10 |
-
components: { Wizard }
|
11 |
-
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/pagination/index.js
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
require('css/src/pagination/index.scss')
|
2 |
-
|
3 |
-
jQuery(document).ready(($) => {
|
4 |
-
const fetchList = function ($targetEl, params) {
|
5 |
-
$targetEl.addClass('wpra-loading')
|
6 |
-
|
7 |
-
$([document.documentElement, document.body]).animate({
|
8 |
-
scrollTop: $targetEl.offset().top - 50
|
9 |
-
}, 500);
|
10 |
-
|
11 |
-
const template = params.template
|
12 |
-
delete params.template
|
13 |
-
|
14 |
-
let tmp = template.length? template : '0'
|
15 |
-
let url = WpraPagination.baseUri.replace('%s', tmp)
|
16 |
-
|
17 |
-
$.ajax({
|
18 |
-
type: 'POST',
|
19 |
-
url,
|
20 |
-
data: JSON.stringify(params),
|
21 |
-
contentType: 'application/json',
|
22 |
-
}).done((data) => {
|
23 |
-
$newEl = $(data.html)
|
24 |
-
$newEl.find('.colorbox').colorbox({iframe:true, width:'80%', height:'80%'})
|
25 |
-
$targetEl.replaceWith($newEl)
|
26 |
-
})
|
27 |
-
}
|
28 |
-
|
29 |
-
const handleClick = function ($link) {
|
30 |
-
const $targetEl = $link.closest('[data-template-ctx]')
|
31 |
-
|
32 |
-
const template = $targetEl.data('wpra-template')
|
33 |
-
const templateOptions = $targetEl.data('template-ctx')
|
34 |
-
|
35 |
-
let options = Object.assign({}, {
|
36 |
-
template
|
37 |
-
}, JSON.parse(atob(templateOptions)))
|
38 |
-
options['page'] = $link.data('wpra-page')
|
39 |
-
|
40 |
-
fetchList($targetEl, options)
|
41 |
-
}
|
42 |
-
|
43 |
-
$('body').on('click', 'a[data-wpra-page]', function (e) {
|
44 |
-
e.preventDefault()
|
45 |
-
handleClick($(this))
|
46 |
-
});
|
47 |
-
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/plugins/PluginDisablePoll.vue
DELETED
@@ -1,122 +0,0 @@
|
|
1 |
-
<template>
|
2 |
-
<div class="wpra-plugin-disable-poll">
|
3 |
-
<modal :active="isModalVisible"
|
4 |
-
@close="closeModal"
|
5 |
-
:header-class="'invisible-header'"
|
6 |
-
>
|
7 |
-
<div slot="header">
|
8 |
-
<div class="wpra-plugin-disable-poll__logo">
|
9 |
-
<img :src="image('light-line-logo.png')" alt="">
|
10 |
-
</div>
|
11 |
-
<h3>
|
12 |
-
Do you have a moment to share why you are deactivating WP RSS Aggregator?
|
13 |
-
</h3>
|
14 |
-
<p>
|
15 |
-
Your feedback will help us to improve our plugins and service.
|
16 |
-
</p>
|
17 |
-
</div>
|
18 |
-
|
19 |
-
<div slot="body">
|
20 |
-
<SerializedForm :form="form" v-model="model"/>
|
21 |
-
</div>
|
22 |
-
|
23 |
-
<div slot="footer">
|
24 |
-
<div class="footer-confirm__buttons">
|
25 |
-
<button class="button button-clear" @click="deactivate">
|
26 |
-
Skip & Deactivate
|
27 |
-
</button>
|
28 |
-
<button class="button button-primary"
|
29 |
-
:class="{'loading-button': isDeactivating}"
|
30 |
-
@click="submit">
|
31 |
-
Submit & Deactivate
|
32 |
-
</button>
|
33 |
-
</div>
|
34 |
-
</div>
|
35 |
-
</modal>
|
36 |
-
</div>
|
37 |
-
</template>
|
38 |
-
|
39 |
-
<script>
|
40 |
-
import Modal from 'app/components/Modal'
|
41 |
-
import SerializedForm from 'app/components/SerializedForm'
|
42 |
-
import axios from 'axios'
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Selector string for plugin's deactivation link.
|
46 |
-
*
|
47 |
-
* @type {string}
|
48 |
-
*/
|
49 |
-
const deactivateSelector = '[data-slug="wp-rss-aggregator"] .deactivate a'
|
50 |
-
const deactivateLink = document.querySelector(deactivateSelector)
|
51 |
-
|
52 |
-
export default {
|
53 |
-
components: {
|
54 |
-
Modal,
|
55 |
-
SerializedForm,
|
56 |
-
},
|
57 |
-
data () {
|
58 |
-
return {
|
59 |
-
isDeactivating: false,
|
60 |
-
deactivateUrl: null,
|
61 |
-
submitUrl: WrpaDisablePoll.url,
|
62 |
-
model: WrpaDisablePoll.model,
|
63 |
-
form: WrpaDisablePoll.form,
|
64 |
-
audience: WrpaDisablePoll.audience || 100,
|
65 |
-
isModalVisible: false
|
66 |
-
}
|
67 |
-
},
|
68 |
-
watch: {
|
69 |
-
'model.reason' () {
|
70 |
-
this.model.follow_up = null
|
71 |
-
}
|
72 |
-
},
|
73 |
-
mounted () {
|
74 |
-
const isVisible = this.getRandomInt(0, 100) < this.audience
|
75 |
-
if (isVisible) {
|
76 |
-
deactivateLink.addEventListener('click', this.handleDeactivateClick)
|
77 |
-
}
|
78 |
-
},
|
79 |
-
methods: {
|
80 |
-
getRandomInt (min, max) {
|
81 |
-
min = Math.ceil(min);
|
82 |
-
max = Math.floor(max);
|
83 |
-
return Math.floor(Math.random() * (max - min + 1)) + min;
|
84 |
-
},
|
85 |
-
|
86 |
-
image (path) {
|
87 |
-
return WrpaDisablePoll.image + path
|
88 |
-
},
|
89 |
-
|
90 |
-
handleDeactivateClick (e) {
|
91 |
-
if (this.isModalVisible) {
|
92 |
-
return
|
93 |
-
}
|
94 |
-
|
95 |
-
e.preventDefault()
|
96 |
-
this.isModalVisible = true
|
97 |
-
},
|
98 |
-
|
99 |
-
closeModal () {
|
100 |
-
this.isModalVisible = false
|
101 |
-
this.deactivateUrl = null
|
102 |
-
},
|
103 |
-
|
104 |
-
submit () {
|
105 |
-
this.isDeactivating = true
|
106 |
-
axios.post(this.submitUrl, this.model, {
|
107 |
-
headers: {
|
108 |
-
'Content-Type': 'application/x-www-form-urlencoded'
|
109 |
-
}
|
110 |
-
}).then(() => {
|
111 |
-
this.deactivate()
|
112 |
-
}).finally(() => {
|
113 |
-
this.isDeactivating = false
|
114 |
-
})
|
115 |
-
},
|
116 |
-
|
117 |
-
deactivate () {
|
118 |
-
deactivateLink.click()
|
119 |
-
}
|
120 |
-
}
|
121 |
-
}
|
122 |
-
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/plugins/index.js
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
require('css/src/plugins/index.scss')
|
2 |
-
|
3 |
-
import Vue from 'vue'
|
4 |
-
import PluginDisablePoll from './PluginDisablePoll'
|
5 |
-
|
6 |
-
new Vue({
|
7 |
-
el: '#wpra-plugins-app',
|
8 |
-
template: '<PluginDisablePoll/>',
|
9 |
-
components: { PluginDisablePoll }
|
10 |
-
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/templates/Edit.js
DELETED
@@ -1,491 +0,0 @@
|
|
1 |
-
import Postbox from 'app/components/Postbox'
|
2 |
-
import Main from 'app/components/Main'
|
3 |
-
import Sidebar from 'app/components/Sidebar'
|
4 |
-
import Layout from 'app/components/Layout'
|
5 |
-
import RouteLink from 'app/components/RouteLink'
|
6 |
-
import Input from 'app/components/Input'
|
7 |
-
import Button from 'app/components/Button'
|
8 |
-
import NoticeBlock from 'app/components/NoticeBlock'
|
9 |
-
import deepmerge from 'app/utils/deepmerge'
|
10 |
-
import DataChangesAware from 'app/mixins/DataChangesAware'
|
11 |
-
import jsonClone from 'app/utils/jsonClone'
|
12 |
-
import base64 from 'app/utils/base64'
|
13 |
-
import { copyToClipboard } from 'app/utils/copy'
|
14 |
-
|
15 |
-
export default {
|
16 |
-
mixins: [DataChangesAware],
|
17 |
-
data () {
|
18 |
-
return {
|
19 |
-
typeOptions: Object.keys(WpraTemplates.options.type)
|
20 |
-
.filter(key => key[0] !== '_')
|
21 |
-
.reduce((acc, key) => {
|
22 |
-
acc[key] = WpraTemplates.options.type[key]
|
23 |
-
return acc
|
24 |
-
}, {}),
|
25 |
-
|
26 |
-
model: jsonClone(WpraTemplates.model_schema),
|
27 |
-
validation: jsonClone(WpraTemplates.model_schema),
|
28 |
-
tooltips: jsonClone(WpraTemplates.model_tooltips),
|
29 |
-
|
30 |
-
baseUrl: WpraTemplates.base_url,
|
31 |
-
isSaving: false,
|
32 |
-
isLoading: false,
|
33 |
-
}
|
34 |
-
},
|
35 |
-
inject: [
|
36 |
-
'hooks',
|
37 |
-
'http',
|
38 |
-
'router',
|
39 |
-
'notification',
|
40 |
-
],
|
41 |
-
mounted () {
|
42 |
-
this.resolveEditingItem()
|
43 |
-
},
|
44 |
-
computed: {
|
45 |
-
previewUrl () {
|
46 |
-
let options = base64.encode(JSON.stringify(this.model.options))
|
47 |
-
|
48 |
-
return `${WpraGlobal.admin_base_url}?wpra_preview_template=${this.router.params.id}&wpra_template_options=${options}`
|
49 |
-
}
|
50 |
-
},
|
51 |
-
methods: {
|
52 |
-
resolveEditingItem () {
|
53 |
-
let modelDefault = deepmerge(jsonClone(WpraTemplates.model_schema), this.$store.state.templates.preset)
|
54 |
-
|
55 |
-
this.isLoading = true
|
56 |
-
const loadItem = () => {
|
57 |
-
const id = this.router.params.id
|
58 |
-
if (!id) {
|
59 |
-
return Promise.resolve(null)
|
60 |
-
}
|
61 |
-
let item = this.$store.getters['templates/item'](id)
|
62 |
-
if (item) {
|
63 |
-
return Promise.resolve(item)
|
64 |
-
}
|
65 |
-
return this.http.get(`${this.baseUrl}/${id}`).then(response => {
|
66 |
-
return response.data
|
67 |
-
})
|
68 |
-
}
|
69 |
-
|
70 |
-
loadItem().then(item => {
|
71 |
-
this.isLoading = false
|
72 |
-
if (!item) {
|
73 |
-
this.$set(this, 'model', modelDefault)
|
74 |
-
this.rememberModel()
|
75 |
-
return
|
76 |
-
}
|
77 |
-
item = Object.assign({}, item)
|
78 |
-
this.model = deepmerge(this.model, item)
|
79 |
-
this.rememberModel()
|
80 |
-
})
|
81 |
-
},
|
82 |
-
save () {
|
83 |
-
const isNew = !this.model.id
|
84 |
-
this.isSaving = true
|
85 |
-
this.runRequest().then(response => {
|
86 |
-
this.model = deepmerge(this.model, response.data)
|
87 |
-
this.rememberModel()
|
88 |
-
|
89 |
-
this.notification.show('Template saved!', {
|
90 |
-
type: 'success',
|
91 |
-
icon (el) {
|
92 |
-
el.classList.add('dashicons', 'dashicons-yes')
|
93 |
-
return el
|
94 |
-
},
|
95 |
-
})
|
96 |
-
|
97 |
-
if (!isNew) {
|
98 |
-
return
|
99 |
-
}
|
100 |
-
this.router.navigate({
|
101 |
-
name: 'templates',
|
102 |
-
params: {
|
103 |
-
action: 'edit',
|
104 |
-
id: response.data.id
|
105 |
-
}
|
106 |
-
})
|
107 |
-
}, response => {
|
108 |
-
this.notification.show('Something went wrong. Template is not saved!', {
|
109 |
-
type: 'error',
|
110 |
-
icon (el) {
|
111 |
-
el.classList.add('dashicons', 'dashicons-warning')
|
112 |
-
return el
|
113 |
-
},
|
114 |
-
})
|
115 |
-
}).finally(() => {
|
116 |
-
this.isSaving = false
|
117 |
-
})
|
118 |
-
},
|
119 |
-
runRequest () {
|
120 |
-
const method = this.model.id ? 'put' : 'post'
|
121 |
-
const url = this.model.id ? `${this.baseUrl}/${this.model.id}` : this.baseUrl
|
122 |
-
return this.http[method](url, this.prepareModel())
|
123 |
-
},
|
124 |
-
prepareModel () {
|
125 |
-
const availableKeys = Object.keys(WpraTemplates.model_schema)
|
126 |
-
|
127 |
-
return Object.keys(this.model)
|
128 |
-
.filter(key => {
|
129 |
-
/*
|
130 |
-
* Only keys from model_schema can be saved.
|
131 |
-
*/
|
132 |
-
if (!availableKeys.includes(key)) {
|
133 |
-
return false
|
134 |
-
}
|
135 |
-
|
136 |
-
/*
|
137 |
-
* Name and type shouldn't be passed for default template.
|
138 |
-
*/
|
139 |
-
if (this.model.type === '__built_in' && ['name', 'type'].includes(key)) {
|
140 |
-
return false
|
141 |
-
}
|
142 |
-
|
143 |
-
/*
|
144 |
-
* Slug and ID fields are always ignored and not sent in the request body.
|
145 |
-
*/
|
146 |
-
return !['slug', 'id'].includes(key)
|
147 |
-
})
|
148 |
-
.reduce((acc, key) => {
|
149 |
-
acc[key] = this.model[key]
|
150 |
-
return acc
|
151 |
-
}, {})
|
152 |
-
},
|
153 |
-
getShortcode () {
|
154 |
-
return `[wp-rss-aggregator template="${this.model.slug}"]`
|
155 |
-
},
|
156 |
-
preventLoosingNotSavedData () {
|
157 |
-
return !this.isChanged() || confirm('You have unsaved changes. All changes will be lost if you go back to the Template list before updating. Are you sure you want to continue?')
|
158 |
-
},
|
159 |
-
copyShortcode (e) {
|
160 |
-
copyToClipboard(this.getShortcode())
|
161 |
-
|
162 |
-
const text = e.target.innerText
|
163 |
-
|
164 |
-
e.target.style.width = e.target.getBoundingClientRect().width + 'px'
|
165 |
-
e.target.disabled = true
|
166 |
-
e.target.innerText = 'Copied!'
|
167 |
-
|
168 |
-
setTimeout(() => {
|
169 |
-
e.target.style.width = null
|
170 |
-
e.target.innerText = text
|
171 |
-
e.target.disabled = false
|
172 |
-
}, 5000)
|
173 |
-
},
|
174 |
-
},
|
175 |
-
render () {
|
176 |
-
let back = {
|
177 |
-
name: 'templates'
|
178 |
-
}
|
179 |
-
|
180 |
-
let minorActions = null,
|
181 |
-
shortcode = null,
|
182 |
-
noticeBlock = <NoticeBlock
|
183 |
-
class={'postbox'}
|
184 |
-
id={'templates-usage'}
|
185 |
-
title={'Setting up your Templates'}
|
186 |
-
body={'Templates are used to display the items imported using WP RSS Aggregator. Choose the preferred options ' +
|
187 |
-
'below and use them anywhere on your site via our <a href="https://kb.wprssaggregator.com/article/54-displaying-imported-items-shortcode#tinymce" target="_blank">shortcode</a> ' +
|
188 |
-
'or our <a href="https://kb.wprssaggregator.com/article/454-displaying-imported-items-block-gutenberg" target="_blank">block</a>.'}
|
189 |
-
learnMore={'https://kb.wprssaggregator.com/article/457-templates'}
|
190 |
-
/>
|
191 |
-
|
192 |
-
if (this.router.params.id) {
|
193 |
-
minorActions = <div id="" style={{padding: '6px 0'}}>
|
194 |
-
<div class="misc-pub-section misc-pub-visibility">
|
195 |
-
<a href={this.previewUrl}
|
196 |
-
class="wpra-preview-link"
|
197 |
-
role="button"
|
198 |
-
target="wpra-preview-template"
|
199 |
-
style={{marginLeft: '4px', textDecoration: 'none'}}
|
200 |
-
>
|
201 |
-
Open preview
|
202 |
-
<span class="dashicons dashicons-external"/>
|
203 |
-
</a>
|
204 |
-
</div>
|
205 |
-
</div>
|
206 |
-
}
|
207 |
-
|
208 |
-
if (this.model.id) {
|
209 |
-
shortcode = <div class="wpra-shortcode-copy" title={'Copy chortcode'}>
|
210 |
-
<div class="wpra-shortcode-copy__content">
|
211 |
-
<strong>Shortcode: </strong>
|
212 |
-
<code>{ this.getShortcode() }</code>
|
213 |
-
</div>
|
214 |
-
<div class="wpra-shortcode-copy__icon">
|
215 |
-
<button class="button" onClick={this.copyShortcode}>Copy Shortcode</button>
|
216 |
-
</div>
|
217 |
-
</div>
|
218 |
-
}
|
219 |
-
|
220 |
-
let content = <div>
|
221 |
-
<div class="page-title">
|
222 |
-
<RouteLink class="back-button" path={back} gate={this.preventLoosingNotSavedData}>
|
223 |
-
<span class="dashicons dashicons-arrow-left-alt"></span>
|
224 |
-
Templates
|
225 |
-
</RouteLink>
|
226 |
-
<h1>
|
227 |
-
{this.router.params.id ? (this.changes.model.name || this.changes.model.slug) : 'Create a New Template'}
|
228 |
-
</h1>
|
229 |
-
{shortcode}
|
230 |
-
</div>
|
231 |
-
<div id="poststuff">
|
232 |
-
{
|
233 |
-
this.isLoading ? <div class="loading-container"/> : <Layout class="metabox-holder columns-2">
|
234 |
-
<Main>
|
235 |
-
{noticeBlock}
|
236 |
-
<Postbox id="template-details" title="Template Details" context={this}>
|
237 |
-
<Input type="text"
|
238 |
-
label={'Template name'}
|
239 |
-
value={this.model.name}
|
240 |
-
onInput={(e) => this.model.name = e}
|
241 |
-
disabled={this.model.type === '__built_in'}
|
242 |
-
/>
|
243 |
-
<Input type="select"
|
244 |
-
label={'Template type'}
|
245 |
-
value={this.model.type}
|
246 |
-
options={this.typeOptions}
|
247 |
-
onInput={(e) => this.model.type = e}
|
248 |
-
disabled={this.model.type === '__built_in'}
|
249 |
-
inputDisabled={!WpraTemplates.options.is_type_enabled}
|
250 |
-
description={
|
251 |
-
WpraTemplates.options.is_type_enabled ? null : '<div class="disable-ignored"><strong class="disable-ignored">Get more template types, including a customisable grid template.</strong> <a target="_blank" href="https://www.wprssaggregator.com/extensions/templates/" class="disable-ignored">Learn more.</a></div>'
|
252 |
-
}
|
253 |
-
/>
|
254 |
-
{
|
255 |
-
(this.model.type === '__built_in') ?
|
256 |
-
<div class="wpra-info-box">
|
257 |
-
<div class="wpra-info-box__icon">
|
258 |
-
<span class="dashicons dashicons-info"/>
|
259 |
-
</div>
|
260 |
-
<div class="wpra-info-box__text">
|
261 |
-
This is the default template for WP RSS Aggregator. It is used as the fallback template when one is not selected via the shortcode or block. To create a new one, please go back to the Templates List.
|
262 |
-
</div>
|
263 |
-
</div>
|
264 |
-
:
|
265 |
-
null
|
266 |
-
}
|
267 |
-
</Postbox>
|
268 |
-
<Postbox id="template-options" title="Template Options" context={this}>
|
269 |
-
<Input type="checkbox"
|
270 |
-
label={'Link title to original article'}
|
271 |
-
value={this.model.options.title_is_link}
|
272 |
-
onInput={(e) => this.model.options.title_is_link = e}
|
273 |
-
title={this.tooltips.options.title_is_link}
|
274 |
-
/>
|
275 |
-
<Input type="number"
|
276 |
-
label={'Title maximum length'}
|
277 |
-
value={this.model.options.title_max_length || ''}
|
278 |
-
placeholder={'No limit'}
|
279 |
-
onInput={(e) => this.model.options.title_max_length = e}
|
280 |
-
title={this.tooltips.options.title_max_length}
|
281 |
-
/>
|
282 |
-
<Input type="number"
|
283 |
-
label={'Number of items to show'}
|
284 |
-
value={this.model.options.limit || ''}
|
285 |
-
onInput={(e) => this.model.options.limit = (e === '') ? 0 : e}
|
286 |
-
title={this.tooltips.options.limit}
|
287 |
-
placeholder={"Show all items"}
|
288 |
-
min="0"
|
289 |
-
/>
|
290 |
-
|
291 |
-
<div id={'wpra-list-template-publish-date'} style={{paddingTop: '10px'}}>
|
292 |
-
<Input type="checkbox"
|
293 |
-
label={'Show publish date'}
|
294 |
-
value={this.model.options.date_enabled}
|
295 |
-
onInput={(e) => this.model.options.date_enabled = e}
|
296 |
-
style={{fontWeight: 'bold'}}
|
297 |
-
title={this.tooltips.options.date_enabled}
|
298 |
-
/>
|
299 |
-
<Input type="text"
|
300 |
-
label={'Date prefix'}
|
301 |
-
value={this.model.options.date_prefix}
|
302 |
-
onInput={(e) => this.model.options.date_prefix = e}
|
303 |
-
disabled={!this.model.options.date_enabled}
|
304 |
-
title={this.tooltips.options.date_prefix}
|
305 |
-
/>
|
306 |
-
<Input type="text"
|
307 |
-
label={'Date format'}
|
308 |
-
value={this.model.options.date_format}
|
309 |
-
onInput={(e) => this.model.options.date_format = e}
|
310 |
-
disabled={this.model.options.date_use_time_ago || !this.model.options.date_enabled}
|
311 |
-
title={this.tooltips.options.date_format}
|
312 |
-
/>
|
313 |
-
<Input type="checkbox"
|
314 |
-
label={'Use "time ago" format'}
|
315 |
-
description={'Example: 20 minutes ago'}
|
316 |
-
value={this.model.options.date_use_time_ago}
|
317 |
-
onInput={(e) => this.model.options.date_use_time_ago = e}
|
318 |
-
disabled={!this.model.options.date_enabled}
|
319 |
-
title={this.tooltips.options.date_use_time_ago}
|
320 |
-
/>
|
321 |
-
</div>
|
322 |
-
|
323 |
-
<div id={'wpra-list-template-source'} style={{paddingTop: '10px'}}>
|
324 |
-
<Input type="checkbox"
|
325 |
-
label={'Show source name'}
|
326 |
-
value={this.model.options.source_enabled}
|
327 |
-
onInput={(e) => this.model.options.source_enabled = e}
|
328 |
-
style={{fontWeight: 'bold'}}
|
329 |
-
title={this.tooltips.options.source_enabled}
|
330 |
-
/>
|
331 |
-
<Input type="text"
|
332 |
-
label={'Source prefix'}
|
333 |
-
value={this.model.options.source_prefix}
|
334 |
-
onInput={(e) => this.model.options.source_prefix = e}
|
335 |
-
disabled={!this.model.options.source_enabled}
|
336 |
-
title={this.tooltips.options.source_prefix}
|
337 |
-
/>
|
338 |
-
<Input type="checkbox"
|
339 |
-
label={'Link source name'}
|
340 |
-
value={this.model.options.source_is_link}
|
341 |
-
onInput={(e) => this.model.options.source_is_link = e}
|
342 |
-
disabled={!this.model.options.source_enabled}
|
343 |
-
title={this.tooltips.options.source_is_link}
|
344 |
-
/>
|
345 |
-
</div>
|
346 |
-
|
347 |
-
<div id={'wpra-list-template-author'} style={{paddingTop: '10px'}}>
|
348 |
-
<Input type="checkbox"
|
349 |
-
label={'Show author name'}
|
350 |
-
value={this.model.options.author_enabled}
|
351 |
-
onInput={(e) => this.model.options.author_enabled = e}
|
352 |
-
style={{fontWeight: 'bold'}}
|
353 |
-
title={this.tooltips.options.author_enabled}
|
354 |
-
/>
|
355 |
-
<Input type="text"
|
356 |
-
label={'Author prefix'}
|
357 |
-
value={this.model.options.author_prefix}
|
358 |
-
onInput={(e) => this.model.options.author_prefix = e}
|
359 |
-
disabled={!this.model.options.author_enabled}
|
360 |
-
title={this.tooltips.options.author_prefix}
|
361 |
-
/>
|
362 |
-
</div>
|
363 |
-
|
364 |
-
<div id={'wpra-list-template-pagination'} style={{paddingTop: '10px'}}>
|
365 |
-
<Input type="checkbox"
|
366 |
-
label={'Pagination'}
|
367 |
-
value={this.model.options.pagination}
|
368 |
-
onInput={(e) => this.model.options.pagination = e}
|
369 |
-
style={{fontWeight: 'bold'}}
|
370 |
-
title={this.tooltips.options.pagination}
|
371 |
-
disabled={parseInt(this.model.options.limit) < 1 || !this.model.options.limit}
|
372 |
-
/>
|
373 |
-
<Input type="select"
|
374 |
-
label={'Pagination style'}
|
375 |
-
options={WpraTemplates.options.pagination_type}
|
376 |
-
value={this.model.options.pagination_type}
|
377 |
-
onInput={(e) => this.model.options.pagination_type = e}
|
378 |
-
disabled={!this.model.options.pagination || parseInt(this.model.options.limit) < 1 || !this.model.options.limit}
|
379 |
-
title={this.tooltips.options.pagination_type}
|
380 |
-
/>
|
381 |
-
</div>
|
382 |
-
|
383 |
-
<div id={'wpra-list-template-bullets'} style={{paddingTop: '10px'}}>
|
384 |
-
<Input type="checkbox"
|
385 |
-
label={'Show bullets'}
|
386 |
-
value={this.model.options.bullets_enabled}
|
387 |
-
onInput={(e) => this.model.options.bullets_enabled = e}
|
388 |
-
style={{fontWeight: 'bold'}}
|
389 |
-
title={this.tooltips.options.bullets_enabled}
|
390 |
-
/>
|
391 |
-
<Input type="select"
|
392 |
-
label={'Bullet style'}
|
393 |
-
options={WpraTemplates.options.bullet_type}
|
394 |
-
value={this.model.options.bullet_type}
|
395 |
-
onInput={(e) => this.model.options.bullet_type = e}
|
396 |
-
disabled={!this.model.options.bullets_enabled}
|
397 |
-
title={this.tooltips.options.bullet_type}
|
398 |
-
/>
|
399 |
-
</div>
|
400 |
-
</Postbox>
|
401 |
-
</Main>
|
402 |
-
<Sidebar>
|
403 |
-
<Postbox id="template-create"
|
404 |
-
title={this.model.id ? 'Update Template' : 'Create Template'}
|
405 |
-
submit={true}
|
406 |
-
class={'wpra-postbox-last'}
|
407 |
-
context={this}
|
408 |
-
>
|
409 |
-
<div class="submitbox" id="submitpost">
|
410 |
-
{minorActions}
|
411 |
-
|
412 |
-
<div id="major-publishing-actions">
|
413 |
-
<div id="delete-action">
|
414 |
-
{
|
415 |
-
this.isChanged() ? <a href="#" class="submitdelete" onClick={(e) => {
|
416 |
-
e.preventDefault()
|
417 |
-
this.cancelChanges()
|
418 |
-
}}>
|
419 |
-
Cancel Changes
|
420 |
-
</a> : null
|
421 |
-
}
|
422 |
-
</div>
|
423 |
-
|
424 |
-
<div id="publishing-action">
|
425 |
-
<Button class="button-primary button-large"
|
426 |
-
loading={this.isSaving}
|
427 |
-
nativeOnClick={this.save}
|
428 |
-
>
|
429 |
-
{this.model.id ? 'Save' : 'Publish'}
|
430 |
-
</Button>
|
431 |
-
</div>
|
432 |
-
<div class="clear"></div>
|
433 |
-
</div>
|
434 |
-
</div>
|
435 |
-
</Postbox>
|
436 |
-
<Postbox id="template-link-preferences" title="Link Preferences" context={this}>
|
437 |
-
<p style={{opacity: .65}}>
|
438 |
-
These options apply to all links within this template.
|
439 |
-
</p>
|
440 |
-
<Input type="checkbox"
|
441 |
-
label={'Set links as nofollow'}
|
442 |
-
value={this.model.options.links_nofollow}
|
443 |
-
onInput={(e) => this.model.options.links_nofollow = e}
|
444 |
-
title={this.tooltips.options.links_nofollow}
|
445 |
-
/>
|
446 |
-
<Input type="select"
|
447 |
-
label={'Open links behaviour'}
|
448 |
-
class="form-input--vertical"
|
449 |
-
value={this.model.options.links_behavior}
|
450 |
-
options={WpraTemplates.options.links_behavior}
|
451 |
-
onInput={(e) => this.model.options.links_behavior = e}
|
452 |
-
title={this.tooltips.options.links_behavior}
|
453 |
-
/>
|
454 |
-
{
|
455 |
-
(this.model.options.links_behavior === 'lightbox' )?
|
456 |
-
<div class="notice notice-info notice-alt">
|
457 |
-
<p>Some sites may not allow their content to be shown in a lightbox.</p>
|
458 |
-
<p>Embedded content usually works. Try ticking the below checkbox.</p>
|
459 |
-
<p>
|
460 |
-
<a href="https://kb.wprssaggregator.com/article/471-q-why-wont-some-of-my-feed-items-work-with-the-lightbox-link-behaviour-for-templates"
|
461 |
-
target="_blank">
|
462 |
-
{'Learn more'}
|
463 |
-
</a>
|
464 |
-
</p>
|
465 |
-
</div>
|
466 |
-
: null
|
467 |
-
}
|
468 |
-
<Input type="checkbox"
|
469 |
-
label={'Set links to open embeds'}
|
470 |
-
value={this.model.options.link_to_embed}
|
471 |
-
onInput={(e) => this.model.options.link_to_embed = e}
|
472 |
-
title={this.tooltips.options.link_to_embed}
|
473 |
-
/>
|
474 |
-
</Postbox>
|
475 |
-
<Postbox id="template-custom-css" title="Custom Style" context={this}>
|
476 |
-
<Input type="text"
|
477 |
-
class="form-input--vertical"
|
478 |
-
label={'Custom HTML class name'}
|
479 |
-
value={this.model.options.custom_css_classname}
|
480 |
-
onInput={(e) => this.model.options.custom_css_classname = e}
|
481 |
-
title={this.tooltips.options.custom_css_classname}
|
482 |
-
/>
|
483 |
-
</Postbox>
|
484 |
-
</Sidebar>
|
485 |
-
</Layout>
|
486 |
-
}
|
487 |
-
</div>
|
488 |
-
</div>
|
489 |
-
return this.hooks.apply('wpra-templates-form', this, content)
|
490 |
-
}
|
491 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/templates/List.js
DELETED
@@ -1,350 +0,0 @@
|
|
1 |
-
import VueTable from '@rebelcode/vue-wp-list-table/dist/vue-wp-list-table.common'
|
2 |
-
import RouteLink from 'app/components/RouteLink'
|
3 |
-
import Input from 'app/components/Input'
|
4 |
-
import BottomPanel from 'app/components/BottomPanel'
|
5 |
-
import jsonClone from 'app/utils/jsonClone'
|
6 |
-
import collect from 'app/utils/Collection'
|
7 |
-
|
8 |
-
export default {
|
9 |
-
data () {
|
10 |
-
return {
|
11 |
-
loading: false,
|
12 |
-
|
13 |
-
columns: {
|
14 |
-
name: {
|
15 |
-
label: ('Template Name'),
|
16 |
-
class: 'column-primary'
|
17 |
-
},
|
18 |
-
style: {
|
19 |
-
label: ('Template Type'),
|
20 |
-
},
|
21 |
-
previewTemplate: {
|
22 |
-
label: ('Preview')
|
23 |
-
}
|
24 |
-
},
|
25 |
-
|
26 |
-
filters: WpraTemplates.options.type,
|
27 |
-
|
28 |
-
checked: [],
|
29 |
-
|
30 |
-
filter: {
|
31 |
-
paged: parseInt(this.router.params.paged || 1),
|
32 |
-
type: this.router.params.type || '',
|
33 |
-
s: this.router.params.s || '',
|
34 |
-
},
|
35 |
-
|
36 |
-
baseUrl: WpraTemplates.base_url,
|
37 |
-
|
38 |
-
total: 0,
|
39 |
-
}
|
40 |
-
},
|
41 |
-
inject: [
|
42 |
-
'hooks',
|
43 |
-
'http',
|
44 |
-
'router',
|
45 |
-
],
|
46 |
-
computed: {
|
47 |
-
totalPages () {
|
48 |
-
return Math.ceil(this.total / 20)
|
49 |
-
},
|
50 |
-
list: {
|
51 |
-
get () {
|
52 |
-
return this.$store.state.templates.items
|
53 |
-
},
|
54 |
-
set (value) {
|
55 |
-
this.$store.commit('templates/set', value)
|
56 |
-
},
|
57 |
-
}
|
58 |
-
},
|
59 |
-
methods: {
|
60 |
-
navigated () {
|
61 |
-
Object.keys(this.filter).forEach(key => {
|
62 |
-
this.filter[key] = this.router.params[key] || ''
|
63 |
-
})
|
64 |
-
this.filter.paged = parseInt(this.filter.paged || 1)
|
65 |
-
this.fetchList()
|
66 |
-
},
|
67 |
-
|
68 |
-
fetchList () {
|
69 |
-
this.loading = true
|
70 |
-
|
71 |
-
let params = this.getParams()
|
72 |
-
|
73 |
-
let paged = parseInt(params.paged)
|
74 |
-
delete params.paged
|
75 |
-
if (!!paged && paged !== 1) {
|
76 |
-
params['page'] = paged
|
77 |
-
}
|
78 |
-
|
79 |
-
return this.http.get(this.baseUrl, {
|
80 |
-
params
|
81 |
-
}).then((response) => {
|
82 |
-
this.list = response.data.items
|
83 |
-
this.total = response.data.count
|
84 |
-
}).finally(() => {
|
85 |
-
this.loading = false
|
86 |
-
})
|
87 |
-
},
|
88 |
-
|
89 |
-
deleteTemplate (id) {
|
90 |
-
if (!confirm('Are you sure you want to delete this template? If this template is being used in a shortcode or Gutenberg block anywhere on your site, the default template will be used instead.')) {
|
91 |
-
return
|
92 |
-
}
|
93 |
-
this.loading = true
|
94 |
-
return this.http.delete(`${this.baseUrl}/${id}`).then(() => {
|
95 |
-
return this.fetchList()
|
96 |
-
}).then(() => {
|
97 |
-
this.loading = false
|
98 |
-
})
|
99 |
-
},
|
100 |
-
|
101 |
-
bulkDelete () {
|
102 |
-
if (!confirm('Are you sure you want to delete these templates? If a template is being used in a shortcode or Gutenberg block anywhere on your site, the default template will be used instead.')) {
|
103 |
-
return
|
104 |
-
}
|
105 |
-
this.loading = true
|
106 |
-
return this.http.delete(this.baseUrl, {
|
107 |
-
params: {
|
108 |
-
ids: this.checked
|
109 |
-
}
|
110 |
-
}).then(() => {
|
111 |
-
this.checked = []
|
112 |
-
this.$refs.table.checkedItems = []
|
113 |
-
return this.fetchList()
|
114 |
-
}).then(() => {
|
115 |
-
this.loading = false
|
116 |
-
})
|
117 |
-
},
|
118 |
-
|
119 |
-
duplicateTemplate (row) {
|
120 |
-
let template = jsonClone(row)
|
121 |
-
|
122 |
-
delete template.id
|
123 |
-
|
124 |
-
if (template.type === '__built_in') {
|
125 |
-
delete template.type
|
126 |
-
}
|
127 |
-
|
128 |
-
// add copy to the title so it is mor obvious for the user that this is duplicate.
|
129 |
-
template.name = `${template.name} (Copy)`
|
130 |
-
|
131 |
-
this.$store.commit('templates/updatePreset', template)
|
132 |
-
this.router.navigate({
|
133 |
-
name: 'templates',
|
134 |
-
params: {
|
135 |
-
action: 'new',
|
136 |
-
}
|
137 |
-
})
|
138 |
-
},
|
139 |
-
|
140 |
-
getPreviewLink (row) {
|
141 |
-
return `${WpraGlobal.admin_base_url}?wpra_preview_template=${row.id}`
|
142 |
-
},
|
143 |
-
|
144 |
-
createTemplate () {
|
145 |
-
this.$store.commit('templates/updatePreset', {})
|
146 |
-
this.router.navigate({
|
147 |
-
name: 'templates',
|
148 |
-
params: {
|
149 |
-
action: 'new',
|
150 |
-
}
|
151 |
-
})
|
152 |
-
},
|
153 |
-
|
154 |
-
setChecked (values) {
|
155 |
-
this.checked = values.filter(id => {
|
156 |
-
return collect(this.list).find(id, {}).type !== '__built_in'
|
157 |
-
})
|
158 |
-
},
|
159 |
-
|
160 |
-
getParams () {
|
161 |
-
return Object.keys(this.filter).filter(key => {
|
162 |
-
return !!this.filter[key] && this.filter[key] !== 'all'
|
163 |
-
}).reduce((acc, key) => {
|
164 |
-
acc[key] = this.filter[key]
|
165 |
-
return acc
|
166 |
-
}, {})
|
167 |
-
},
|
168 |
-
|
169 |
-
setFilter (name, value) {
|
170 |
-
this.filter[name] = value
|
171 |
-
},
|
172 |
-
|
173 |
-
submitFilter () {
|
174 |
-
this.router.mergeParams(this.getParams())
|
175 |
-
},
|
176 |
-
|
177 |
-
getRowClass (row) {
|
178 |
-
return row.type === '__built_in' ? 'built-in' : ''
|
179 |
-
}
|
180 |
-
},
|
181 |
-
render () {
|
182 |
-
const editPath = (id) => {
|
183 |
-
return {
|
184 |
-
name: 'templates',
|
185 |
-
params: {
|
186 |
-
action: 'edit',
|
187 |
-
id,
|
188 |
-
}
|
189 |
-
}
|
190 |
-
}
|
191 |
-
|
192 |
-
let cells = this.hooks.apply('wpra-templates-list-cells', this, {
|
193 |
-
name: ({row}) => {
|
194 |
-
return [
|
195 |
-
<div>
|
196 |
-
<strong><RouteLink path={editPath(row.id)}>{row.name}</RouteLink></strong>
|
197 |
-
<small style={{paddingLeft: '4px', opacity: '0.6'}}>{row.slug}</small>
|
198 |
-
{
|
199 |
-
(row.type === '__built_in') ?
|
200 |
-
<span style={{opacity: '0.6', display: 'block'}}>
|
201 |
-
This is the default feed template. To create your own, either duplicate it or click "Add New" above.
|
202 |
-
</span>
|
203 |
-
:
|
204 |
-
null
|
205 |
-
}
|
206 |
-
</div>,
|
207 |
-
<div class="row-actions">
|
208 |
-
<span className="edit">
|
209 |
-
<RouteLink path={editPath(row.id)}>Edit</RouteLink> |
|
210 |
-
</span>
|
211 |
-
<span class="inline" style={{paddingLeft: '4px'}}>
|
212 |
-
<a href="#"
|
213 |
-
onClick={(e) => {
|
214 |
-
e.preventDefault()
|
215 |
-
this.duplicateTemplate(row)
|
216 |
-
}}
|
217 |
-
>Duplicate</a> {row.type !== '__built_in' ? '|' : ''}
|
218 |
-
</span>
|
219 |
-
{
|
220 |
-
(row.type !== '__built_in')
|
221 |
-
?
|
222 |
-
<span class="trash" style={{paddingLeft: '4px'}} onClick={(e) => {
|
223 |
-
e.preventDefault()
|
224 |
-
this.deleteTemplate(row.id)
|
225 |
-
}}>
|
226 |
-
<a href="#" class="submitdelete" aria-label="Delete Item">Delete</a>
|
227 |
-
</span>
|
228 |
-
:
|
229 |
-
null
|
230 |
-
}
|
231 |
-
</div>
|
232 |
-
]
|
233 |
-
},
|
234 |
-
style: ({row}) => {
|
235 |
-
if (this.filters[row.type]) {
|
236 |
-
return [
|
237 |
-
<div>{this.filters[row.type]}</div>
|
238 |
-
]
|
239 |
-
}
|
240 |
-
|
241 |
-
return [
|
242 |
-
<div>
|
243 |
-
{this.filters.list}
|
244 |
-
|
245 |
-
<span style={{opacity: 0.7, fontSize: '90%'}}>
|
246 |
-
(Missing type: <code>{row.type}</code>)
|
247 |
-
</span>
|
248 |
-
</div>
|
249 |
-
];
|
250 |
-
},
|
251 |
-
previewTemplate: ({row}) => {
|
252 |
-
return [
|
253 |
-
<div>
|
254 |
-
<a href={this.getPreviewLink(row)}
|
255 |
-
target="wpra-preview-template"
|
256 |
-
class="wpra-preview-link"
|
257 |
-
>
|
258 |
-
Open preview <span class="dashicons dashicons-external"></span>
|
259 |
-
</a>
|
260 |
-
</div>
|
261 |
-
]
|
262 |
-
},
|
263 |
-
filters: () => {
|
264 |
-
let templateTypes = Object.keys(WpraTemplates.options.type)
|
265 |
-
.filter(key => key[0] !== '_')
|
266 |
-
.reduce((carry, key) => {
|
267 |
-
carry[key] = WpraTemplates.options.type[key]
|
268 |
-
return carry
|
269 |
-
}, {
|
270 |
-
'all': 'Select Template Type',
|
271 |
-
})
|
272 |
-
return [
|
273 |
-
<Input type="select"
|
274 |
-
style={{margin: 0}}
|
275 |
-
options={templateTypes}
|
276 |
-
value={this.filter.type}
|
277 |
-
onInput={(value) => {
|
278 |
-
this.filter.type = value
|
279 |
-
this.submitFilter()
|
280 |
-
}}
|
281 |
-
/>
|
282 |
-
]
|
283 |
-
}
|
284 |
-
})
|
285 |
-
|
286 |
-
let content = <div>
|
287 |
-
<h1 class="wp-heading-inline">Templates</h1>
|
288 |
-
<a class="page-title-action"
|
289 |
-
href="#"
|
290 |
-
onClick={e => {
|
291 |
-
e.preventDefault()
|
292 |
-
this.createTemplate()
|
293 |
-
}}
|
294 |
-
>Add New</a>
|
295 |
-
|
296 |
-
<p class="search-box" style={{padding: '10px 0'}}>
|
297 |
-
<label class="screen-reader-text" for="post-search-input">Search Templates:</label>
|
298 |
-
<input type="search"
|
299 |
-
id="post-search-input"
|
300 |
-
name="s"
|
301 |
-
value={this.filter.s}
|
302 |
-
onInput={e => this.filter.s = e.target.value}
|
303 |
-
onKeyup:enter={this.submitFilter}
|
304 |
-
/>
|
305 |
-
<input type="submit" id="search-submit" class="button" value="Search Templates"
|
306 |
-
onClick={this.submitFilter}
|
307 |
-
/>
|
308 |
-
</p>
|
309 |
-
|
310 |
-
<VueTable
|
311 |
-
onChecked={this.setChecked}
|
312 |
-
onPagination={page => {
|
313 |
-
this.filter.paged = page
|
314 |
-
this.submitFilter()
|
315 |
-
}}
|
316 |
-
columns={this.columns}
|
317 |
-
rows={this.list}
|
318 |
-
loading={this.loading}
|
319 |
-
totalItems={this.total}
|
320 |
-
perPage={20}
|
321 |
-
totalPages={this.totalPages}
|
322 |
-
currentPage={this.filter.paged}
|
323 |
-
ref="table"
|
324 |
-
notFound="No templates found."
|
325 |
-
rowClass={this.getRowClass}
|
326 |
-
class={{
|
327 |
-
'wpra-no-cb': this.list.length === 0 || (this.list.length === 1 && this.list[0].type === '__built_in')
|
328 |
-
}}
|
329 |
-
scopedSlots={
|
330 |
-
cells
|
331 |
-
}
|
332 |
-
/>
|
333 |
-
|
334 |
-
{
|
335 |
-
this.checked.length ? <BottomPanel>
|
336 |
-
<div class="flex-row">
|
337 |
-
<div class="flex-col">
|
338 |
-
<div class="wpra-bottom-panel__title">Bulk Actions</div>
|
339 |
-
<a href="#" onClick={(e) => {
|
340 |
-
e.preventDefault()
|
341 |
-
this.bulkDelete()
|
342 |
-
}}>Delete</a>
|
343 |
-
</div>
|
344 |
-
</div>
|
345 |
-
</BottomPanel> : null
|
346 |
-
}
|
347 |
-
</div>
|
348 |
-
return this.hooks.apply('wpra-templates-list', this, content)
|
349 |
-
}
|
350 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/templates/app.js
DELETED
@@ -1,117 +0,0 @@
|
|
1 |
-
import axios from 'axios'
|
2 |
-
import toasted from 'vue-toasted'
|
3 |
-
import VueTippy from 'vue-tippy'
|
4 |
-
|
5 |
-
import Vuex from 'vuex'
|
6 |
-
import List from './List'
|
7 |
-
import Edit from './Edit'
|
8 |
-
|
9 |
-
import makeRouterApp from 'app/components/RouterApp'
|
10 |
-
import Router from 'app/libs/Router'
|
11 |
-
import templates from './store'
|
12 |
-
import NotificationCenter from 'app/libs/NotificationCenter'
|
13 |
-
|
14 |
-
import components from 'app/components'
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Main application's container.
|
18 |
-
*/
|
19 |
-
export default {
|
20 |
-
register (services) {
|
21 |
-
/*
|
22 |
-
* Component for editing templates.
|
23 |
-
*/
|
24 |
-
services['TemplateEdit'] = () => Edit
|
25 |
-
|
26 |
-
/*
|
27 |
-
* Component for managing templates.
|
28 |
-
*/
|
29 |
-
services['TemplateList'] = () => List
|
30 |
-
|
31 |
-
/*
|
32 |
-
* Application router instance.
|
33 |
-
*/
|
34 |
-
services['router'] = ({ document, TemplateEdit, TemplateList }) => {
|
35 |
-
return new Router([{
|
36 |
-
route: WpraGlobal.templates_url_base + '&action',
|
37 |
-
name: 'templates-form',
|
38 |
-
component: TemplateEdit,
|
39 |
-
}, {
|
40 |
-
route: WpraGlobal.templates_url_base,
|
41 |
-
name: 'templates',
|
42 |
-
component: TemplateList,
|
43 |
-
}], {
|
44 |
-
afterNavigating: () => {
|
45 |
-
document.querySelector('html').scrollTop = 0
|
46 |
-
}
|
47 |
-
})
|
48 |
-
}
|
49 |
-
|
50 |
-
/*
|
51 |
-
* Application with client side routes.
|
52 |
-
*/
|
53 |
-
services['App'] = (container) => {
|
54 |
-
return makeRouterApp(container)
|
55 |
-
}
|
56 |
-
|
57 |
-
/*
|
58 |
-
* Setup and register central storage management.
|
59 |
-
*/
|
60 |
-
services['vuex'] = ({ vue }) => {
|
61 |
-
vue.use(Vuex)
|
62 |
-
return Vuex
|
63 |
-
}
|
64 |
-
|
65 |
-
services['notification'] = ({ vue }) => {
|
66 |
-
vue.use(toasted, {
|
67 |
-
position: 'top-center',
|
68 |
-
duration: 4000,
|
69 |
-
iconPack: 'callback'
|
70 |
-
})
|
71 |
-
return new NotificationCenter(vue.toasted.show, vue.toasted.error)
|
72 |
-
}
|
73 |
-
|
74 |
-
services['store'] = ({ vuex }) => {
|
75 |
-
return new vuex.Store({
|
76 |
-
modules: {
|
77 |
-
templates
|
78 |
-
},
|
79 |
-
state: {}
|
80 |
-
})
|
81 |
-
}
|
82 |
-
|
83 |
-
services['http'] = () => {
|
84 |
-
/*
|
85 |
-
* Create authorized client for requests when nonce
|
86 |
-
* exists in global WPRA variable.
|
87 |
-
*/
|
88 |
-
let httpClientOptions = !!WpraGlobal && !!WpraGlobal.nonce ? {
|
89 |
-
headers: {
|
90 |
-
'X-WP-Nonce': WpraGlobal.nonce,
|
91 |
-
}
|
92 |
-
} : {}
|
93 |
-
return axios.create(httpClientOptions)
|
94 |
-
}
|
95 |
-
|
96 |
-
/*
|
97 |
-
* Register components.
|
98 |
-
*/
|
99 |
-
for(const [name, definition] of Object.entries(components)) {
|
100 |
-
services[name] = () => definition
|
101 |
-
}
|
102 |
-
|
103 |
-
return services
|
104 |
-
},
|
105 |
-
run ({ container }) {
|
106 |
-
/*
|
107 |
-
* Enable tippy.js tooltips.
|
108 |
-
*/
|
109 |
-
container.vue.use(VueTippy, {
|
110 |
-
theme: 'light',
|
111 |
-
animation: 'fade',
|
112 |
-
arrow: true,
|
113 |
-
arrowTransform: 'scale(0)',
|
114 |
-
placement: 'right'
|
115 |
-
})
|
116 |
-
},
|
117 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/templates/index.js
DELETED
@@ -1,36 +0,0 @@
|
|
1 |
-
require('css/src/templates/index.scss')
|
2 |
-
|
3 |
-
import * as UiFramework from '@rebelcode/ui-framework'
|
4 |
-
import Bottle from 'bottlejs'
|
5 |
-
import TemplatesApplication from './app'
|
6 |
-
import Vue from 'vue'
|
7 |
-
|
8 |
-
const { Container, Core, Services } = UiFramework
|
9 |
-
|
10 |
-
/*
|
11 |
-
* Extend UI framework object.
|
12 |
-
*/
|
13 |
-
if (window.UiFramework) {
|
14 |
-
window.UiFramework = Object.assign({}, window.UiFramework, Core.UiFramework)
|
15 |
-
}
|
16 |
-
|
17 |
-
let services = {
|
18 |
-
uiFramework: UiFramework,
|
19 |
-
hooks: new Services.HookService,
|
20 |
-
document: document,
|
21 |
-
vue: function (container) {
|
22 |
-
Vue.use(container.uiFramework.Core.InjectedComponents, {
|
23 |
-
container
|
24 |
-
})
|
25 |
-
return Vue
|
26 |
-
}
|
27 |
-
}
|
28 |
-
const containerFactory = new Container.ContainerFactory(Bottle)
|
29 |
-
const app = new Core.UiFramework.App(containerFactory, services)
|
30 |
-
|
31 |
-
window.UiFramework.registerPlugin('templates-app', TemplatesApplication)
|
32 |
-
|
33 |
-
app.use(WpraTemplates.modules || ['templates-app'])
|
34 |
-
app.init({
|
35 |
-
'#wpra-templates-app': 'App',
|
36 |
-
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/templates/store/actions.js
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
export default {}
|
|
js/src/modules/templates/store/getters.js
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
import collect from 'app/utils/Collection'
|
2 |
-
|
3 |
-
export default {
|
4 |
-
item: state => id => {
|
5 |
-
return collect(state.items).find(id)
|
6 |
-
}
|
7 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/templates/store/index.js
DELETED
@@ -1,12 +0,0 @@
|
|
1 |
-
import mutations from './mutations'
|
2 |
-
import actions from './actions'
|
3 |
-
import state from './state'
|
4 |
-
import getters from './getters'
|
5 |
-
|
6 |
-
export default {
|
7 |
-
namespaced: true,
|
8 |
-
mutations,
|
9 |
-
actions,
|
10 |
-
state,
|
11 |
-
getters,
|
12 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/templates/store/mutations.js
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
export default {
|
2 |
-
set (state, items = []) {
|
3 |
-
state.isInitialized = true
|
4 |
-
state.items = items
|
5 |
-
},
|
6 |
-
|
7 |
-
updatePreset (state, preset = null) {
|
8 |
-
state.preset = preset
|
9 |
-
}
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/modules/templates/store/state.js
DELETED
@@ -1,18 +0,0 @@
|
|
1 |
-
export default {
|
2 |
-
/*
|
3 |
-
* Whether the templates was initialized.
|
4 |
-
*
|
5 |
-
* @todo: remove it. This is trick to not handle proper route params watcher.
|
6 |
-
*/
|
7 |
-
isInitialized: false,
|
8 |
-
|
9 |
-
/*
|
10 |
-
* All loaded template items.
|
11 |
-
*/
|
12 |
-
items: [],
|
13 |
-
|
14 |
-
/*
|
15 |
-
* Predefined template value. Used for items duplication.
|
16 |
-
*/
|
17 |
-
preset: {},
|
18 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/utils/Collection.js
DELETED
@@ -1,178 +0,0 @@
|
|
1 |
-
class Collection {
|
2 |
-
constructor (data, primaryField = 'id') {
|
3 |
-
this.data = data
|
4 |
-
this.primaryField = primaryField
|
5 |
-
return this
|
6 |
-
}
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Find element by params
|
10 |
-
*
|
11 |
-
* @param params
|
12 |
-
* @param _default
|
13 |
-
* @returns {*}
|
14 |
-
*/
|
15 |
-
find (params, _default = null) {
|
16 |
-
if (typeof params !== 'object' && params !== null) {
|
17 |
-
params = {
|
18 |
-
[this.primaryField]: params
|
19 |
-
}
|
20 |
-
}
|
21 |
-
for (let i in this.data) {
|
22 |
-
if (this._isMatching(this.data[i], params)) {
|
23 |
-
return this.data[i]
|
24 |
-
}
|
25 |
-
}
|
26 |
-
|
27 |
-
return _default
|
28 |
-
}
|
29 |
-
|
30 |
-
/**
|
31 |
-
* Get and left only one column
|
32 |
-
*
|
33 |
-
* @param field
|
34 |
-
* @returns {*}
|
35 |
-
*/
|
36 |
-
pluck (field) {
|
37 |
-
return this.data.map((item) => {
|
38 |
-
return item[field]
|
39 |
-
})
|
40 |
-
}
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Remove all elements matching given params
|
44 |
-
*
|
45 |
-
* @param params
|
46 |
-
*/
|
47 |
-
remove (params) {
|
48 |
-
for (let i in this.data) {
|
49 |
-
if (this._isMatching(this.data[i], params)) {
|
50 |
-
this.data.splice(i, 1)
|
51 |
-
}
|
52 |
-
}
|
53 |
-
return this
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* Add data from parameter array that not in
|
58 |
-
* collection;
|
59 |
-
*
|
60 |
-
* @param data
|
61 |
-
*/
|
62 |
-
appendDiff (data) {
|
63 |
-
for (let el of data) {
|
64 |
-
if (!this.contains(el)) {
|
65 |
-
this.data.push(el)
|
66 |
-
}
|
67 |
-
}
|
68 |
-
}
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Add data from parameter array that not in
|
72 |
-
* collection;
|
73 |
-
*
|
74 |
-
* @param data
|
75 |
-
*/
|
76 |
-
prependDiff (data) {
|
77 |
-
for (let el of data.slice().reverse()) {
|
78 |
-
if (!this.contains(el)) {
|
79 |
-
this.data.unshift(el)
|
80 |
-
}
|
81 |
-
}
|
82 |
-
}
|
83 |
-
|
84 |
-
contains (element) {
|
85 |
-
for (let el of this.data) {
|
86 |
-
if (el['id'] == element['id'])
|
87 |
-
return true
|
88 |
-
}
|
89 |
-
return false
|
90 |
-
}
|
91 |
-
|
92 |
-
filterValues (callback) {
|
93 |
-
return Object.keys(this.data).filter(key => {
|
94 |
-
return callback(this.data[key], key)
|
95 |
-
}).reduce((filteredResult, key) => {
|
96 |
-
filteredResult[key] = this.data[key]
|
97 |
-
return filteredResult
|
98 |
-
}, {})
|
99 |
-
}
|
100 |
-
|
101 |
-
filter (params) {
|
102 |
-
return this.data.filter((item) => {
|
103 |
-
return this._isMatching(item, params)
|
104 |
-
})
|
105 |
-
}
|
106 |
-
|
107 |
-
/**
|
108 |
-
* Select all items where value of column in given array
|
109 |
-
*
|
110 |
-
* @param data
|
111 |
-
* @param key
|
112 |
-
* @returns {Array}
|
113 |
-
*/
|
114 |
-
whereIn (data, key = 'id') {
|
115 |
-
let newCollection = [],
|
116 |
-
param = {}
|
117 |
-
|
118 |
-
param[key] = null
|
119 |
-
|
120 |
-
for (let val of data) {
|
121 |
-
param[key] = val
|
122 |
-
|
123 |
-
let item = this.find(param)
|
124 |
-
if (item) {
|
125 |
-
newCollection.push(item)
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
return newCollection
|
130 |
-
}
|
131 |
-
|
132 |
-
key (field) {
|
133 |
-
const data = this.data.slice().reduce((obj, item) => {
|
134 |
-
obj[item[field]] = item
|
135 |
-
return obj
|
136 |
-
}, {})
|
137 |
-
return new Collection(data)
|
138 |
-
}
|
139 |
-
|
140 |
-
mapValues (callback) {
|
141 |
-
Object.keys(this.data).map((key) => {
|
142 |
-
this.data[key] = callback(this.data[key], key)
|
143 |
-
})
|
144 |
-
return this
|
145 |
-
}
|
146 |
-
|
147 |
-
values () {
|
148 |
-
return this.data
|
149 |
-
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* Check element is matching params.
|
153 |
-
*
|
154 |
-
* @param element
|
155 |
-
* @param params
|
156 |
-
* @return {boolean}
|
157 |
-
* @private
|
158 |
-
*/
|
159 |
-
_isMatching (element, params) {
|
160 |
-
if (!(element instanceof Object) && !(params instanceof Object)) {
|
161 |
-
return element == params
|
162 |
-
}
|
163 |
-
|
164 |
-
let match = true
|
165 |
-
for (let key of Object.keys(params)) {
|
166 |
-
let keyMatch = element.hasOwnProperty(key) && (element[key] == params[key])
|
167 |
-
match = match && (keyMatch)
|
168 |
-
}
|
169 |
-
return match
|
170 |
-
}
|
171 |
-
|
172 |
-
}
|
173 |
-
|
174 |
-
function collect (data) {
|
175 |
-
return new Collection(data)
|
176 |
-
}
|
177 |
-
|
178 |
-
export default collect
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/utils/base64.js
DELETED
@@ -1,133 +0,0 @@
|
|
1 |
-
let Base64 = {
|
2 |
-
|
3 |
-
// private property
|
4 |
-
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
5 |
-
|
6 |
-
// public method for encoding
|
7 |
-
encode: function (input) {
|
8 |
-
var output = "";
|
9 |
-
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
10 |
-
var i = 0;
|
11 |
-
|
12 |
-
input = Base64._utf8_encode(input);
|
13 |
-
|
14 |
-
while (i < input.length) {
|
15 |
-
|
16 |
-
chr1 = input.charCodeAt(i++);
|
17 |
-
chr2 = input.charCodeAt(i++);
|
18 |
-
chr3 = input.charCodeAt(i++);
|
19 |
-
|
20 |
-
enc1 = chr1 >> 2;
|
21 |
-
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
22 |
-
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
23 |
-
enc4 = chr3 & 63;
|
24 |
-
|
25 |
-
if (isNaN(chr2)) {
|
26 |
-
enc3 = enc4 = 64;
|
27 |
-
} else if (isNaN(chr3)) {
|
28 |
-
enc4 = 64;
|
29 |
-
}
|
30 |
-
|
31 |
-
output = output +
|
32 |
-
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
|
33 |
-
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
|
34 |
-
|
35 |
-
}
|
36 |
-
|
37 |
-
return output;
|
38 |
-
},
|
39 |
-
|
40 |
-
// public method for decoding
|
41 |
-
decode: function (input) {
|
42 |
-
var output = "";
|
43 |
-
var chr1, chr2, chr3;
|
44 |
-
var enc1, enc2, enc3, enc4;
|
45 |
-
var i = 0;
|
46 |
-
|
47 |
-
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
48 |
-
|
49 |
-
while (i < input.length) {
|
50 |
-
|
51 |
-
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
52 |
-
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
53 |
-
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
54 |
-
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
55 |
-
|
56 |
-
chr1 = (enc1 << 2) | (enc2 >> 4);
|
57 |
-
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
58 |
-
chr3 = ((enc3 & 3) << 6) | enc4;
|
59 |
-
|
60 |
-
output = output + String.fromCharCode(chr1);
|
61 |
-
|
62 |
-
if (enc3 != 64) {
|
63 |
-
output = output + String.fromCharCode(chr2);
|
64 |
-
}
|
65 |
-
if (enc4 != 64) {
|
66 |
-
output = output + String.fromCharCode(chr3);
|
67 |
-
}
|
68 |
-
|
69 |
-
}
|
70 |
-
|
71 |
-
output = Base64._utf8_decode(output);
|
72 |
-
|
73 |
-
return output;
|
74 |
-
|
75 |
-
},
|
76 |
-
|
77 |
-
// private method for UTF-8 encoding
|
78 |
-
_utf8_encode: function (string) {
|
79 |
-
string = string.replace(/\r\n/g, "\n");
|
80 |
-
var utftext = "";
|
81 |
-
|
82 |
-
for (var n = 0; n < string.length; n++) {
|
83 |
-
|
84 |
-
var c = string.charCodeAt(n);
|
85 |
-
|
86 |
-
if (c < 128) {
|
87 |
-
utftext += String.fromCharCode(c);
|
88 |
-
} else if ((c > 127) && (c < 2048)) {
|
89 |
-
utftext += String.fromCharCode((c >> 6) | 192);
|
90 |
-
utftext += String.fromCharCode((c & 63) | 128);
|
91 |
-
} else {
|
92 |
-
utftext += String.fromCharCode((c >> 12) | 224);
|
93 |
-
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
94 |
-
utftext += String.fromCharCode((c & 63) | 128);
|
95 |
-
}
|
96 |
-
|
97 |
-
}
|
98 |
-
|
99 |
-
return utftext;
|
100 |
-
},
|
101 |
-
|
102 |
-
// private method for UTF-8 decoding
|
103 |
-
_utf8_decode: function (utftext) {
|
104 |
-
var string = "";
|
105 |
-
var i = 0;
|
106 |
-
var c = 0, c1 = 0, c2 = 0;
|
107 |
-
|
108 |
-
while (i < utftext.length) {
|
109 |
-
|
110 |
-
c = utftext.charCodeAt(i);
|
111 |
-
|
112 |
-
if (c < 128) {
|
113 |
-
string += String.fromCharCode(c);
|
114 |
-
i++;
|
115 |
-
} else if ((c > 191) && (c < 224)) {
|
116 |
-
c2 = utftext.charCodeAt(i + 1);
|
117 |
-
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
|
118 |
-
i += 2;
|
119 |
-
} else {
|
120 |
-
c2 = utftext.charCodeAt(i + 1);
|
121 |
-
c3 = utftext.charCodeAt(i + 2);
|
122 |
-
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
|
123 |
-
i += 3;
|
124 |
-
}
|
125 |
-
|
126 |
-
}
|
127 |
-
|
128 |
-
return string;
|
129 |
-
}
|
130 |
-
|
131 |
-
}
|
132 |
-
|
133 |
-
export default Base64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/utils/copy.js
DELETED
@@ -1,43 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Helper functions to copy text to clipboard.
|
3 |
-
*
|
4 |
-
* @see https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript
|
5 |
-
*
|
6 |
-
* @param text
|
7 |
-
*/
|
8 |
-
|
9 |
-
const fallbackCopyToClipboard = function (text, scrollContainer = null) {
|
10 |
-
scrollContainer = scrollContainer || document.body.parentElement
|
11 |
-
var textArea = document.createElement('textarea')
|
12 |
-
textArea.value = text
|
13 |
-
|
14 |
-
var currentScrollTop = scrollContainer.scrollTop
|
15 |
-
|
16 |
-
document.body.appendChild(textArea)
|
17 |
-
textArea.focus()
|
18 |
-
textArea.select()
|
19 |
-
|
20 |
-
try {
|
21 |
-
var successful = document.execCommand('copy')
|
22 |
-
var msg = successful ? 'successful' : 'unsuccessful'
|
23 |
-
console.log('Fallback: Copying text command was ' + msg)
|
24 |
-
} catch (err) {
|
25 |
-
console.error('Fallback: Oops, unable to copy', err)
|
26 |
-
}
|
27 |
-
|
28 |
-
document.body.removeChild(textArea)
|
29 |
-
|
30 |
-
scrollContainer.scrollTop = currentScrollTop
|
31 |
-
}
|
32 |
-
|
33 |
-
export function copyToClipboard (text, scrollContainer = null) {
|
34 |
-
if (!navigator.clipboard) {
|
35 |
-
fallbackCopyToClipboard(text, scrollContainer)
|
36 |
-
return
|
37 |
-
}
|
38 |
-
navigator.clipboard.writeText(text).then(function () {
|
39 |
-
console.log('Async: Copying to clipboard was successful!')
|
40 |
-
}, function (err) {
|
41 |
-
console.error('Async: Could not copy text: ', err)
|
42 |
-
})
|
43 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/utils/deepmerge.js
DELETED
@@ -1,72 +0,0 @@
|
|
1 |
-
function isMergeableObject (val) {
|
2 |
-
var nonNullObject = val && typeof val === 'object'
|
3 |
-
|
4 |
-
return nonNullObject
|
5 |
-
&& Object.prototype.toString.call(val) !== '[object RegExp]'
|
6 |
-
&& Object.prototype.toString.call(val) !== '[object Date]'
|
7 |
-
}
|
8 |
-
|
9 |
-
function emptyTarget (val) {
|
10 |
-
return Array.isArray(val) ? [] : {}
|
11 |
-
}
|
12 |
-
|
13 |
-
function cloneIfNecessary (value, optionsArgument) {
|
14 |
-
var clone = optionsArgument && optionsArgument.clone === true
|
15 |
-
return (clone && isMergeableObject(value)) ? deepmerge(emptyTarget(value), value, optionsArgument) : value
|
16 |
-
}
|
17 |
-
|
18 |
-
function defaultArrayMerge (target, source, optionsArgument) {
|
19 |
-
var destination = target.slice()
|
20 |
-
source.forEach(function (e, i) {
|
21 |
-
if (typeof destination[i] === 'undefined') {
|
22 |
-
destination[i] = cloneIfNecessary(e, optionsArgument)
|
23 |
-
} else if (isMergeableObject(e)) {
|
24 |
-
destination[i] = deepmerge(target[i], e, optionsArgument)
|
25 |
-
} else if (target.indexOf(e) === -1) {
|
26 |
-
destination.push(cloneIfNecessary(e, optionsArgument))
|
27 |
-
}
|
28 |
-
})
|
29 |
-
return destination
|
30 |
-
}
|
31 |
-
|
32 |
-
function mergeObject (target, source, optionsArgument) {
|
33 |
-
var destination = {}
|
34 |
-
if (isMergeableObject(target)) {
|
35 |
-
Object.keys(target).forEach(function (key) {
|
36 |
-
destination[key] = cloneIfNecessary(target[key], optionsArgument)
|
37 |
-
})
|
38 |
-
}
|
39 |
-
Object.keys(source).forEach(function (key) {
|
40 |
-
if (!isMergeableObject(source[key]) || !target[key]) {
|
41 |
-
destination[key] = cloneIfNecessary(source[key], optionsArgument)
|
42 |
-
} else {
|
43 |
-
destination[key] = deepmerge(target[key], source[key], optionsArgument)
|
44 |
-
}
|
45 |
-
})
|
46 |
-
return destination
|
47 |
-
}
|
48 |
-
|
49 |
-
function deepmerge (target, source, optionsArgument) {
|
50 |
-
var array = Array.isArray(source)
|
51 |
-
var options = optionsArgument || {arrayMerge: defaultArrayMerge}
|
52 |
-
var arrayMerge = options.arrayMerge || defaultArrayMerge
|
53 |
-
|
54 |
-
if (array) {
|
55 |
-
return Array.isArray(target) ? arrayMerge(target, source, optionsArgument) : cloneIfNecessary(source, optionsArgument)
|
56 |
-
} else {
|
57 |
-
return mergeObject(target, source, optionsArgument)
|
58 |
-
}
|
59 |
-
}
|
60 |
-
|
61 |
-
deepmerge.all = function deepmergeAll (array, optionsArgument) {
|
62 |
-
if (!Array.isArray(array) || array.length < 2) {
|
63 |
-
throw new Error('first argument should be an array with at least two elements')
|
64 |
-
}
|
65 |
-
|
66 |
-
// we are sure there are at least 2 values, so it is safe to have no initial value
|
67 |
-
return array.reduce(function (prev, next) {
|
68 |
-
return deepmerge(prev, next, optionsArgument)
|
69 |
-
})
|
70 |
-
}
|
71 |
-
|
72 |
-
export default deepmerge
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/utils/fetch.js
DELETED
@@ -1,26 +0,0 @@
|
|
1 |
-
/**
|
2 |
-
* Make fetch request and parse response JSON.
|
3 |
-
*
|
4 |
-
* @param url
|
5 |
-
* @param data
|
6 |
-
* @param config
|
7 |
-
*
|
8 |
-
* @return {Promise<Response>}
|
9 |
-
*/
|
10 |
-
export function post (url, data, config = {}) {
|
11 |
-
const preparedData = new FormData()
|
12 |
-
for (let key of Object.keys(data)) {
|
13 |
-
preparedData.set(key, data[key])
|
14 |
-
}
|
15 |
-
return fetch(url, {
|
16 |
-
method: 'post',
|
17 |
-
body: preparedData
|
18 |
-
}).then(response => {
|
19 |
-
return response.json()
|
20 |
-
}).then(data => {
|
21 |
-
if (data.status !== 200) {
|
22 |
-
throw data
|
23 |
-
}
|
24 |
-
return data
|
25 |
-
})
|
26 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/src/utils/jsonClone.js
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
export default function (data) {
|
2 |
-
return JSON.parse(JSON.stringify(data))
|
3 |
-
}
|
|
|
|
|
|
languages/default.mo
CHANGED
Binary file
|
languages/default.po
CHANGED
@@ -1,1745 +1,2914 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
-
"Project-Id-Version:
|
4 |
-
"POT-Creation-Date:
|
5 |
-
"PO-Revision-Date:
|
6 |
"Last-Translator: \n"
|
7 |
-
"Language-Team: \n"
|
|
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
-
"X-Generator: Poedit
|
12 |
-
"X-Poedit-
|
13 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
"X-Poedit-SearchPath-0: .\n"
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
msgstr ""
|
20 |
|
21 |
-
#: includes/
|
22 |
-
msgid "
|
23 |
msgstr ""
|
24 |
|
25 |
-
#: includes/
|
26 |
-
|
27 |
-
"
|
28 |
-
"life and color to your feed item display. For more flexibility Feed to Post "
|
29 |
-
"is a better option."
|
30 |
msgstr ""
|
31 |
|
32 |
-
#: includes/
|
33 |
-
msgid "
|
34 |
msgstr ""
|
35 |
|
36 |
-
#: includes/
|
37 |
-
msgid ""
|
38 |
-
"Assign categories to your feed sources. Then display a particular category "
|
39 |
-
"or multiple categories on a post or page via shortcodes."
|
40 |
msgstr ""
|
41 |
|
42 |
-
#: includes/
|
43 |
-
msgid "
|
44 |
msgstr ""
|
45 |
|
46 |
-
#: includes/
|
47 |
-
msgid ""
|
48 |
-
"Import feeds that contain specific keywords in either the title or their "
|
49 |
-
"content. Control what gets imported to your blog. You can use keywords, "
|
50 |
-
"keyphrases and categories."
|
51 |
msgstr ""
|
52 |
|
53 |
-
#: includes/
|
54 |
-
msgid "
|
55 |
msgstr ""
|
56 |
|
57 |
-
#: includes/
|
58 |
-
msgid ""
|
59 |
-
"Allows you to import feed items into posts or any other custom post type "
|
60 |
-
"that you have created. Takes WP RSS Aggregator to a whole new level of "
|
61 |
-
"flexibility."
|
62 |
msgstr ""
|
63 |
|
64 |
-
#: includes/
|
65 |
-
msgid "
|
66 |
msgstr ""
|
67 |
|
68 |
-
#: includes/
|
69 |
-
msgid ""
|
70 |
-
"This add-ons provides the connectivity to our Full Text Premium service, "
|
71 |
-
"which gives you unlimited feed items returned per feed source."
|
72 |
msgstr ""
|
73 |
|
74 |
-
#: includes/
|
75 |
-
msgid "
|
76 |
msgstr ""
|
77 |
|
78 |
-
#: includes/
|
79 |
msgid ""
|
80 |
-
"
|
81 |
-
"
|
82 |
-
"maintaining human readability."
|
83 |
msgstr ""
|
84 |
|
85 |
-
#: includes/
|
86 |
-
msgid "
|
87 |
msgstr ""
|
88 |
|
89 |
-
#: includes/
|
90 |
-
msgid ""
|
91 |
-
"The following Add-ons are available to increase the functionality of the WP "
|
92 |
-
"RSS Aggregator plugin."
|
93 |
msgstr ""
|
94 |
|
95 |
-
#: includes/
|
96 |
-
msgid ""
|
97 |
-
"Each Add-on can be installed as a separate plugin. Note that activating the "
|
98 |
-
"Feed to Post plugin will deactivate the Categories and Excerpts & Thumbnails "
|
99 |
-
"add-ons."
|
100 |
msgstr ""
|
101 |
|
102 |
-
#: includes/
|
103 |
-
msgid "
|
104 |
msgstr ""
|
105 |
|
106 |
-
#: includes/
|
107 |
-
msgid "
|
|
|
|
|
108 |
msgstr ""
|
109 |
|
110 |
-
#: includes/
|
111 |
msgid ""
|
112 |
"Did you know that you can get more RSS features? Excerpts, thumbnails, "
|
113 |
"keyword filtering, importing into posts and more... "
|
114 |
msgstr ""
|
115 |
|
116 |
-
#: includes/
|
117 |
-
msgid "
|
|
|
118 |
msgstr ""
|
119 |
|
120 |
-
#: includes/
|
121 |
-
|
|
|
122 |
msgstr ""
|
123 |
|
124 |
-
#: includes/
|
125 |
-
msgid "
|
126 |
msgstr ""
|
127 |
|
128 |
-
#: includes/
|
129 |
-
msgid "
|
130 |
msgstr ""
|
131 |
|
132 |
-
#: includes/
|
133 |
-
msgid "
|
134 |
msgstr ""
|
135 |
|
136 |
-
#: includes/
|
137 |
-
msgid "
|
138 |
msgstr ""
|
139 |
|
140 |
-
#: includes/
|
141 |
-
msgid ""
|
142 |
-
"Click the blue button to update all active feed items now. This will check "
|
143 |
-
"all feed sources for any new feed items."
|
144 |
msgstr ""
|
145 |
|
146 |
-
#: includes/
|
147 |
-
|
|
|
148 |
msgstr ""
|
149 |
|
150 |
-
#: includes/
|
151 |
-
msgid ""
|
152 |
-
"<strong>Note:</strong> This might take more than a few seconds if you have "
|
153 |
-
"many feed sources."
|
154 |
msgstr ""
|
155 |
|
156 |
-
#: includes/
|
157 |
-
msgid "
|
158 |
msgstr ""
|
159 |
|
160 |
-
#: includes/
|
161 |
-
msgid "
|
162 |
msgstr ""
|
163 |
|
164 |
-
#: includes/
|
|
|
165 |
msgid ""
|
166 |
-
"
|
|
|
167 |
msgstr ""
|
168 |
|
169 |
-
#: includes/
|
|
|
170 |
msgid ""
|
171 |
-
"<
|
172 |
-
"
|
|
|
173 |
msgstr ""
|
174 |
|
175 |
-
#: includes/
|
176 |
-
|
|
|
|
|
|
|
|
|
177 |
msgstr ""
|
178 |
|
179 |
-
#: includes/
|
180 |
-
msgid "
|
181 |
msgstr ""
|
182 |
|
183 |
-
#: includes/
|
184 |
-
msgid "
|
185 |
msgstr ""
|
186 |
|
187 |
-
#: includes/
|
188 |
-
msgid ""
|
189 |
-
"<em><strong>Note:</strong> This cannot be undone. Once the settings have "
|
190 |
-
"been reset, your old settings cannot be restored.</em>"
|
191 |
msgstr ""
|
192 |
|
193 |
-
#: includes/
|
194 |
-
msgid "
|
195 |
msgstr ""
|
196 |
|
197 |
-
#: includes/
|
198 |
-
msgid "
|
199 |
msgstr ""
|
200 |
|
201 |
-
#: includes/
|
202 |
-
msgid "
|
203 |
msgstr ""
|
204 |
|
205 |
-
#: includes/
|
206 |
-
msgid "
|
207 |
msgstr ""
|
208 |
|
209 |
-
#: includes/
|
210 |
-
msgid "
|
211 |
msgstr ""
|
212 |
|
213 |
-
#: includes/
|
214 |
-
msgid "
|
|
|
215 |
msgstr ""
|
216 |
|
217 |
-
#: includes/admin-
|
218 |
-
msgid "
|
219 |
msgstr ""
|
220 |
|
221 |
-
#: includes/admin-display.php:
|
222 |
-
msgid "
|
223 |
msgstr ""
|
224 |
|
225 |
-
#: includes/admin-display.php:
|
226 |
-
|
|
|
227 |
msgstr ""
|
228 |
|
229 |
-
#: includes/admin-display.php:
|
230 |
msgid "Updates"
|
231 |
msgstr ""
|
232 |
|
233 |
-
#: includes/admin-display.php:
|
234 |
-
msgid ""
|
235 |
-
|
236 |
-
|
237 |
-
|
|
|
|
|
|
|
|
|
|
|
238 |
msgstr ""
|
239 |
|
240 |
-
#: includes/admin-display.php:
|
241 |
msgid "None"
|
242 |
msgstr ""
|
243 |
|
244 |
-
#: includes/admin-display.php:
|
245 |
-
|
246 |
-
msgid "Paused"
|
247 |
msgstr ""
|
248 |
|
249 |
-
#: includes/admin-display.php:
|
250 |
-
msgid "Next update
|
251 |
msgstr ""
|
252 |
|
253 |
-
#: includes/admin-display.php:
|
254 |
-
|
|
|
255 |
msgstr ""
|
256 |
|
257 |
-
#: includes/admin-display.php:
|
258 |
#, php-format
|
259 |
msgid "%1$s ago"
|
260 |
msgstr ""
|
261 |
|
262 |
-
#: includes/admin-display.php:
|
263 |
-
|
|
|
|
|
|
|
|
|
264 |
msgid ""
|
265 |
-
"
|
|
|
|
|
266 |
msgstr ""
|
267 |
|
268 |
-
#: includes/admin-display.php:
|
269 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
270 |
msgstr ""
|
271 |
|
272 |
-
#: includes/admin-display.php:
|
273 |
msgid "Permalink"
|
274 |
msgstr ""
|
275 |
|
276 |
-
#: includes/admin-display.php:
|
277 |
msgid "Date published"
|
278 |
msgstr ""
|
279 |
|
280 |
-
#: includes/admin-display.php:
|
281 |
msgid "Source"
|
282 |
msgstr ""
|
283 |
|
284 |
-
#: includes/admin-display.php:
|
285 |
msgid "Feed source updated. "
|
286 |
msgstr ""
|
287 |
|
288 |
-
#: includes/admin-display.php:
|
289 |
msgid "Custom field updated."
|
290 |
msgstr ""
|
291 |
|
292 |
-
#: includes/admin-display.php:
|
293 |
msgid "Custom field deleted."
|
294 |
msgstr ""
|
295 |
|
296 |
-
#: includes/admin-display.php:
|
297 |
msgid "Feed source updated."
|
298 |
msgstr ""
|
299 |
|
300 |
-
#: includes/admin-display.php:
|
301 |
msgid "Feed source saved."
|
302 |
msgstr ""
|
303 |
|
304 |
-
#: includes/admin-display.php:
|
305 |
msgid "Feed source submitted."
|
306 |
msgstr ""
|
307 |
|
308 |
-
#: includes/admin-display.php:
|
309 |
#, php-format
|
310 |
msgid "ID: %1$s"
|
311 |
msgstr ""
|
312 |
|
313 |
-
#: includes/admin-display.php:
|
314 |
-
msgid "
|
315 |
-
msgstr ""
|
316 |
-
|
317 |
-
#: includes/admin-display.php:355
|
318 |
-
msgid "Fetch Items"
|
319 |
msgstr ""
|
320 |
|
321 |
-
#: includes/admin-display.php:
|
322 |
-
msgid "
|
323 |
msgstr ""
|
324 |
|
325 |
-
#: includes/admin-display.php:
|
326 |
-
msgid "
|
327 |
msgstr ""
|
328 |
|
329 |
-
#: includes/admin-display.php:
|
330 |
msgid "Publish Feed"
|
331 |
msgstr ""
|
332 |
|
333 |
-
#: includes/admin-editor.php:
|
334 |
msgid ""
|
335 |
-
"
|
336 |
-
"
|
|
|
337 |
msgstr ""
|
338 |
|
339 |
-
#: includes/admin-editor.php:
|
340 |
-
|
341 |
-
msgid "Feed Sources"
|
342 |
msgstr ""
|
343 |
|
344 |
-
#: includes/admin-editor.php:
|
|
|
|
|
|
|
|
|
345 |
msgid "All feed sources"
|
346 |
msgstr ""
|
347 |
|
348 |
-
#: includes/admin-editor.php:
|
349 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
350 |
msgstr ""
|
351 |
|
352 |
-
#: includes/admin-editor.php:
|
353 |
-
|
|
|
354 |
msgstr ""
|
355 |
|
356 |
-
#: includes/admin-editor.php:
|
357 |
-
msgid "
|
358 |
msgstr ""
|
359 |
|
360 |
-
#: includes/admin-editor.php:
|
361 |
-
msgid "
|
362 |
msgstr ""
|
363 |
|
364 |
-
#: includes/admin-editor.php:
|
365 |
-
msgid "
|
366 |
msgstr ""
|
367 |
|
368 |
-
#: includes/admin-editor.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
369 |
msgid "Add shortcode"
|
370 |
msgstr ""
|
371 |
|
372 |
-
#: includes/admin-
|
|
|
|
|
|
|
|
|
|
|
373 |
msgid ""
|
374 |
"The URL of the feed source. In most cases, the URL of the site will also "
|
375 |
"work, but for best results we recommend trying to find the URL of the RSS "
|
376 |
"feed.\n"
|
377 |
"\n"
|
378 |
-
"
|
379 |
-
"
|
380 |
msgstr ""
|
381 |
|
382 |
-
#: includes/admin-help-metaboxes.php:
|
383 |
msgid ""
|
384 |
"The maximum number of imported items from this feed to keep stored.\n"
|
385 |
"\n"
|
386 |
-
"
|
387 |
-
"
|
388 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
389 |
"\n"
|
390 |
-
"
|
391 |
-
"
|
392 |
-
"
|
|
|
393 |
msgstr ""
|
394 |
|
395 |
-
#: includes/admin-help-metaboxes.php:
|
396 |
msgid ""
|
397 |
-
"Tick this box to
|
398 |
-
"
|
399 |
"\n"
|
400 |
-
"
|
401 |
-
"
|
402 |
-
"audio, videos, attachment files or even flash content.\n"
|
403 |
"\n"
|
404 |
-
"
|
405 |
-
"
|
406 |
msgstr ""
|
407 |
|
408 |
-
#: includes/admin-help-metaboxes.php:
|
409 |
msgid ""
|
410 |
"State of the feed, active or paused.\n"
|
411 |
"\n"
|
412 |
-
"
|
413 |
-
"
|
414 |
"\n"
|
415 |
-
"
|
416 |
-
"fetch feed items periodically."
|
417 |
msgstr ""
|
418 |
|
419 |
-
#: includes/admin-help-metaboxes.php:
|
420 |
msgid ""
|
421 |
"You can set a time, in UTC, in the future when the feed source will become "
|
422 |
"active, if it is paused.\n"
|
423 |
"\n"
|
424 |
-
"
|
425 |
msgstr ""
|
426 |
|
427 |
-
#: includes/admin-help-metaboxes.php:
|
428 |
msgid ""
|
429 |
"You can set a time, in UTC, in the future when the feed source will become "
|
430 |
"paused, if it is active.\n"
|
431 |
"\n"
|
432 |
-
"
|
433 |
msgstr ""
|
434 |
|
435 |
-
#: includes/admin-help-metaboxes.php:
|
436 |
msgid ""
|
437 |
"How frequently the feed source should check for new items and fetch if "
|
438 |
"needed.\n"
|
439 |
"\n"
|
440 |
-
"
|
441 |
-
"interval in the global settings is used."
|
442 |
msgstr ""
|
443 |
|
444 |
-
#: includes/admin-help-metaboxes.php:
|
445 |
msgid ""
|
446 |
"The maximum age allowed for feed items. Very useful if you are only "
|
447 |
"concerned with, say, last week's news.\n"
|
448 |
"\n"
|
449 |
-
"
|
450 |
-
"
|
451 |
"\n"
|
452 |
-
"
|
453 |
-
"
|
454 |
"\n"
|
455 |
-
"
|
456 |
-
"
|
457 |
msgstr ""
|
458 |
|
459 |
-
#: includes/admin-help-metaboxes.php:
|
460 |
msgid ""
|
461 |
"Use this option if you are seeing an <q>Invalid feed URL</q> error in the "
|
462 |
"Feed Preview above, but you are sure that the URL is correct.\n"
|
463 |
"\n"
|
464 |
-
"
|
465 |
-
"
|
466 |
-
"the site's URL will not work."
|
467 |
msgstr ""
|
468 |
|
469 |
-
#: includes/admin-help-settings.php:
|
470 |
msgid ""
|
471 |
"The maximum age allowed for feed items.\n"
|
472 |
-
"
|
473 |
"\n"
|
474 |
-
"
|
475 |
-
"
|
476 |
"\n"
|
477 |
-
"
|
478 |
-
"
|
479 |
-
"
|
480 |
"\n"
|
481 |
-
"
|
482 |
-
"em>"
|
483 |
msgstr ""
|
484 |
|
485 |
-
#: includes/admin-help-settings.php:
|
486 |
msgid ""
|
487 |
"The maximum number of imported items to keep stored, for feed sources that "
|
488 |
"do not have their own limit.\n"
|
489 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
490 |
"\n"
|
491 |
-
"
|
492 |
-
"
|
493 |
-
"
|
|
|
|
|
494 |
"\n"
|
495 |
-
"
|
496 |
-
"
|
497 |
-
"
|
498 |
-
"
|
499 |
-
"
|
500 |
-
|
501 |
-
|
|
|
|
|
|
|
|
|
|
|
502 |
msgstr ""
|
503 |
|
504 |
-
#: includes/admin-help-settings.php:
|
505 |
msgid ""
|
506 |
"How frequently should the feed sources (that do not have their own update "
|
507 |
"interval) check for updates and fetch items accordingly.\n"
|
508 |
"\n"
|
509 |
-
"
|
510 |
-
"
|
511 |
-
"
|
512 |
-
"System to crash."
|
513 |
msgstr ""
|
514 |
|
515 |
-
#: includes/admin-help-settings.php:
|
516 |
msgid ""
|
517 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
518 |
"feed url]</code>.\n"
|
519 |
-
"
|
520 |
"\n"
|
521 |
-
"
|
522 |
-
"
|
523 |
-
"
|
524 |
"\n"
|
525 |
-
"
|
526 |
"\n"
|
527 |
-
"
|
528 |
-
"
|
529 |
-
"
|
530 |
-
"clicking <em>Save</em>."
|
531 |
msgstr ""
|
532 |
|
533 |
-
#: includes/admin-help-settings.php:
|
534 |
msgid ""
|
535 |
"The title of the custom feed.\n"
|
536 |
"\n"
|
537 |
-
"
|
538 |
-
"
|
539 |
msgstr ""
|
540 |
|
541 |
-
#: includes/admin-help-settings.php:
|
542 |
msgid "The maximum number of feed items in the custom feed."
|
543 |
msgstr ""
|
544 |
|
545 |
-
#: includes/admin-help-settings.php:
|
546 |
msgid ""
|
547 |
"Check this box to make the feed item titles link to the original article."
|
548 |
msgstr ""
|
549 |
|
550 |
-
#: includes/admin-help-settings.php:
|
551 |
msgid ""
|
552 |
"Set the maximum number of characters to show for feed item titles.\n"
|
553 |
-
"
|
554 |
"\n"
|
555 |
-
"
|
556 |
-
"em>"
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: includes/admin-help-settings.php:
|
560 |
msgid ""
|
561 |
"Check this box to show the author for each feed item, if it is available."
|
562 |
msgstr ""
|
563 |
|
564 |
-
#: includes/admin-help-settings.php:
|
565 |
msgid ""
|
566 |
"For feed items from YouTube, Vimeo or Dailymotion, you can choose whether "
|
567 |
"you want to have the items link to the original page link, or a link to the "
|
568 |
"embedded video player only."
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: includes/admin-help-settings.php:
|
572 |
msgid ""
|
573 |
"The type of pagination to use when showing feed items on multiple pages.\n"
|
574 |
"\n"
|
575 |
-
"
|
576 |
-
"
|
577 |
"\n"
|
578 |
-
"
|
579 |
-
"
|
580 |
msgstr ""
|
581 |
|
582 |
-
#: includes/admin-help-settings.php:
|
583 |
msgid ""
|
584 |
"The maximum number of feed items to display when using the shortcode.\n"
|
585 |
"\n"
|
586 |
-
"
|
587 |
-
"to
|
588 |
msgstr ""
|
589 |
|
590 |
-
#: includes/admin-help-settings.php:
|
591 |
msgid ""
|
592 |
"Choose how you want links to be opened. This applies to the feed item title "
|
593 |
"and the source link."
|
594 |
msgstr ""
|
595 |
|
596 |
-
#: includes/admin-help-settings.php:
|
597 |
msgid ""
|
598 |
"Enable this option to set all links displayed as \"NoFollow\".\n"
|
599 |
-
"
|
600 |
"\n"
|
601 |
-
"
|
602 |
-
"
|
603 |
-
"feed items in this case."
|
604 |
msgstr ""
|
605 |
|
606 |
-
#: includes/admin-help-settings.php:
|
607 |
msgid "Enable this option to show the feed source name for each feed item."
|
608 |
msgstr ""
|
609 |
|
610 |
-
#: includes/admin-help-settings.php:
|
611 |
msgid ""
|
612 |
"Enter the text that you want to show before the source name. A space is "
|
613 |
"automatically added between this text and the feed source name."
|
614 |
msgstr ""
|
615 |
|
616 |
-
#: includes/admin-help-settings.php:
|
617 |
msgid ""
|
618 |
"Enable this option to link the feed source name to the RSS feed's source "
|
619 |
"site."
|
620 |
msgstr ""
|
621 |
|
622 |
-
#: includes/admin-help-settings.php:
|
623 |
msgid "Enable this to show the feed item's date."
|
624 |
msgstr ""
|
625 |
|
626 |
-
#: includes/admin-help-settings.php:
|
627 |
msgid ""
|
628 |
"Enter the text that you want to show before the feed item date. A space is "
|
629 |
"automatically added between this text and the date."
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: includes/admin-help-settings.php:
|
633 |
msgid "The format to use for the feed item dates, as a PHP date format."
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: includes/admin-help-settings.php:
|
637 |
msgid ""
|
638 |
"Enable this option to show the elapsed time from the feed item's date and "
|
639 |
"time to the present time.\n"
|
640 |
-
"
|
641 |
msgstr ""
|
642 |
|
643 |
-
#: includes/admin-help-settings.php:
|
644 |
msgid ""
|
645 |
"Check this box to disable all plugin styles used for displaying feed items.\n"
|
646 |
"\n"
|
647 |
-
"
|
648 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
649 |
msgstr ""
|
650 |
|
651 |
-
#: includes/admin-help.php:
|
652 |
msgid "Help & Support"
|
653 |
msgstr ""
|
654 |
|
655 |
-
#: includes/admin-help.php:
|
656 |
-
msgid "
|
657 |
msgstr ""
|
658 |
|
659 |
-
#: includes/admin-help.php:
|
|
|
660 |
msgid ""
|
661 |
-
"In the <a href=\"
|
662 |
-
"
|
663 |
-
"
|
664 |
-
"\
|
665 |
-
"\t\t\t\tThere are also some videos to help you make a quick start to
|
666 |
-
"up and enjoying this plugin."
|
667 |
msgstr ""
|
668 |
|
669 |
-
#: includes/admin-help.php:
|
670 |
msgid "Frequently Asked Questions (FAQ)"
|
671 |
msgstr ""
|
672 |
|
673 |
-
#: includes/admin-help.php:
|
|
|
674 |
msgid ""
|
675 |
-
"If after going through the
|
676 |
-
"take a look at the <a href=\"
|
677 |
-
"
|
678 |
-
"questions by our users."
|
679 |
msgstr ""
|
680 |
|
681 |
-
#: includes/admin-help.php:
|
682 |
-
msgid "
|
683 |
msgstr ""
|
684 |
|
685 |
-
#: includes/admin-help.php:
|
686 |
msgid ""
|
687 |
-
"
|
688 |
-
"
|
689 |
-
"rss-aggregator\">support forum</a>."
|
690 |
msgstr ""
|
691 |
|
692 |
-
#: includes/admin-help.php:
|
693 |
-
msgid "
|
|
|
|
|
694 |
msgstr ""
|
695 |
|
696 |
-
#: includes/admin-help.php:
|
697 |
msgid ""
|
698 |
-
"
|
699 |
-
"
|
700 |
-
"
|
701 |
-
"\t\t\t\t\tWe'll be happy to help you out."
|
702 |
msgstr ""
|
703 |
|
704 |
-
#: includes/admin-help.php:
|
705 |
msgid ""
|
706 |
-
"
|
|
|
707 |
msgstr ""
|
708 |
|
709 |
-
#: includes/admin-
|
710 |
-
|
711 |
-
msgid "Successfully imported <code>%1$s</code> feed sources."
|
712 |
msgstr ""
|
713 |
|
714 |
-
#: includes/admin-
|
715 |
-
msgid "
|
716 |
msgstr ""
|
717 |
|
718 |
-
#: includes/admin-
|
719 |
-
msgid "
|
|
|
720 |
msgstr ""
|
721 |
|
722 |
-
#: includes/admin-
|
723 |
-
msgid "
|
724 |
msgstr ""
|
725 |
|
726 |
-
#: includes/admin-
|
727 |
-
msgid "
|
728 |
msgstr ""
|
729 |
|
730 |
-
#: includes/admin-
|
|
|
731 |
msgid ""
|
732 |
-
"
|
733 |
-
"
|
734 |
msgstr ""
|
735 |
|
736 |
-
#: includes/admin-
|
737 |
-
msgid "
|
738 |
msgstr ""
|
739 |
|
740 |
-
#: includes/admin-
|
741 |
-
msgid "
|
|
|
|
|
|
|
742 |
msgstr ""
|
743 |
|
744 |
-
#: includes/admin-
|
745 |
-
msgid "
|
746 |
msgstr ""
|
747 |
|
748 |
-
#: includes/admin-
|
749 |
-
msgid "
|
750 |
msgstr ""
|
751 |
|
752 |
-
#: includes/admin-
|
753 |
-
msgid "
|
754 |
msgstr ""
|
755 |
|
756 |
-
#: includes/admin-
|
757 |
-
msgid ""
|
758 |
-
"Click the <strong>Export Settings</strong> button to generate a file "
|
759 |
-
"containing all the settings used by WP RSS Aggregator"
|
760 |
msgstr ""
|
761 |
|
762 |
-
#: includes/admin-
|
763 |
-
msgid ""
|
764 |
-
"After exporting, you can either use the backup file to restore your settings "
|
765 |
-
"to this site or to another WordPress site."
|
766 |
msgstr ""
|
767 |
|
768 |
-
#: includes/admin-
|
769 |
-
msgid "
|
770 |
msgstr ""
|
771 |
|
772 |
-
#: includes/admin-
|
773 |
-
msgid "
|
774 |
msgstr ""
|
775 |
|
776 |
-
#: includes/admin-
|
|
|
777 |
msgid ""
|
778 |
-
"
|
779 |
-
"
|
780 |
msgstr ""
|
781 |
|
782 |
-
#: includes/admin-
|
783 |
-
|
|
|
|
|
|
|
784 |
msgstr ""
|
785 |
|
786 |
-
#: includes/admin-
|
787 |
#, php-format
|
788 |
msgid ""
|
789 |
-
"
|
790 |
-
"
|
791 |
-
"functionality."
|
792 |
msgstr ""
|
793 |
|
794 |
-
#: includes/admin-
|
795 |
-
|
|
|
|
|
|
|
796 |
msgid ""
|
797 |
-
"
|
798 |
-
|
799 |
-
|
800 |
-
|
|
|
801 |
msgstr ""
|
802 |
|
803 |
-
#: includes/admin-
|
804 |
#, php-format
|
805 |
-
msgid ""
|
806 |
-
|
807 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
808 |
msgstr ""
|
809 |
|
810 |
-
#: includes/admin-
|
811 |
-
|
|
|
812 |
msgstr ""
|
813 |
|
814 |
-
#: includes/admin-metaboxes.php:
|
815 |
msgid "Save Feed Source"
|
816 |
msgstr ""
|
817 |
|
818 |
-
#: includes/admin-metaboxes.php:
|
819 |
msgid "Feed Preview"
|
820 |
msgstr ""
|
821 |
|
822 |
-
#: includes/admin-metaboxes.php:
|
823 |
msgid "Feed Processing"
|
824 |
msgstr ""
|
825 |
|
826 |
-
#: includes/admin-metaboxes.php:
|
827 |
-
msgid "
|
828 |
msgstr ""
|
829 |
|
830 |
-
#: includes/admin-metaboxes.php:
|
831 |
msgid "Feed Source Details"
|
832 |
msgstr ""
|
833 |
|
834 |
-
#: includes/admin-metaboxes.php:
|
835 |
-
#: includes/opml-importer.php:227
|
836 |
msgid "URL"
|
837 |
msgstr ""
|
838 |
|
839 |
-
#: includes/admin-metaboxes.php:
|
840 |
msgid "Limit"
|
841 |
msgstr ""
|
842 |
|
843 |
-
#: includes/admin-metaboxes.php:
|
844 |
msgid "Link to enclosure"
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: includes/admin-metaboxes.php:
|
848 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
849 |
msgid "Default"
|
850 |
msgstr ""
|
851 |
|
852 |
-
#: includes/admin-metaboxes.php:
|
|
|
|
|
|
|
|
|
853 |
#, php-format
|
854 |
msgid "Latest %1$s feed items out of %2$s available from %3$s"
|
855 |
msgstr ""
|
856 |
|
857 |
-
#: includes/admin-metaboxes.php:
|
858 |
msgid "ago"
|
859 |
msgstr ""
|
860 |
|
861 |
-
#: includes/admin-metaboxes.php:
|
862 |
msgid "No Date"
|
863 |
msgstr ""
|
864 |
|
865 |
-
#: includes/admin-metaboxes.php:
|
866 |
msgid ""
|
867 |
"<strong>Invalid feed URL</strong> - Double check the feed source URL setting "
|
868 |
"above."
|
869 |
msgstr ""
|
870 |
|
871 |
-
#: includes/admin-metaboxes.php:
|
872 |
#, php-format
|
873 |
msgid ""
|
874 |
"Not sure where to find the RSS feed on a website? <a target=\"_blank\" href="
|
875 |
"\"%1$s\">Click here</a> for a visual guide. "
|
876 |
msgstr ""
|
877 |
|
878 |
-
#: includes/admin-metaboxes.php:
|
879 |
-
msgid "
|
880 |
msgstr ""
|
881 |
|
882 |
-
#: includes/admin-metaboxes.php:
|
883 |
-
msgid "
|
884 |
msgstr ""
|
885 |
|
886 |
-
#: includes/admin-metaboxes.php:
|
887 |
msgid "Active"
|
888 |
msgstr ""
|
889 |
|
890 |
-
#: includes/admin-metaboxes.php:
|
891 |
-
msgid "
|
892 |
msgstr ""
|
893 |
|
894 |
-
#: includes/admin-metaboxes.php:
|
895 |
-
msgid "
|
896 |
msgstr ""
|
897 |
|
898 |
-
#: includes/admin-metaboxes.php:
|
899 |
-
msgid "
|
900 |
msgstr ""
|
901 |
|
902 |
-
#: includes/admin-metaboxes.php:
|
903 |
-
msgid "
|
904 |
msgstr ""
|
905 |
|
906 |
-
#: includes/admin-metaboxes.php:
|
907 |
-
msgid "
|
908 |
msgstr ""
|
909 |
|
910 |
-
#: includes/admin-metaboxes.php:
|
911 |
-
msgid "
|
912 |
msgstr ""
|
913 |
|
914 |
-
#: includes/admin-metaboxes.php:
|
915 |
msgid "Follow WP Mayor on Twitter."
|
916 |
msgstr ""
|
917 |
|
918 |
-
#: includes/admin-metaboxes.php:
|
919 |
msgid "Like WP Mayor on Facebook."
|
920 |
msgstr ""
|
921 |
|
922 |
-
#: includes/admin-options.php:
|
923 |
-
msgid "
|
924 |
msgstr ""
|
925 |
|
926 |
-
#: includes/admin-options.php:
|
927 |
-
msgid "
|
928 |
msgstr ""
|
929 |
|
930 |
-
#: includes/admin-options.php:
|
931 |
-
msgid "
|
932 |
msgstr ""
|
933 |
|
934 |
-
#: includes/admin-options.php:
|
935 |
-
msgid "
|
936 |
msgstr ""
|
937 |
|
938 |
-
#: includes/admin-options.php:
|
939 |
-
msgid "
|
940 |
msgstr ""
|
941 |
|
942 |
-
#: includes/admin-options.php:
|
943 |
-
msgid "
|
944 |
msgstr ""
|
945 |
|
946 |
-
#: includes/admin-options.php:
|
947 |
-
msgid "
|
948 |
msgstr ""
|
949 |
|
950 |
-
#: includes/admin-options.php:
|
951 |
-
msgid "
|
952 |
msgstr ""
|
953 |
|
954 |
-
#: includes/admin-options.php:
|
955 |
-
msgid "
|
956 |
msgstr ""
|
957 |
|
958 |
-
#: includes/admin-options.php:
|
959 |
-
msgid "
|
960 |
msgstr ""
|
961 |
|
962 |
-
#: includes/admin-options.php:
|
963 |
-
msgid "
|
964 |
msgstr ""
|
965 |
|
966 |
-
#: includes/admin-options.php:
|
967 |
-
msgid "
|
968 |
msgstr ""
|
969 |
|
970 |
-
#: includes/admin-options.php:
|
971 |
-
msgid "
|
972 |
msgstr ""
|
973 |
|
974 |
-
#: includes/admin-options.php:
|
975 |
-
msgid "
|
976 |
msgstr ""
|
977 |
|
978 |
-
#: includes/admin-options.php:
|
979 |
-
msgid "
|
980 |
msgstr ""
|
981 |
|
982 |
-
#: includes/admin-options.php:
|
983 |
-
msgid "
|
984 |
msgstr ""
|
985 |
|
986 |
-
#: includes/admin-options.php:
|
987 |
-
msgid "
|
988 |
msgstr ""
|
989 |
|
990 |
-
#: includes/admin-options.php:
|
991 |
-
msgid "
|
|
|
|
|
992 |
msgstr ""
|
993 |
|
994 |
-
#: includes/admin-options.php:
|
995 |
-
msgid "
|
996 |
msgstr ""
|
997 |
|
998 |
-
#: includes/admin-options.php:
|
999 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1000 |
msgstr ""
|
1001 |
|
1002 |
-
#:
|
1003 |
-
msgid "
|
1004 |
msgstr ""
|
1005 |
|
1006 |
-
#:
|
1007 |
-
msgid "
|
1008 |
msgstr ""
|
1009 |
|
1010 |
-
#:
|
1011 |
-
msgid "
|
1012 |
msgstr ""
|
1013 |
|
1014 |
-
#:
|
1015 |
-
|
|
|
1016 |
msgstr ""
|
1017 |
|
1018 |
-
#:
|
1019 |
-
msgid "
|
1020 |
msgstr ""
|
1021 |
|
1022 |
-
#:
|
1023 |
-
msgid "
|
1024 |
msgstr ""
|
1025 |
|
1026 |
-
#:
|
1027 |
-
msgid "
|
1028 |
msgstr ""
|
1029 |
|
1030 |
-
#:
|
1031 |
-
|
|
|
|
|
|
|
|
|
1032 |
msgstr ""
|
1033 |
|
1034 |
-
#:
|
1035 |
-
msgid "
|
1036 |
msgstr ""
|
1037 |
|
1038 |
-
#:
|
1039 |
-
msgid "
|
1040 |
msgstr ""
|
1041 |
|
1042 |
-
#:
|
1043 |
-
msgid "
|
1044 |
msgstr ""
|
1045 |
|
1046 |
-
#:
|
1047 |
-
msgid "
|
1048 |
msgstr ""
|
1049 |
|
1050 |
-
#:
|
1051 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1052 |
msgstr ""
|
1053 |
|
1054 |
-
#:
|
1055 |
-
|
|
|
1056 |
msgstr ""
|
1057 |
|
1058 |
-
#:
|
1059 |
msgid ""
|
1060 |
-
"
|
1061 |
-
"items
|
|
|
1062 |
msgstr ""
|
1063 |
|
1064 |
-
#:
|
1065 |
-
msgid "
|
|
|
|
|
1066 |
msgstr ""
|
1067 |
|
1068 |
-
#:
|
1069 |
-
msgid "
|
1070 |
msgstr ""
|
1071 |
|
1072 |
-
#:
|
1073 |
msgid ""
|
1074 |
-
"
|
1075 |
-
"
|
|
|
|
|
1076 |
msgstr ""
|
1077 |
|
1078 |
-
#:
|
1079 |
-
msgid "
|
|
|
|
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#:
|
1083 |
-
msgid "
|
|
|
|
|
1084 |
msgstr ""
|
1085 |
|
1086 |
-
#:
|
1087 |
-
msgid "
|
|
|
|
|
|
|
1088 |
msgstr ""
|
1089 |
|
1090 |
-
#:
|
1091 |
-
msgid "
|
|
|
|
|
|
|
1092 |
msgstr ""
|
1093 |
|
1094 |
-
#:
|
1095 |
-
msgid "
|
1096 |
msgstr ""
|
1097 |
|
1098 |
-
#:
|
1099 |
-
msgid "
|
1100 |
msgstr ""
|
1101 |
|
1102 |
-
#:
|
1103 |
-
msgid "
|
|
|
|
|
|
|
1104 |
msgstr ""
|
1105 |
|
1106 |
-
#:
|
1107 |
-
|
|
|
1108 |
msgstr ""
|
1109 |
|
1110 |
-
#:
|
1111 |
-
msgid "
|
1112 |
msgstr ""
|
1113 |
|
1114 |
-
#:
|
1115 |
-
msgid "
|
1116 |
msgstr ""
|
1117 |
|
1118 |
-
#:
|
1119 |
-
msgid "
|
1120 |
msgstr ""
|
1121 |
|
1122 |
-
#:
|
1123 |
-
msgid "
|
1124 |
msgstr ""
|
1125 |
|
1126 |
-
#:
|
1127 |
-
msgid "
|
1128 |
msgstr ""
|
1129 |
|
1130 |
-
#:
|
1131 |
-
msgid "
|
1132 |
msgstr ""
|
1133 |
|
1134 |
-
#:
|
1135 |
-
msgid ""
|
1136 |
-
"Enter the code to use to securely reset the plugin and deactivate it. Be "
|
1137 |
-
"sure to save this code somewhere safe."
|
1138 |
msgstr ""
|
1139 |
|
1140 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1141 |
msgid ""
|
1142 |
-
"
|
1143 |
-
"
|
1144 |
-
"
|
|
|
|
|
|
|
|
|
1145 |
msgstr ""
|
1146 |
|
1147 |
-
#:
|
1148 |
-
msgid "
|
1149 |
msgstr ""
|
1150 |
|
1151 |
-
#:
|
1152 |
-
msgid "
|
1153 |
msgstr ""
|
1154 |
|
1155 |
-
#:
|
1156 |
-
msgid "
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#:
|
1160 |
-
msgid ""
|
1161 |
-
"Use the above actions only when absolutely necessary, or when instructed to "
|
1162 |
-
"by support staff."
|
1163 |
msgstr ""
|
1164 |
|
1165 |
-
#:
|
1166 |
-
msgid ""
|
1167 |
-
"Please help us improve WP RSS Aggregator by allowing us to gather anonymous "
|
1168 |
-
"usage statistics. No sensitive data is collected."
|
1169 |
msgstr ""
|
1170 |
|
1171 |
-
#:
|
1172 |
-
msgid "
|
1173 |
msgstr ""
|
1174 |
|
1175 |
-
#:
|
1176 |
-
msgid "
|
1177 |
msgstr ""
|
1178 |
|
1179 |
-
#:
|
1180 |
-
|
1181 |
-
msgid "Welcome to WP RSS Aggregator %1$s!"
|
1182 |
msgstr ""
|
1183 |
|
1184 |
-
#:
|
1185 |
-
msgid "
|
1186 |
msgstr ""
|
1187 |
|
1188 |
-
#:
|
1189 |
-
msgid "
|
1190 |
msgstr ""
|
1191 |
|
1192 |
-
#:
|
1193 |
-
msgid "
|
1194 |
msgstr ""
|
1195 |
|
1196 |
-
#:
|
1197 |
-
|
1198 |
-
msgid ""
|
1199 |
-
"The new bulk adding option saves you time by allowing you to enter your feed "
|
1200 |
-
"names and URLs all at once.\n"
|
1201 |
-
"\t\t\t\t\t\t\t\t\t\tSimply type in or paste your feed sources, and with the "
|
1202 |
-
"press of a button, your feed sources will instantly be created!\n"
|
1203 |
-
"\t\t\t\t\t\t\t\t\t\tTry it now from the <a href=\"%1$s\">Import & "
|
1204 |
-
"Export</a> page."
|
1205 |
msgstr ""
|
1206 |
|
1207 |
-
#:
|
1208 |
-
msgid "
|
|
|
|
|
|
|
1209 |
msgstr ""
|
1210 |
|
1211 |
-
#:
|
1212 |
-
msgid "
|
|
|
|
|
|
|
|
|
1213 |
msgstr ""
|
1214 |
|
1215 |
-
#:
|
1216 |
msgid ""
|
1217 |
-
"
|
1218 |
-
"
|
1219 |
-
"
|
1220 |
msgstr ""
|
1221 |
|
1222 |
-
#:
|
1223 |
-
msgid "
|
|
|
|
|
|
|
1224 |
msgstr ""
|
1225 |
|
1226 |
-
#:
|
1227 |
msgid ""
|
1228 |
-
"
|
1229 |
-
"
|
1230 |
-
"deleted and added to the <strong>Blacklist</strong>."
|
1231 |
msgstr ""
|
1232 |
|
1233 |
-
#:
|
1234 |
-
msgid "
|
|
|
|
|
|
|
1235 |
msgstr ""
|
1236 |
|
1237 |
-
#:
|
1238 |
msgid ""
|
1239 |
-
"
|
1240 |
-
"
|
1241 |
-
"
|
1242 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1243 |
msgstr ""
|
1244 |
|
1245 |
-
#:
|
1246 |
-
msgid "
|
1247 |
msgstr ""
|
1248 |
|
1249 |
-
#:
|
1250 |
-
msgid "
|
1251 |
msgstr ""
|
1252 |
|
1253 |
-
#:
|
|
|
1254 |
#, php-format
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1255 |
msgid ""
|
1256 |
-
"
|
1257 |
-
"
|
1258 |
msgstr ""
|
1259 |
|
1260 |
-
#:
|
1261 |
-
|
1262 |
-
msgid "Changelog for v%1$s"
|
1263 |
msgstr ""
|
1264 |
|
1265 |
-
#:
|
|
|
|
|
|
|
|
|
1266 |
#, php-format
|
1267 |
-
msgid ""
|
1268 |
-
"Need functionality not already available in core or the add-ons? You can <a "
|
1269 |
-
"href=\"%1$s\">suggest new features</a>!"
|
1270 |
msgstr ""
|
1271 |
|
1272 |
-
#:
|
1273 |
-
msgid ""
|
1274 |
-
|
1275 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1276 |
msgstr ""
|
1277 |
|
1278 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1279 |
msgid ""
|
1280 |
-
"
|
1281 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1282 |
msgstr ""
|
1283 |
|
1284 |
-
#:
|
1285 |
msgid ""
|
1286 |
-
"
|
1287 |
-
"
|
|
|
|
|
|
|
|
|
1288 |
msgstr ""
|
1289 |
|
1290 |
-
#:
|
1291 |
-
msgid "
|
1292 |
msgstr ""
|
1293 |
|
1294 |
-
#:
|
1295 |
-
msgid "
|
1296 |
msgstr ""
|
1297 |
|
1298 |
-
#:
|
1299 |
-
msgid "
|
1300 |
msgstr ""
|
1301 |
|
1302 |
-
#:
|
1303 |
-
msgid "
|
1304 |
msgstr ""
|
1305 |
|
1306 |
-
#:
|
1307 |
-
msgid "
|
1308 |
msgstr ""
|
1309 |
|
1310 |
-
#:
|
1311 |
-
#, php-format
|
1312 |
msgid ""
|
1313 |
-
"
|
1314 |
-
"
|
|
|
1315 |
msgstr ""
|
1316 |
|
1317 |
-
#:
|
1318 |
#, php-format
|
1319 |
-
msgid "
|
|
|
|
|
|
|
|
|
1320 |
msgstr ""
|
1321 |
|
1322 |
-
#:
|
1323 |
-
|
1324 |
-
msgid "<link rel=\"%1$s\" type=\"%2$s\" title=\"%3$s\" href=\"%4$s\" />\n"
|
1325 |
msgstr ""
|
1326 |
|
1327 |
-
#:
|
1328 |
-
msgid "
|
1329 |
msgstr ""
|
1330 |
|
1331 |
-
#:
|
1332 |
-
|
|
|
|
|
|
|
1333 |
msgstr ""
|
1334 |
|
1335 |
-
#:
|
1336 |
-
|
|
|
|
|
1337 |
msgstr ""
|
1338 |
|
1339 |
-
#:
|
1340 |
-
|
|
|
|
|
|
|
|
|
1341 |
msgstr ""
|
1342 |
|
1343 |
-
#:
|
1344 |
-
msgid "
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#:
|
1348 |
-
|
|
|
1349 |
msgstr ""
|
1350 |
|
1351 |
-
#:
|
1352 |
-
msgid "
|
|
|
|
|
1353 |
msgstr ""
|
1354 |
|
1355 |
-
#:
|
1356 |
-
msgid "
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#:
|
1360 |
-
msgid "
|
1361 |
msgstr ""
|
1362 |
|
1363 |
-
#:
|
1364 |
-
msgid "
|
1365 |
msgstr ""
|
1366 |
|
1367 |
-
#:
|
1368 |
-
msgid "
|
1369 |
msgstr ""
|
1370 |
|
1371 |
-
#:
|
1372 |
-
msgid "
|
1373 |
msgstr ""
|
1374 |
|
1375 |
-
#:
|
1376 |
-
msgid "
|
1377 |
msgstr ""
|
1378 |
|
1379 |
-
#:
|
1380 |
-
msgid "
|
1381 |
msgstr ""
|
1382 |
|
1383 |
-
#:
|
1384 |
-
msgid "
|
1385 |
msgstr ""
|
1386 |
|
1387 |
-
#:
|
1388 |
-
msgid "
|
1389 |
msgstr ""
|
1390 |
|
1391 |
-
#:
|
1392 |
-
msgid "
|
1393 |
msgstr ""
|
1394 |
|
1395 |
-
#:
|
1396 |
-
msgid "
|
1397 |
msgstr ""
|
1398 |
|
1399 |
-
#:
|
1400 |
-
msgid "
|
1401 |
msgstr ""
|
1402 |
|
1403 |
-
#:
|
1404 |
-
msgid "
|
1405 |
msgstr ""
|
1406 |
|
1407 |
-
#:
|
1408 |
-
msgid "
|
1409 |
msgstr ""
|
1410 |
|
1411 |
-
#:
|
1412 |
-
msgid "
|
1413 |
msgstr ""
|
1414 |
|
1415 |
-
#:
|
1416 |
-
msgid "
|
1417 |
msgstr ""
|
1418 |
|
1419 |
-
#:
|
1420 |
-
|
1421 |
-
msgid "Blacklist"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
-
#:
|
1425 |
-
msgid "
|
1426 |
msgstr ""
|
1427 |
|
1428 |
-
#:
|
1429 |
-
msgid "
|
1430 |
msgstr ""
|
1431 |
|
1432 |
-
#:
|
1433 |
-
msgid "
|
1434 |
msgstr ""
|
1435 |
|
1436 |
-
#:
|
1437 |
-
msgid ""
|
1438 |
-
"The item will be deleted permanently, and its permalink will be recorded in "
|
1439 |
-
"the blacklist"
|
1440 |
msgstr ""
|
1441 |
|
1442 |
-
#:
|
1443 |
-
msgid "
|
|
|
|
|
|
|
1444 |
msgstr ""
|
1445 |
|
1446 |
-
#:
|
1447 |
-
|
1448 |
-
msgid "Title"
|
1449 |
msgstr ""
|
1450 |
|
1451 |
-
#:
|
1452 |
-
msgid "
|
1453 |
msgstr ""
|
1454 |
|
1455 |
-
#:
|
1456 |
-
msgid "
|
1457 |
msgstr ""
|
1458 |
|
1459 |
-
#:
|
1460 |
-
msgid "
|
1461 |
msgstr ""
|
1462 |
|
1463 |
-
#:
|
1464 |
-
|
1465 |
-
msgid "Failed to fetch the RSS feed. Error: %s"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
-
#:
|
1469 |
-
#, php-format
|
1470 |
msgid ""
|
1471 |
-
"The
|
1472 |
-
"
|
1473 |
msgstr ""
|
1474 |
|
1475 |
-
#:
|
1476 |
-
msgid "
|
1477 |
msgstr ""
|
1478 |
|
1479 |
-
#:
|
1480 |
-
msgid "
|
1481 |
msgstr ""
|
1482 |
|
1483 |
-
#:
|
1484 |
-
|
1485 |
-
msgid ""
|
1486 |
-
"There is a new version of %1$s available. <a target=\"_blank\" class="
|
1487 |
-
"\"thickbox\" href=\"%2$s\">View version %3$s details</a>."
|
1488 |
msgstr ""
|
1489 |
|
1490 |
-
#:
|
1491 |
-
|
1492 |
-
msgid ""
|
1493 |
-
"There is a new version of %1$s available. <a target=\"_blank\" class="
|
1494 |
-
"\"thickbox\" href=\"%2$s\">View version %3$s details</a> or <a href=\"%4$s"
|
1495 |
-
"\">update now</a>."
|
1496 |
msgstr ""
|
1497 |
|
1498 |
-
#:
|
1499 |
-
msgid "
|
|
|
|
|
1500 |
msgstr ""
|
1501 |
|
1502 |
-
#:
|
1503 |
-
msgid "
|
1504 |
msgstr ""
|
1505 |
|
1506 |
-
#:
|
1507 |
-
#, php-format
|
1508 |
msgid ""
|
1509 |
-
"
|
1510 |
-
"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
-
#:
|
1514 |
-
|
1515 |
-
msgid ""
|
1516 |
-
"<a href=\"%s\">Save 30%% on your license renewal</a> for the WP RSS "
|
1517 |
-
"Aggregator <b>%s</b> add-on and continue receiving updates and support."
|
1518 |
msgstr ""
|
1519 |
|
1520 |
-
#:
|
1521 |
-
msgid "
|
1522 |
msgstr ""
|
1523 |
|
1524 |
-
#:
|
1525 |
-
msgid "
|
1526 |
msgstr ""
|
1527 |
|
1528 |
-
#:
|
1529 |
-
msgid "
|
1530 |
msgstr ""
|
1531 |
|
1532 |
-
#:
|
1533 |
-
msgid "
|
1534 |
msgstr ""
|
1535 |
|
1536 |
-
#:
|
1537 |
-
msgid "
|
1538 |
msgstr ""
|
1539 |
|
1540 |
-
#:
|
1541 |
-
msgid "
|
1542 |
msgstr ""
|
1543 |
|
1544 |
-
#:
|
1545 |
-
msgid "
|
1546 |
msgstr ""
|
1547 |
|
1548 |
-
#:
|
1549 |
-
msgid "
|
1550 |
msgstr ""
|
1551 |
|
1552 |
-
#:
|
1553 |
-
msgid "
|
1554 |
msgstr ""
|
1555 |
|
1556 |
-
#:
|
1557 |
-
msgid "
|
1558 |
msgstr ""
|
1559 |
|
1560 |
-
#:
|
1561 |
-
msgid "
|
1562 |
msgstr ""
|
1563 |
|
1564 |
-
#:
|
1565 |
msgid ""
|
1566 |
-
"
|
1567 |
-
"
|
1568 |
msgstr ""
|
1569 |
|
1570 |
-
#:
|
1571 |
-
msgid "
|
|
|
|
|
1572 |
msgstr ""
|
1573 |
|
1574 |
-
#:
|
1575 |
-
msgid "
|
1576 |
msgstr ""
|
1577 |
|
1578 |
-
#:
|
1579 |
-
msgid "
|
1580 |
msgstr ""
|
1581 |
|
1582 |
-
#:
|
1583 |
-
msgid "
|
1584 |
msgstr ""
|
1585 |
|
1586 |
-
#:
|
1587 |
-
msgid ""
|
1588 |
-
"Failed to get license information. This is a temporary problem. Check your "
|
1589 |
-
"internet connection and try again later."
|
1590 |
msgstr ""
|
1591 |
|
1592 |
-
#:
|
1593 |
-
msgid "
|
1594 |
msgstr ""
|
1595 |
|
1596 |
-
#:
|
1597 |
-
msgid "
|
1598 |
msgstr ""
|
1599 |
|
1600 |
-
#:
|
1601 |
-
msgid "
|
1602 |
msgstr ""
|
1603 |
|
1604 |
-
#:
|
1605 |
-
msgid "
|
1606 |
msgstr ""
|
1607 |
|
1608 |
-
#:
|
1609 |
-
msgid "
|
1610 |
msgstr ""
|
1611 |
|
1612 |
-
#:
|
1613 |
-
msgid "
|
1614 |
msgstr ""
|
1615 |
|
1616 |
-
#:
|
1617 |
-
msgid "
|
1618 |
msgstr ""
|
1619 |
|
1620 |
-
#:
|
1621 |
-
msgid "
|
1622 |
msgstr ""
|
1623 |
|
1624 |
-
#:
|
1625 |
-
msgid "
|
1626 |
msgstr ""
|
1627 |
|
1628 |
-
#:
|
1629 |
-
msgid "
|
1630 |
msgstr ""
|
1631 |
|
1632 |
-
#:
|
1633 |
-
msgid "
|
1634 |
msgstr ""
|
1635 |
|
1636 |
-
#:
|
1637 |
-
msgid "
|
1638 |
msgstr ""
|
1639 |
|
1640 |
-
#:
|
1641 |
-
msgid "
|
1642 |
msgstr ""
|
1643 |
|
1644 |
-
#:
|
1645 |
-
msgid "
|
1646 |
msgstr ""
|
1647 |
|
1648 |
-
#:
|
1649 |
-
msgid "
|
1650 |
msgstr ""
|
1651 |
|
1652 |
-
#:
|
1653 |
-
msgid "
|
1654 |
msgstr ""
|
1655 |
|
1656 |
-
#:
|
1657 |
-
msgid "
|
1658 |
msgstr ""
|
1659 |
|
1660 |
-
#:
|
1661 |
-
msgid "
|
|
|
|
|
1662 |
msgstr ""
|
1663 |
|
1664 |
-
#:
|
1665 |
-
msgid "
|
1666 |
msgstr ""
|
1667 |
|
1668 |
-
#:
|
|
|
|
|
|
|
|
|
1669 |
msgid ""
|
1670 |
-
"
|
1671 |
-
"
|
1672 |
msgstr ""
|
1673 |
|
1674 |
-
#:
|
1675 |
-
msgid "
|
1676 |
msgstr ""
|
1677 |
|
1678 |
-
#:
|
1679 |
-
msgid "
|
|
|
|
|
1680 |
msgstr ""
|
1681 |
|
1682 |
-
#:
|
1683 |
-
msgid "
|
1684 |
msgstr ""
|
1685 |
|
1686 |
-
#:
|
1687 |
-
msgid "
|
1688 |
msgstr ""
|
1689 |
|
1690 |
-
#:
|
1691 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1692 |
msgstr ""
|
1693 |
|
1694 |
-
#:
|
1695 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
1696 |
msgstr ""
|
1697 |
|
1698 |
-
#:
|
1699 |
msgid ""
|
1700 |
-
"
|
1701 |
-
"
|
|
|
|
|
1702 |
msgstr ""
|
1703 |
|
1704 |
-
#:
|
1705 |
-
msgid "
|
1706 |
msgstr ""
|
1707 |
|
1708 |
-
#:
|
1709 |
-
msgid "
|
1710 |
msgstr ""
|
1711 |
|
1712 |
-
#:
|
1713 |
-
msgid "
|
1714 |
msgstr ""
|
1715 |
|
1716 |
-
#:
|
1717 |
-
msgid "
|
1718 |
msgstr ""
|
1719 |
|
1720 |
-
#:
|
1721 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1722 |
msgstr ""
|
1723 |
|
1724 |
-
|
1725 |
-
msgid "
|
1726 |
msgstr ""
|
1727 |
|
1728 |
-
|
1729 |
msgid ""
|
1730 |
-
"
|
1731 |
-
"
|
1732 |
-
"plugins and themes to test with."
|
1733 |
msgstr ""
|
1734 |
|
1735 |
-
|
1736 |
-
msgid "
|
1737 |
msgstr ""
|
1738 |
|
1739 |
-
|
1740 |
-
msgid "
|
1741 |
msgstr ""
|
1742 |
|
1743 |
-
|
1744 |
-
msgid "
|
1745 |
msgstr ""
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
+
"Project-Id-Version: WP RSS Aggregator\n"
|
4 |
+
"POT-Creation-Date: 2020-01-20 11:05+0100\n"
|
5 |
+
"PO-Revision-Date: 2020-01-20 11:06+0100\n"
|
6 |
"Last-Translator: \n"
|
7 |
+
"Language-Team: RebelCode\n"
|
8 |
+
"Language: en_US\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.2.4\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
+
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
16 |
+
"X-Poedit-WPHeader: wp-rss-aggregator.php\n"
|
17 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
19 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
|
20 |
+
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
21 |
"X-Poedit-SearchPath-0: .\n"
|
22 |
+
"X-Poedit-SearchPathExcluded-0: vendor\n"
|
23 |
+
"X-Poedit-SearchPathExcluded-1: node_modules\n"
|
24 |
+
"X-Poedit-SearchPathExcluded-2: js\n"
|
25 |
+
"X-Poedit-SearchPathExcluded-3: css\n"
|
26 |
+
"X-Poedit-SearchPathExcluded-4: fonts\n"
|
27 |
+
"X-Poedit-SearchPathExcluded-5: webpack\n"
|
28 |
+
"X-Poedit-SearchPathExcluded-6: test\n"
|
29 |
+
|
30 |
+
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:93
|
31 |
+
msgid "No nonce"
|
32 |
msgstr ""
|
33 |
|
34 |
+
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:98
|
35 |
+
msgid "Bad nonce"
|
36 |
msgstr ""
|
37 |
|
38 |
+
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:102
|
39 |
+
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:156
|
40 |
+
msgid "No addon ID"
|
|
|
|
|
41 |
msgstr ""
|
42 |
|
43 |
+
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:103
|
44 |
+
msgid "No event specified"
|
45 |
msgstr ""
|
46 |
|
47 |
+
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:104
|
48 |
+
msgid "No license"
|
|
|
|
|
49 |
msgstr ""
|
50 |
|
51 |
+
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:130
|
52 |
+
msgid "Invalid event specified"
|
53 |
msgstr ""
|
54 |
|
55 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:176
|
56 |
+
msgid "License"
|
|
|
|
|
|
|
57 |
msgstr ""
|
58 |
|
59 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:183
|
60 |
+
msgid "License Key"
|
61 |
msgstr ""
|
62 |
|
63 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:192
|
64 |
+
msgid "Activate License"
|
|
|
|
|
|
|
65 |
msgstr ""
|
66 |
|
67 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:221
|
68 |
+
msgid "Enter your license key"
|
69 |
msgstr ""
|
70 |
|
71 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:307
|
72 |
+
msgid "Status"
|
|
|
|
|
73 |
msgstr ""
|
74 |
|
75 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:335
|
76 |
+
msgid "never"
|
77 |
msgstr ""
|
78 |
|
79 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:343
|
80 |
msgid ""
|
81 |
+
"No activations left. Click here to manage the sites you've activated "
|
82 |
+
"licenses on."
|
|
|
83 |
msgstr ""
|
84 |
|
85 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:348
|
86 |
+
msgid "Renew your license to continue receiving updates and support."
|
87 |
msgstr ""
|
88 |
|
89 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:351
|
90 |
+
msgid "Activations"
|
|
|
|
|
91 |
msgstr ""
|
92 |
|
93 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:355
|
94 |
+
msgid "Expires"
|
|
|
|
|
|
|
95 |
msgstr ""
|
96 |
|
97 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:359
|
98 |
+
msgid "Registered to"
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:364
|
102 |
+
msgid ""
|
103 |
+
"Failed to get license information. This is a temporary problem. Check your "
|
104 |
+
"internet connection and try again later."
|
105 |
msgstr ""
|
106 |
|
107 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:137
|
108 |
msgid ""
|
109 |
"Did you know that you can get more RSS features? Excerpts, thumbnails, "
|
110 |
"keyword filtering, importing into posts and more... "
|
111 |
msgstr ""
|
112 |
|
113 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:159
|
114 |
+
msgid ""
|
115 |
+
"The feed items for this feed source are being deleted in the background."
|
116 |
msgstr ""
|
117 |
|
118 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:185
|
119 |
+
#, php-format
|
120 |
+
msgid "Successfully imported <code>%1$s</code> feed sources."
|
121 |
msgstr ""
|
122 |
|
123 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:210
|
124 |
+
msgid "Your settings were imported successfully"
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:233
|
128 |
+
msgid "Invalid file or file size too big."
|
129 |
msgstr ""
|
130 |
|
131 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:255
|
132 |
+
msgid "Feeds are being updated in the background."
|
133 |
msgstr ""
|
134 |
|
135 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:277
|
136 |
+
msgid "Feeds deleted and are being re-imported in the background."
|
137 |
msgstr ""
|
138 |
|
139 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:299
|
140 |
+
msgid "The error log has been cleared."
|
|
|
|
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:321
|
144 |
+
#: src/Modules/ResetToolModule.php:101
|
145 |
+
msgid "The plugin settings have been reset to default."
|
146 |
msgstr ""
|
147 |
|
148 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:342
|
149 |
+
msgid "The item was deleted successfully and added to the blacklist."
|
|
|
|
|
150 |
msgstr ""
|
151 |
|
152 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:365
|
153 |
+
msgid "The feed sources have been activated!"
|
154 |
msgstr ""
|
155 |
|
156 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:388
|
157 |
+
msgid "The feed sources have been paused!"
|
158 |
msgstr ""
|
159 |
|
160 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:427
|
161 |
+
#, php-format
|
162 |
msgid ""
|
163 |
+
"Remember to <a href=\"%1$s\">enter your license key</a> for the <strong>WP "
|
164 |
+
"RSS Aggregator - %2$s</strong> add-on to benefit from updates and support."
|
165 |
msgstr ""
|
166 |
|
167 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:471
|
168 |
+
#, php-format
|
169 |
msgid ""
|
170 |
+
"The license key for the <strong>WP RSS Aggregator - %2$s</strong> add-on is "
|
171 |
+
"saved but not activated. In order to benefit from updates and support, it "
|
172 |
+
"must be <a href=\"%1$s\">activated</a>."
|
173 |
msgstr ""
|
174 |
|
175 |
+
#: includes/Aventura/Wprss/Core/Model/AdminAjaxNotice/ServiceProvider.php:518
|
176 |
+
#, php-format
|
177 |
+
msgid ""
|
178 |
+
"The license for the <strong>WP RSS Aggregator - %2$s</strong> add-on is "
|
179 |
+
"about to expire. <a href=\"%1$s\">Please renew it</a> to keep receiving "
|
180 |
+
"updates and benefit from support."
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: includes/Aventura/Wprss/Core/Model/BulkSourceImport/AbstractImporter.php:119
|
184 |
+
msgid "A source must have at least two data members"
|
185 |
msgstr ""
|
186 |
|
187 |
+
#: includes/Aventura/Wprss/Core/Model/BulkSourceImport/AbstractImporter.php:123
|
188 |
+
msgid "Source title is missing"
|
189 |
msgstr ""
|
190 |
|
191 |
+
#: includes/Aventura/Wprss/Core/Model/BulkSourceImport/AbstractImporter.php:127
|
192 |
+
msgid "Source title must not be empty"
|
|
|
|
|
193 |
msgstr ""
|
194 |
|
195 |
+
#: includes/Aventura/Wprss/Core/Model/BulkSourceImport/AbstractImporter.php:131
|
196 |
+
msgid "Source URL is missing"
|
197 |
msgstr ""
|
198 |
|
199 |
+
#: includes/Aventura/Wprss/Core/Model/BulkSourceImport/AbstractImporter.php:135
|
200 |
+
msgid "Source URL must not be empty"
|
201 |
msgstr ""
|
202 |
|
203 |
+
#: includes/Aventura/Wprss/Core/Model/BulkSourceImport/AbstractImporter.php:153
|
204 |
+
msgid "Feed source representation is invalid"
|
205 |
msgstr ""
|
206 |
|
207 |
+
#: includes/Aventura/Wprss/Core/Plugin.php:74
|
208 |
+
msgid "Getting Started"
|
209 |
msgstr ""
|
210 |
|
211 |
+
#: includes/Aventura/Wprss/Core/Plugin.php:78
|
212 |
+
msgid "Extensions"
|
213 |
msgstr ""
|
214 |
|
215 |
+
#: includes/OPML.php:42
|
216 |
+
msgid ""
|
217 |
+
"An error occurred: The file might not be a valid OPML file or is corrupt. "
|
218 |
msgstr ""
|
219 |
|
220 |
+
#: includes/admin-ajax-notice.php:492
|
221 |
+
msgid "Dismiss this notification"
|
222 |
msgstr ""
|
223 |
|
224 |
+
#: includes/admin-display.php:38
|
225 |
+
msgid "State"
|
226 |
msgstr ""
|
227 |
|
228 |
+
#: includes/admin-display.php:41 includes/admin-display.php:281
|
229 |
+
#: src/Ui/BlacklistTable.php:73
|
230 |
+
msgid "Name"
|
231 |
msgstr ""
|
232 |
|
233 |
+
#: includes/admin-display.php:46
|
234 |
msgid "Updates"
|
235 |
msgstr ""
|
236 |
|
237 |
+
#: includes/admin-display.php:64
|
238 |
+
msgid "Activate or pause auto importing for this feed"
|
239 |
+
msgstr ""
|
240 |
+
|
241 |
+
#: includes/admin-display.php:81
|
242 |
+
msgid "Normal RSS Feed"
|
243 |
+
msgstr ""
|
244 |
+
|
245 |
+
#: includes/admin-display.php:86
|
246 |
+
msgid "YouTube Feed"
|
247 |
msgstr ""
|
248 |
|
249 |
+
#: includes/admin-display.php:114 includes/admin-heartbeat.php:58
|
250 |
msgid "None"
|
251 |
msgstr ""
|
252 |
|
253 |
+
#: includes/admin-display.php:116 includes/admin-heartbeat.php:55
|
254 |
+
msgid "..."
|
|
|
255 |
msgstr ""
|
256 |
|
257 |
+
#: includes/admin-display.php:124
|
258 |
+
msgid "Next update in"
|
259 |
msgstr ""
|
260 |
|
261 |
+
#: includes/admin-display.php:133
|
262 |
+
msgctxt "Example: \"Updated 2 days ago\""
|
263 |
+
msgid "Updated"
|
264 |
msgstr ""
|
265 |
|
266 |
+
#: includes/admin-display.php:135 includes/legacy-feed-display.php:188
|
267 |
#, php-format
|
268 |
msgid "%1$s ago"
|
269 |
msgstr ""
|
270 |
|
271 |
+
#: includes/admin-display.php:139
|
272 |
+
msgctxt "Example: \"15 new\""
|
273 |
+
msgid "items"
|
274 |
+
msgstr ""
|
275 |
+
|
276 |
+
#: includes/admin-display.php:152
|
277 |
msgid ""
|
278 |
+
"This feed source experienced an error during the last feed fetch or "
|
279 |
+
"validation check. Re-check the feed source URL or check the Error Log in the "
|
280 |
+
"Debugging page for more details."
|
281 |
msgstr ""
|
282 |
|
283 |
+
#: includes/admin-display.php:165
|
284 |
+
msgid "View the imported items for this feed source"
|
285 |
+
msgstr ""
|
286 |
+
|
287 |
+
#: includes/admin-display.php:168
|
288 |
+
msgid "items"
|
289 |
+
msgstr ""
|
290 |
+
|
291 |
+
#: includes/admin-display.php:180
|
292 |
+
msgid "Fetch"
|
293 |
+
msgstr ""
|
294 |
+
|
295 |
+
#: includes/admin-display.php:189
|
296 |
+
msgid "Delete items"
|
297 |
msgstr ""
|
298 |
|
299 |
+
#: includes/admin-display.php:282
|
300 |
msgid "Permalink"
|
301 |
msgstr ""
|
302 |
|
303 |
+
#: includes/admin-display.php:283
|
304 |
msgid "Date published"
|
305 |
msgstr ""
|
306 |
|
307 |
+
#: includes/admin-display.php:284
|
308 |
msgid "Source"
|
309 |
msgstr ""
|
310 |
|
311 |
+
#: includes/admin-display.php:373
|
312 |
msgid "Feed source updated. "
|
313 |
msgstr ""
|
314 |
|
315 |
+
#: includes/admin-display.php:374
|
316 |
msgid "Custom field updated."
|
317 |
msgstr ""
|
318 |
|
319 |
+
#: includes/admin-display.php:375
|
320 |
msgid "Custom field deleted."
|
321 |
msgstr ""
|
322 |
|
323 |
+
#: includes/admin-display.php:376 includes/admin-display.php:382
|
324 |
msgid "Feed source updated."
|
325 |
msgstr ""
|
326 |
|
327 |
+
#: includes/admin-display.php:378 includes/admin-display.php:379
|
328 |
msgid "Feed source saved."
|
329 |
msgstr ""
|
330 |
|
331 |
+
#: includes/admin-display.php:380
|
332 |
msgid "Feed source submitted."
|
333 |
msgstr ""
|
334 |
|
335 |
+
#: includes/admin-display.php:409
|
336 |
#, php-format
|
337 |
msgid "ID: %1$s"
|
338 |
msgstr ""
|
339 |
|
340 |
+
#: includes/admin-display.php:481
|
341 |
+
msgid "Could not schedule fetch: source ID must be specified"
|
|
|
|
|
|
|
|
|
342 |
msgstr ""
|
343 |
|
344 |
+
#: includes/admin-display.php:519 includes/admin-display.php:568
|
345 |
+
msgid "Failed to schedule cron"
|
346 |
msgstr ""
|
347 |
|
348 |
+
#: includes/admin-display.php:550 includes/admin-display.php:601
|
349 |
+
msgid "Source ID was not specified"
|
350 |
msgstr ""
|
351 |
|
352 |
+
#: includes/admin-display.php:698
|
353 |
msgid "Publish Feed"
|
354 |
msgstr ""
|
355 |
|
356 |
+
#: includes/admin-editor.php:117
|
357 |
msgid ""
|
358 |
+
"To select more than one feed source, click and drag with your mouse pointer "
|
359 |
+
"or click individual feed sources while holding down the Ctrl (Windows) or "
|
360 |
+
"Command (Mac) key."
|
361 |
msgstr ""
|
362 |
|
363 |
+
#: includes/admin-editor.php:127 src/Modules/FeedTemplatesModule.php:131
|
364 |
+
msgid "Template"
|
|
|
365 |
msgstr ""
|
366 |
|
367 |
+
#: includes/admin-editor.php:136
|
368 |
+
msgid "Sources"
|
369 |
+
msgstr ""
|
370 |
+
|
371 |
+
#: includes/admin-editor.php:141
|
372 |
msgid "All feed sources"
|
373 |
msgstr ""
|
374 |
|
375 |
+
#: includes/admin-editor.php:149
|
376 |
+
msgid "Exclude"
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
#: includes/admin-editor.php:154
|
380 |
+
msgid "You may choose to exclude some feed sources:"
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: includes/admin-editor.php:159
|
384 |
+
msgid "Choose which feed sources to show:"
|
385 |
+
msgstr ""
|
386 |
+
|
387 |
+
#: includes/admin-editor.php:181
|
388 |
+
msgid "Number of items"
|
389 |
msgstr ""
|
390 |
|
391 |
+
#: includes/admin-editor.php:186 includes/admin-editor.php:197
|
392 |
+
#: includes/admin-editor.php:215
|
393 |
+
msgid "Use template setting"
|
394 |
msgstr ""
|
395 |
|
396 |
+
#: includes/admin-editor.php:193
|
397 |
+
msgid "Pagination"
|
398 |
msgstr ""
|
399 |
|
400 |
+
#: includes/admin-editor.php:198
|
401 |
+
msgid "Enabled"
|
402 |
msgstr ""
|
403 |
|
404 |
+
#: includes/admin-editor.php:199
|
405 |
+
msgid "Disabled"
|
406 |
msgstr ""
|
407 |
|
408 |
+
#: includes/admin-editor.php:203
|
409 |
+
msgid "Choose whether to show or hide pagination controls"
|
410 |
+
msgstr ""
|
411 |
+
|
412 |
+
#: includes/admin-editor.php:210
|
413 |
+
msgid "Starting page"
|
414 |
+
msgstr ""
|
415 |
+
|
416 |
+
#: includes/admin-editor.php:227
|
417 |
msgid "Add shortcode"
|
418 |
msgstr ""
|
419 |
|
420 |
+
#: includes/admin-heartbeat.php:66
|
421 |
+
msgctxt "Next update: now"
|
422 |
+
msgid "now"
|
423 |
+
msgstr ""
|
424 |
+
|
425 |
+
#: includes/admin-help-metaboxes.php:17
|
426 |
msgid ""
|
427 |
"The URL of the feed source. In most cases, the URL of the site will also "
|
428 |
"work, but for best results we recommend trying to find the URL of the RSS "
|
429 |
"feed.\n"
|
430 |
"\n"
|
431 |
+
"Also include the <code>http://</code> or <code>https://</code> prefix in the "
|
432 |
+
"URL."
|
433 |
msgstr ""
|
434 |
|
435 |
+
#: includes/admin-help-metaboxes.php:21
|
436 |
msgid ""
|
437 |
"The maximum number of imported items from this feed to keep stored.\n"
|
438 |
"\n"
|
439 |
+
"When new items are imported and the limit is exceeded, the oldest feed items "
|
440 |
+
"will be deleted to make room for new ones.\n"
|
441 |
+
"\n"
|
442 |
+
"If you already have items imported from this feed source, setting this "
|
443 |
+
"option now may delete some of your items, in order to comply with the limit."
|
444 |
+
msgstr ""
|
445 |
+
|
446 |
+
#: includes/admin-help-metaboxes.php:27
|
447 |
+
msgid ""
|
448 |
+
"Tick this box to make imported items link to their enclosure, rather than to "
|
449 |
+
"the original article.\n"
|
450 |
+
"\n"
|
451 |
+
"Enclosures are typically links to attachments, such as images, audio, "
|
452 |
+
"videos, documents or flash content.\n"
|
453 |
+
"\n"
|
454 |
+
"If you are not sure, leave this option unticked"
|
455 |
+
msgstr ""
|
456 |
+
|
457 |
+
#: includes/admin-help-metaboxes.php:33
|
458 |
+
msgid ""
|
459 |
+
"Whether to allow multiple feed items to have the same title. When checked, "
|
460 |
+
"if a feed item has the same title as a previously-imported feed item, it "
|
461 |
+
"will not be imported.\n"
|
462 |
+
"\n"
|
463 |
+
"This can be useful in cases where permalinks change, or where multiple "
|
464 |
+
"permalinks refer to the same item."
|
465 |
+
msgstr ""
|
466 |
+
|
467 |
+
#: includes/admin-help-metaboxes.php:37
|
468 |
+
msgid ""
|
469 |
+
"Enable this option to link the feed source name to the RSS feed's source "
|
470 |
+
"site.\n"
|
471 |
"\n"
|
472 |
+
"Selecting \"Default\" will cause the value chosen in the general Source "
|
473 |
+
"Display Settings to be used.\n"
|
474 |
+
"\n"
|
475 |
+
"This option only applies when using the shortcode to output feed items."
|
476 |
msgstr ""
|
477 |
|
478 |
+
#: includes/admin-help-metaboxes.php:43
|
479 |
msgid ""
|
480 |
+
"Tick this box to get the site name and URL from the RSS feed, for each item "
|
481 |
+
"individually.\n"
|
482 |
"\n"
|
483 |
+
"This option is useful when importing from aggregated RSS feeds that have "
|
484 |
+
"items from different sources.\n"
|
|
|
485 |
"\n"
|
486 |
+
"If the RSS feed does not provide source information for its items, the name "
|
487 |
+
"and URL that you have given for the feed source will be used instead."
|
488 |
msgstr ""
|
489 |
|
490 |
+
#: includes/admin-help-metaboxes.php:55
|
491 |
msgid ""
|
492 |
"State of the feed, active or paused.\n"
|
493 |
"\n"
|
494 |
+
"If active, the feed source will fetch items periodically, according to the "
|
495 |
+
"settings below.\n"
|
496 |
"\n"
|
497 |
+
"If paused, the feed source will not fetch feed items periodically."
|
|
|
498 |
msgstr ""
|
499 |
|
500 |
+
#: includes/admin-help-metaboxes.php:61
|
501 |
msgid ""
|
502 |
"You can set a time, in UTC, in the future when the feed source will become "
|
503 |
"active, if it is paused.\n"
|
504 |
"\n"
|
505 |
+
"Leave blank to activate immediately."
|
506 |
msgstr ""
|
507 |
|
508 |
+
#: includes/admin-help-metaboxes.php:65
|
509 |
msgid ""
|
510 |
"You can set a time, in UTC, in the future when the feed source will become "
|
511 |
"paused, if it is active.\n"
|
512 |
"\n"
|
513 |
+
"Leave blank to never pause."
|
514 |
msgstr ""
|
515 |
|
516 |
+
#: includes/admin-help-metaboxes.php:69
|
517 |
msgid ""
|
518 |
"How frequently the feed source should check for new items and fetch if "
|
519 |
"needed.\n"
|
520 |
"\n"
|
521 |
+
"If left as <em>Default</em>, the interval in the global settings is used."
|
|
|
522 |
msgstr ""
|
523 |
|
524 |
+
#: includes/admin-help-metaboxes.php:73
|
525 |
msgid ""
|
526 |
"The maximum age allowed for feed items. Very useful if you are only "
|
527 |
"concerned with, say, last week's news.\n"
|
528 |
"\n"
|
529 |
+
"Items already imported will be deleted if they eventually exceed this age "
|
530 |
+
"limit.\n"
|
531 |
"\n"
|
532 |
+
"Also, items in the RSS feed that are already older than this age will not be "
|
533 |
+
"imported at all.\n"
|
534 |
"\n"
|
535 |
+
"Leave empty to use the <em>Limit feed items by age</em> option in the "
|
536 |
+
"general settings."
|
537 |
msgstr ""
|
538 |
|
539 |
+
#: includes/admin-help-metaboxes.php:86
|
540 |
msgid ""
|
541 |
"Use this option if you are seeing an <q>Invalid feed URL</q> error in the "
|
542 |
"Feed Preview above, but you are sure that the URL is correct.\n"
|
543 |
"\n"
|
544 |
+
"Note, however, that this will disable auto-discovery, meaning that the given "
|
545 |
+
"URL must be an RSS feed URL. Using the site's URL will not work."
|
|
|
546 |
msgstr ""
|
547 |
|
548 |
+
#: includes/admin-help-settings.php:16
|
549 |
msgid ""
|
550 |
"The maximum age allowed for feed items.\n"
|
551 |
+
"<hr/>\n"
|
552 |
"\n"
|
553 |
+
"Items already imported will be deleted if they eventually exceed this age "
|
554 |
+
"limit.\n"
|
555 |
"\n"
|
556 |
+
"Also, items in the RSS feed that are already older than this age will not be "
|
557 |
+
"imported at all.\n"
|
558 |
+
"<hr/>\n"
|
559 |
"\n"
|
560 |
+
"<em>Leave empty for no limit.</em>"
|
|
|
561 |
msgstr ""
|
562 |
|
563 |
+
#: includes/admin-help-settings.php:26
|
564 |
msgid ""
|
565 |
"The maximum number of imported items to keep stored, for feed sources that "
|
566 |
"do not have their own limit.\n"
|
567 |
+
"<hr/>\n"
|
568 |
+
"\n"
|
569 |
+
"When new items are imported and the limit for a feed source is exceeded, the "
|
570 |
+
"oldest feed items for that feed source will be deleted to make room for the "
|
571 |
+
"new ones.\n"
|
572 |
+
"\n"
|
573 |
+
"If you already have items imported from this feed source, setting this "
|
574 |
+
"option now may delete some of your items, in order to comply with the "
|
575 |
+
"limit.\n"
|
576 |
+
"<hr/>\n"
|
577 |
+
"\n"
|
578 |
+
"<em>Use 0 or leave empty for no limit.</em>"
|
579 |
+
msgstr ""
|
580 |
+
|
581 |
+
#: includes/admin-help-settings.php:36
|
582 |
+
msgid ""
|
583 |
+
"The maximum amount of items to process per import.\n"
|
584 |
+
"<hr />\n"
|
585 |
+
"\n"
|
586 |
+
"Will not process more than this amount of items every time the feed source "
|
587 |
+
"updates, regardless of other settings.\n"
|
588 |
+
"The frequency of updates is determined by the feed processing interval.\n"
|
589 |
+
"<hr />\n"
|
590 |
+
"\n"
|
591 |
+
"<em>Leave empty for no limit.</em>"
|
592 |
+
msgstr ""
|
593 |
+
|
594 |
+
#: includes/admin-help-settings.php:46
|
595 |
+
msgid ""
|
596 |
+
"The order in which feed items will be imported.\n"
|
597 |
+
"<hr />\n"
|
598 |
"\n"
|
599 |
+
"<strong>Latest items first</strong> will import the most recent items in the "
|
600 |
+
"feed first.\n"
|
601 |
+
"<strong>Oldest items first</strong> will import the oldest items in the feed "
|
602 |
+
"first.\n"
|
603 |
+
"<strong>Original feed order</strong> only works well on PHP7 or later.\n"
|
604 |
"\n"
|
605 |
+
"This setting is very useful in combination with the per-import limit.\n"
|
606 |
+
"<hr />\n"
|
607 |
+
"\n"
|
608 |
+
"Default: <em>Latest items first</em>"
|
609 |
+
msgstr ""
|
610 |
+
|
611 |
+
#: includes/admin-help-settings.php:59
|
612 |
+
msgid ""
|
613 |
+
"If ticked, items with future dates will be scheduled to be published later. "
|
614 |
+
"Leave unticked to always publish items immediately.\n"
|
615 |
+
" <hr/>\n"
|
616 |
+
" Default: <em>Off</em>"
|
617 |
msgstr ""
|
618 |
|
619 |
+
#: includes/admin-help-settings.php:64
|
620 |
msgid ""
|
621 |
"How frequently should the feed sources (that do not have their own update "
|
622 |
"interval) check for updates and fetch items accordingly.\n"
|
623 |
"\n"
|
624 |
+
"It is recommended to not have more than 20 feed sources that use this global "
|
625 |
+
"update interval. Having too many feed sources updating precisely at the same "
|
626 |
+
"time can cause the WP Cron System to crash."
|
|
|
627 |
msgstr ""
|
628 |
|
629 |
+
#: includes/admin-help-settings.php:68
|
630 |
msgid ""
|
631 |
+
"Whether to allow multiple feed items to have the same title. When checked, "
|
632 |
+
"if a feed item has the same title as a previously-imported feed item from "
|
633 |
+
"any feed source, it will not be imported.\n"
|
634 |
+
"\n"
|
635 |
+
"This can be useful in cases where permalinks change, or where multiple "
|
636 |
+
"permalinks refer to the same item.\n"
|
637 |
+
"\n"
|
638 |
+
"Since this feature requires checking every post title, WordPress installs "
|
639 |
+
"with a significant amount of posts may notice a slight slowdown of the post "
|
640 |
+
"import process."
|
641 |
+
msgstr ""
|
642 |
+
|
643 |
+
#: includes/admin-help-settings.php:74
|
644 |
+
msgid ""
|
645 |
+
"The URL of the custom feed, located at <code>https://yoursite.com/[custom "
|
646 |
"feed url]</code>.\n"
|
647 |
+
"<hr/>\n"
|
648 |
"\n"
|
649 |
+
"WP RSS Aggregator allows you to create a custom RSS feed, that contains all "
|
650 |
+
"of your imported feed items. This setting allows you to change the URL of "
|
651 |
+
"this custom feed.\n"
|
652 |
"\n"
|
653 |
+
"<hr/>\n"
|
654 |
"\n"
|
655 |
+
"<strong>Note:</strong> You may be required to refresh you Permalinks after "
|
656 |
+
"you change this setting, by going to <em>Settings <i class=\"fa fa-angle-"
|
657 |
+
"right\"></i> Permalinks</e> and clicking <em>Save</em>."
|
|
|
658 |
msgstr ""
|
659 |
|
660 |
+
#: includes/admin-help-settings.php:83
|
661 |
msgid ""
|
662 |
"The title of the custom feed.\n"
|
663 |
"\n"
|
664 |
+
"This title will be included in the RSS source of the custom feed, in a "
|
665 |
+
"<code><title></code> tag."
|
666 |
msgstr ""
|
667 |
|
668 |
+
#: includes/admin-help-settings.php:87
|
669 |
msgid "The maximum number of feed items in the custom feed."
|
670 |
msgstr ""
|
671 |
|
672 |
+
#: includes/admin-help-settings.php:93 src/Modules/FeedTemplatesModule.php:467
|
673 |
msgid ""
|
674 |
"Check this box to make the feed item titles link to the original article."
|
675 |
msgstr ""
|
676 |
|
677 |
+
#: includes/admin-help-settings.php:95
|
678 |
msgid ""
|
679 |
"Set the maximum number of characters to show for feed item titles.\n"
|
680 |
+
"<hr/>\n"
|
681 |
"\n"
|
682 |
+
"<em>Leave empty for no limit.</em>"
|
|
|
683 |
msgstr ""
|
684 |
|
685 |
+
#: includes/admin-help-settings.php:100 src/Modules/FeedTemplatesModule.php:473
|
686 |
msgid ""
|
687 |
"Check this box to show the author for each feed item, if it is available."
|
688 |
msgstr ""
|
689 |
|
690 |
+
#: includes/admin-help-settings.php:102
|
691 |
msgid ""
|
692 |
"For feed items from YouTube, Vimeo or Dailymotion, you can choose whether "
|
693 |
"you want to have the items link to the original page link, or a link to the "
|
694 |
"embedded video player only."
|
695 |
msgstr ""
|
696 |
|
697 |
+
#: includes/admin-help-settings.php:104
|
698 |
msgid ""
|
699 |
"The type of pagination to use when showing feed items on multiple pages.\n"
|
700 |
"\n"
|
701 |
+
"The first shows two links, \"Older\" and \"Newer\", which allow you to "
|
702 |
+
"navigate through the pages.\n"
|
703 |
"\n"
|
704 |
+
"The second shows links for all the pages, together with links for the next "
|
705 |
+
"and previous pages."
|
706 |
msgstr ""
|
707 |
|
708 |
+
#: includes/admin-help-settings.php:110
|
709 |
msgid ""
|
710 |
"The maximum number of feed items to display when using the shortcode.\n"
|
711 |
"\n"
|
712 |
+
"This enables pagination if set to a number smaller than the number of items "
|
713 |
+
"to be displayed."
|
714 |
msgstr ""
|
715 |
|
716 |
+
#: includes/admin-help-settings.php:114 src/Modules/FeedTemplatesModule.php:479
|
717 |
msgid ""
|
718 |
"Choose how you want links to be opened. This applies to the feed item title "
|
719 |
"and the source link."
|
720 |
msgstr ""
|
721 |
|
722 |
+
#: includes/admin-help-settings.php:116
|
723 |
msgid ""
|
724 |
"Enable this option to set all links displayed as \"NoFollow\".\n"
|
725 |
+
"<hr/>\n"
|
726 |
"\n"
|
727 |
+
"\"Nofollow\" provides a way to tell search engines to <em>not</em> follow "
|
728 |
+
"certain links, such as links to feed items in this case."
|
|
|
729 |
msgstr ""
|
730 |
|
731 |
+
#: includes/admin-help-settings.php:125 src/Modules/FeedTemplatesModule.php:470
|
732 |
msgid "Enable this option to show the feed source name for each feed item."
|
733 |
msgstr ""
|
734 |
|
735 |
+
#: includes/admin-help-settings.php:127 src/Modules/FeedTemplatesModule.php:471
|
736 |
msgid ""
|
737 |
"Enter the text that you want to show before the source name. A space is "
|
738 |
"automatically added between this text and the feed source name."
|
739 |
msgstr ""
|
740 |
|
741 |
+
#: includes/admin-help-settings.php:129 src/Modules/FeedTemplatesModule.php:472
|
742 |
msgid ""
|
743 |
"Enable this option to link the feed source name to the RSS feed's source "
|
744 |
"site."
|
745 |
msgstr ""
|
746 |
|
747 |
+
#: includes/admin-help-settings.php:135 src/Modules/FeedTemplatesModule.php:475
|
748 |
msgid "Enable this to show the feed item's date."
|
749 |
msgstr ""
|
750 |
|
751 |
+
#: includes/admin-help-settings.php:137 src/Modules/FeedTemplatesModule.php:476
|
752 |
msgid ""
|
753 |
"Enter the text that you want to show before the feed item date. A space is "
|
754 |
"automatically added between this text and the date."
|
755 |
msgstr ""
|
756 |
|
757 |
+
#: includes/admin-help-settings.php:139 src/Modules/FeedTemplatesModule.php:477
|
758 |
msgid "The format to use for the feed item dates, as a PHP date format."
|
759 |
msgstr ""
|
760 |
|
761 |
+
#: includes/admin-help-settings.php:141
|
762 |
msgid ""
|
763 |
"Enable this option to show the elapsed time from the feed item's date and "
|
764 |
"time to the present time.\n"
|
765 |
+
"<em>Eg. 2 hours ago</em>"
|
766 |
msgstr ""
|
767 |
|
768 |
+
#: includes/admin-help-settings.php:148
|
769 |
msgid ""
|
770 |
"Check this box to disable all plugin styles used for displaying feed items.\n"
|
771 |
"\n"
|
772 |
+
"This will allow you to provide your own custom CSS styles for displaying the "
|
773 |
+
"feed items."
|
774 |
+
msgstr ""
|
775 |
+
|
776 |
+
#: includes/admin-help-settings.php:157
|
777 |
+
msgid ""
|
778 |
+
"Path to the file containing one or more certificates.\n"
|
779 |
+
"\n"
|
780 |
+
"These will be used to verify certificates over secure connection, such as "
|
781 |
+
"when fetching a remote resource over HTTPS.\n"
|
782 |
+
"\n"
|
783 |
+
"Relative path will be relative to the WordPress root.\n"
|
784 |
+
"\n"
|
785 |
+
"<strong>Default:</strong> path to certificate file bundled with WordPress."
|
786 |
+
msgstr ""
|
787 |
+
|
788 |
+
#: includes/admin-help-settings.php:166
|
789 |
+
msgid ""
|
790 |
+
"The string to be used as the useragent for feed requests.\n"
|
791 |
+
"\n"
|
792 |
+
"If non-empty, this exact string will be sent with every request made by WP "
|
793 |
+
"RSS Aggregator for a feed source XML document.\n"
|
794 |
+
"\n"
|
795 |
+
"Some servers react in unexpected ways to the default value. In such cases, "
|
796 |
+
"try changing this to something else.\n"
|
797 |
+
"\n"
|
798 |
+
"The default value is the useragent that the Chrome Browser uses."
|
799 |
+
msgstr ""
|
800 |
+
|
801 |
+
#: includes/admin-help-settings.php:173
|
802 |
+
msgid ""
|
803 |
+
"Tick this box to enable caching for a small performance gain.\n"
|
804 |
+
"\n"
|
805 |
+
"When enabled, websites may ignore the plugin if their RSS feed did not "
|
806 |
+
"change. So we suggest testing it out first to ensure that your RSS feeds "
|
807 |
+
"work well with this option enabled.\n"
|
808 |
+
"\n"
|
809 |
+
"If you encounter problems or weird behavior, we suggest turning this option "
|
810 |
+
"off."
|
811 |
msgstr ""
|
812 |
|
813 |
+
#: includes/admin-help.php:25 includes/admin.php:32
|
814 |
msgid "Help & Support"
|
815 |
msgstr ""
|
816 |
|
817 |
+
#: includes/admin-help.php:27
|
818 |
+
msgid "Knowledge Base"
|
819 |
msgstr ""
|
820 |
|
821 |
+
#: includes/admin-help.php:31
|
822 |
+
#, php-format
|
823 |
msgid ""
|
824 |
+
"In the <a href=\"%s\">WP RSS Aggregator knowledge base</a> you will find "
|
825 |
+
"comprehensive details and tutorials on how to use the core plugin and all "
|
826 |
+
"the add-ons.\n"
|
827 |
+
"\n"
|
828 |
+
"\t\t\t\t\t\t\tThere are also some videos to help you make a quick start to "
|
829 |
+
"setting up and enjoying this plugin."
|
830 |
msgstr ""
|
831 |
|
832 |
+
#: includes/admin-help.php:40
|
833 |
msgid "Frequently Asked Questions (FAQ)"
|
834 |
msgstr ""
|
835 |
|
836 |
+
#: includes/admin-help.php:44
|
837 |
+
#, php-format
|
838 |
msgid ""
|
839 |
+
"If after going through the knowledge base you still have questions, please "
|
840 |
+
"take a look at the <a href=\"%s\">FAQ section</a>. We set this up purposely "
|
841 |
+
"to answer the most commonly asked questions from our users."
|
|
|
842 |
msgstr ""
|
843 |
|
844 |
+
#: includes/admin-help.php:59
|
845 |
+
msgid "Built-in Help Beacon"
|
846 |
msgstr ""
|
847 |
|
848 |
+
#: includes/admin-help.php:62
|
849 |
msgid ""
|
850 |
+
"The help beacon is an interactive button that appears on the bottom-right "
|
851 |
+
"section of WP RSS Aggregator admin pages."
|
|
|
852 |
msgstr ""
|
853 |
|
854 |
+
#: includes/admin-help.php:63
|
855 |
+
msgid ""
|
856 |
+
"It provides access to our documentation and (if you have a valid license for "
|
857 |
+
"any of our add-ons) you can also contact our support team directly."
|
858 |
msgstr ""
|
859 |
|
860 |
+
#: includes/admin-help.php:66
|
861 |
msgid ""
|
862 |
+
"The beacon tracks what pages you were on before clicking it. This helps it "
|
863 |
+
"provide relevant help results and also helps the support team better "
|
864 |
+
"understand the problem you are facing."
|
|
|
865 |
msgstr ""
|
866 |
|
867 |
+
#: includes/admin-help.php:67
|
868 |
msgid ""
|
869 |
+
"The beacon only works on WP RSS Aggregator admin pages and does not track "
|
870 |
+
"your mouse clicks and keyboard input."
|
871 |
msgstr ""
|
872 |
|
873 |
+
#: includes/admin-help.php:70
|
874 |
+
msgid "The support beacon is currently <b>enabled</b>."
|
|
|
875 |
msgstr ""
|
876 |
|
877 |
+
#: includes/admin-help.php:72
|
878 |
+
msgid "Disable support beacon"
|
879 |
msgstr ""
|
880 |
|
881 |
+
#: includes/admin-help.php:75
|
882 |
+
msgid ""
|
883 |
+
"By enabling the help beacon, you are consenting to this data collection."
|
884 |
msgstr ""
|
885 |
|
886 |
+
#: includes/admin-help.php:77
|
887 |
+
msgid "Enable support beacon"
|
888 |
msgstr ""
|
889 |
|
890 |
+
#: includes/admin-help.php:108
|
891 |
+
msgid "Premium Support"
|
892 |
msgstr ""
|
893 |
|
894 |
+
#: includes/admin-help.php:111
|
895 |
+
#, php-format
|
896 |
msgid ""
|
897 |
+
"Contact us <a href=\"%s\" target=\"%s=\">here</a> for pre-sales and premium "
|
898 |
+
"support."
|
899 |
msgstr ""
|
900 |
|
901 |
+
#: includes/admin-help.php:168
|
902 |
+
msgid "Email Support"
|
903 |
msgstr ""
|
904 |
|
905 |
+
#: includes/admin-help.php:169
|
906 |
+
msgid ""
|
907 |
+
"If you still can't find an answer to your query after reading the "
|
908 |
+
"documentation and going through the FAQ, just fill out the support request "
|
909 |
+
"form below. We'll be happy to help you out."
|
910 |
msgstr ""
|
911 |
|
912 |
+
#: includes/admin-help.php:176
|
913 |
+
msgid "From: "
|
914 |
msgstr ""
|
915 |
|
916 |
+
#: includes/admin-help.php:181
|
917 |
+
msgid "Replies will be sent to this email address."
|
918 |
msgstr ""
|
919 |
|
920 |
+
#: includes/admin-help.php:190
|
921 |
+
msgid "Attachments"
|
922 |
msgstr ""
|
923 |
|
924 |
+
#: includes/admin-help.php:193
|
925 |
+
msgid "WP RSS Aggregator log file"
|
|
|
|
|
926 |
msgstr ""
|
927 |
|
928 |
+
#: includes/admin-help.php:196
|
929 |
+
msgid "WordPress debugging information"
|
|
|
|
|
930 |
msgstr ""
|
931 |
|
932 |
+
#: includes/admin-help.php:201
|
933 |
+
msgid "Send Message"
|
934 |
msgstr ""
|
935 |
|
936 |
+
#: includes/admin-help.php:214
|
937 |
+
msgid "Support Forums"
|
938 |
msgstr ""
|
939 |
|
940 |
+
#: includes/admin-help.php:217
|
941 |
+
#, php-format
|
942 |
msgid ""
|
943 |
+
"Users of the free version of WP RSS Aggregator can ask questions on the <a "
|
944 |
+
"href=\"%s\">support forum</a>."
|
945 |
msgstr ""
|
946 |
|
947 |
+
#: includes/admin-help.php:253
|
948 |
+
#, php-format
|
949 |
+
msgid ""
|
950 |
+
"There was an error sending the form. Please use the <a href=\"%s\" target="
|
951 |
+
"\"_blank\">contact form on our site.</a>"
|
952 |
msgstr ""
|
953 |
|
954 |
+
#: includes/admin-help.php:283
|
955 |
#, php-format
|
956 |
msgid ""
|
957 |
+
"Please fill out all the fields in the form, including the <strong>%s</"
|
958 |
+
"strong> field."
|
|
|
959 |
msgstr ""
|
960 |
|
961 |
+
#: includes/admin-help.php:291
|
962 |
+
msgid "Please enter a valid email address."
|
963 |
+
msgstr ""
|
964 |
+
|
965 |
+
#: includes/admin-help.php:1078
|
966 |
msgid ""
|
967 |
+
"Could not enqueue tooltip content: the queue method is not a valid callable."
|
968 |
+
msgstr ""
|
969 |
+
|
970 |
+
#: includes/admin-intro-page.php:28 includes/admin-intro-page.php:29
|
971 |
+
msgid "Welcome to WP RSS Aggregator"
|
972 |
msgstr ""
|
973 |
|
974 |
+
#: includes/admin-intro-page.php:93
|
975 |
#, php-format
|
976 |
+
msgid "Missing intro step param \"%s\""
|
977 |
+
msgstr ""
|
978 |
+
|
979 |
+
#: includes/admin-intro-page.php:120
|
980 |
+
msgid "Missing feed URL parameter"
|
981 |
+
msgstr ""
|
982 |
+
|
983 |
+
#: includes/admin-intro-page.php:125
|
984 |
+
msgid "The given feed URL is invalid"
|
985 |
+
msgstr ""
|
986 |
+
|
987 |
+
#: includes/admin-intro-page.php:196
|
988 |
+
msgid "Failed to retrieve items"
|
989 |
+
msgstr ""
|
990 |
+
|
991 |
+
#: includes/admin-intro-page.php:279
|
992 |
+
#, php-format
|
993 |
+
msgid "Failed to import the feed source \"%s\" with URL \"%s\""
|
994 |
msgstr ""
|
995 |
|
996 |
+
#: includes/admin-intro-page.php:373
|
997 |
+
msgctxt "default name of shortcode page"
|
998 |
+
msgid "Feeds"
|
999 |
msgstr ""
|
1000 |
|
1001 |
+
#: includes/admin-metaboxes.php:12
|
1002 |
msgid "Save Feed Source"
|
1003 |
msgstr ""
|
1004 |
|
1005 |
+
#: includes/admin-metaboxes.php:31
|
1006 |
msgid "Feed Preview"
|
1007 |
msgstr ""
|
1008 |
|
1009 |
+
#: includes/admin-metaboxes.php:40
|
1010 |
msgid "Feed Processing"
|
1011 |
msgstr ""
|
1012 |
|
1013 |
+
#: includes/admin-metaboxes.php:50
|
1014 |
+
msgid "Share The Love"
|
1015 |
msgstr ""
|
1016 |
|
1017 |
+
#: includes/admin-metaboxes.php:60
|
1018 |
msgid "Feed Source Details"
|
1019 |
msgstr ""
|
1020 |
|
1021 |
+
#: includes/admin-metaboxes.php:93 includes/opml-importer.php:196
|
1022 |
+
#: includes/opml-importer.php:227 src/Ui/BlacklistTable.php:74
|
1023 |
msgid "URL"
|
1024 |
msgstr ""
|
1025 |
|
1026 |
+
#: includes/admin-metaboxes.php:101
|
1027 |
msgid "Limit"
|
1028 |
msgstr ""
|
1029 |
|
1030 |
+
#: includes/admin-metaboxes.php:107
|
1031 |
msgid "Link to enclosure"
|
1032 |
msgstr ""
|
1033 |
|
1034 |
+
#: includes/admin-metaboxes.php:113 includes/admin-options.php:136
|
1035 |
+
msgid "Unique titles only"
|
1036 |
+
msgstr ""
|
1037 |
+
|
1038 |
+
#: includes/admin-metaboxes.php:120 includes/admin-options-legacy.php:70
|
1039 |
+
msgid "Link source"
|
1040 |
+
msgstr ""
|
1041 |
+
|
1042 |
+
#: includes/admin-metaboxes.php:127
|
1043 |
+
msgid "Use source info"
|
1044 |
+
msgstr ""
|
1045 |
+
|
1046 |
+
#: includes/admin-metaboxes.php:267 includes/admin-metaboxes.php:557
|
1047 |
+
#: includes/admin-metaboxes.php:653 includes/admin-options.php:565
|
1048 |
+
#: includes/admin-options.php:694 includes/admin-options.php:801
|
1049 |
+
#: includes/feed-access.php:263 src/Modules/FeedTemplatesModule.php:391
|
1050 |
msgid "Default"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
+
#: includes/admin-metaboxes.php:292
|
1054 |
+
msgid "Updating feed source"
|
1055 |
+
msgstr ""
|
1056 |
+
|
1057 |
+
#: includes/admin-metaboxes.php:451
|
1058 |
#, php-format
|
1059 |
msgid "Latest %1$s feed items out of %2$s available from %3$s"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
+
#: includes/admin-metaboxes.php:460 includes/scripts.php:56
|
1063 |
msgid "ago"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
+
#: includes/admin-metaboxes.php:462
|
1067 |
msgid "No Date"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
+
#: includes/admin-metaboxes.php:484
|
1071 |
msgid ""
|
1072 |
"<strong>Invalid feed URL</strong> - Double check the feed source URL setting "
|
1073 |
"above."
|
1074 |
msgstr ""
|
1075 |
|
1076 |
+
#: includes/admin-metaboxes.php:488
|
1077 |
#, php-format
|
1078 |
msgid ""
|
1079 |
"Not sure where to find the RSS feed on a website? <a target=\"_blank\" href="
|
1080 |
"\"%1$s\">Click here</a> for a visual guide. "
|
1081 |
msgstr ""
|
1082 |
|
1083 |
+
#: includes/admin-metaboxes.php:493
|
1084 |
+
msgid "No feed URL defined yet"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
+
#: includes/admin-metaboxes.php:518
|
1088 |
+
msgid "Force the feed"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
+
#: includes/admin-metaboxes.php:552
|
1092 |
msgid "Active"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
+
#: includes/admin-metaboxes.php:553
|
1096 |
+
msgid "Paused"
|
1097 |
msgstr ""
|
1098 |
|
1099 |
+
#: includes/admin-metaboxes.php:650
|
1100 |
+
msgid "Limit items by age:"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
+
#: includes/admin-metaboxes.php:684
|
1104 |
+
msgid "Need help?"
|
1105 |
msgstr ""
|
1106 |
|
1107 |
+
#: includes/admin-metaboxes.php:686
|
1108 |
+
msgid "Check out the support forum"
|
1109 |
msgstr ""
|
1110 |
|
1111 |
+
#: includes/admin-metaboxes.php:689
|
1112 |
+
msgid "Suggest a new feature"
|
1113 |
msgstr ""
|
1114 |
|
1115 |
+
#: includes/admin-metaboxes.php:703
|
1116 |
+
msgid "Give it a 5 star rating on WordPress.org"
|
1117 |
msgstr ""
|
1118 |
|
1119 |
+
#: includes/admin-metaboxes.php:719
|
1120 |
msgid "Follow WP Mayor on Twitter."
|
1121 |
msgstr ""
|
1122 |
|
1123 |
+
#: includes/admin-metaboxes.php:720
|
1124 |
msgid "Like WP Mayor on Facebook."
|
1125 |
msgstr ""
|
1126 |
|
1127 |
+
#: includes/admin-options-legacy.php:21
|
1128 |
+
msgid "Display settings"
|
1129 |
msgstr ""
|
1130 |
|
1131 |
+
#: includes/admin-options-legacy.php:24
|
1132 |
+
msgid "Link title"
|
1133 |
msgstr ""
|
1134 |
|
1135 |
+
#: includes/admin-options-legacy.php:28
|
1136 |
+
msgid "Title maximum length"
|
1137 |
msgstr ""
|
1138 |
|
1139 |
+
#: includes/admin-options-legacy.php:32
|
1140 |
+
msgid "Show authors"
|
1141 |
msgstr ""
|
1142 |
|
1143 |
+
#: includes/admin-options-legacy.php:36
|
1144 |
+
msgid "For video feed items use"
|
1145 |
msgstr ""
|
1146 |
|
1147 |
+
#: includes/admin-options-legacy.php:40
|
1148 |
+
msgid "Pagination type"
|
1149 |
msgstr ""
|
1150 |
|
1151 |
+
#: includes/admin-options-legacy.php:44
|
1152 |
+
msgid "Feed display limit"
|
1153 |
msgstr ""
|
1154 |
|
1155 |
+
#: includes/admin-options-legacy.php:48
|
1156 |
+
msgid "Open links behaviour"
|
1157 |
msgstr ""
|
1158 |
|
1159 |
+
#: includes/admin-options-legacy.php:52
|
1160 |
+
msgid "Set links as nofollow"
|
1161 |
msgstr ""
|
1162 |
|
1163 |
+
#: includes/admin-options-legacy.php:59
|
1164 |
+
msgid "Source Display settings"
|
1165 |
msgstr ""
|
1166 |
|
1167 |
+
#: includes/admin-options-legacy.php:62
|
1168 |
+
msgid "Show source"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
+
#: includes/admin-options-legacy.php:66
|
1172 |
+
msgid "Text preceding source"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
+
#: includes/admin-options-legacy.php:77
|
1176 |
+
msgid "Date Display settings"
|
1177 |
msgstr ""
|
1178 |
|
1179 |
+
#: includes/admin-options-legacy.php:80
|
1180 |
+
msgid "Show date"
|
1181 |
msgstr ""
|
1182 |
|
1183 |
+
#: includes/admin-options-legacy.php:84
|
1184 |
+
msgid "Text preceding date"
|
1185 |
msgstr ""
|
1186 |
|
1187 |
+
#: includes/admin-options-legacy.php:88
|
1188 |
+
msgid "Date format"
|
1189 |
msgstr ""
|
1190 |
|
1191 |
+
#: includes/admin-options-legacy.php:92
|
1192 |
+
msgid "Time ago format"
|
1193 |
msgstr ""
|
1194 |
|
1195 |
+
#: includes/admin-options-legacy.php:110
|
1196 |
+
msgid ""
|
1197 |
+
"In this section you can find some general options that control how the feed "
|
1198 |
+
"items are displayed."
|
1199 |
msgstr ""
|
1200 |
|
1201 |
+
#: includes/admin-options-legacy.php:123
|
1202 |
+
msgid "Options that control how the feed item's source is displayed."
|
1203 |
msgstr ""
|
1204 |
|
1205 |
+
#: includes/admin-options-legacy.php:136
|
1206 |
+
msgid "Options that control how the feed item's date is displayed."
|
1207 |
+
msgstr ""
|
1208 |
+
|
1209 |
+
#: includes/admin-options-legacy.php:177 includes/admin-options.php:430
|
1210 |
+
msgid "No limit"
|
1211 |
+
msgstr ""
|
1212 |
+
|
1213 |
+
#: includes/admin-options-legacy.php:215
|
1214 |
+
#: src/Modules/FeedTemplatesModule.php:536
|
1215 |
+
msgid "Original page link"
|
1216 |
+
msgstr ""
|
1217 |
+
|
1218 |
+
#: includes/admin-options-legacy.php:216
|
1219 |
+
#: src/Modules/FeedTemplatesModule.php:537
|
1220 |
+
msgid "Embedded video player link"
|
1221 |
+
msgstr ""
|
1222 |
+
|
1223 |
+
#: includes/admin-options-legacy.php:224
|
1224 |
+
msgid "This will not affect already imported feed items."
|
1225 |
+
msgstr ""
|
1226 |
+
|
1227 |
+
#: includes/admin-options-legacy.php:239
|
1228 |
+
msgid "\"Older posts\" and \"Newer posts\" links"
|
1229 |
+
msgstr ""
|
1230 |
+
|
1231 |
+
#: includes/admin-options-legacy.php:240
|
1232 |
+
msgid "Page numbers with \"Next\" and \"Previous\" page links"
|
1233 |
+
msgstr ""
|
1234 |
+
|
1235 |
+
#: includes/admin-options-legacy.php:273 includes/update.php:133
|
1236 |
+
msgid "Lightbox"
|
1237 |
+
msgstr ""
|
1238 |
+
|
1239 |
+
#: includes/admin-options-legacy.php:274 includes/update.php:131
|
1240 |
+
msgid "New window"
|
1241 |
+
msgstr ""
|
1242 |
+
|
1243 |
+
#: includes/admin-options-legacy.php:275 includes/update.php:135
|
1244 |
+
msgid "Self"
|
1245 |
+
msgstr ""
|
1246 |
+
|
1247 |
+
#: includes/admin-options-legacy.php:421
|
1248 |
+
msgid "PHP Date Format Reference"
|
1249 |
+
msgstr ""
|
1250 |
+
|
1251 |
+
#: includes/admin-options.php:45 includes/admin.php:28
|
1252 |
+
msgid "WP RSS Aggregator Settings"
|
1253 |
+
msgstr ""
|
1254 |
+
|
1255 |
+
#: includes/admin-options.php:55
|
1256 |
+
msgid "General"
|
1257 |
+
msgstr ""
|
1258 |
+
|
1259 |
+
#: includes/admin-options.php:59
|
1260 |
+
msgid "Custom Feed"
|
1261 |
+
msgstr ""
|
1262 |
+
|
1263 |
+
#: includes/admin-options.php:67
|
1264 |
+
msgid "Advanced"
|
1265 |
+
msgstr ""
|
1266 |
+
|
1267 |
+
#: includes/admin-options.php:73
|
1268 |
+
msgid "Licenses"
|
1269 |
+
msgstr ""
|
1270 |
+
|
1271 |
+
#: includes/admin-options.php:116
|
1272 |
+
msgid "Save Settings"
|
1273 |
+
msgstr ""
|
1274 |
+
|
1275 |
+
#: includes/admin-options.php:132
|
1276 |
+
msgid "Update interval"
|
1277 |
+
msgstr ""
|
1278 |
+
|
1279 |
+
#: includes/admin-options.php:140
|
1280 |
+
msgid "Import order"
|
1281 |
+
msgstr ""
|
1282 |
+
|
1283 |
+
#: includes/admin-options.php:144
|
1284 |
+
msgid "Limit items by age"
|
1285 |
+
msgstr ""
|
1286 |
+
|
1287 |
+
#: includes/admin-options.php:148
|
1288 |
+
msgid "Limit feed items stored per feed"
|
1289 |
+
msgstr ""
|
1290 |
+
|
1291 |
+
#: includes/admin-options.php:152
|
1292 |
+
msgid "Limit feed items stored"
|
1293 |
+
msgstr ""
|
1294 |
+
|
1295 |
+
#: includes/admin-options.php:156
|
1296 |
+
msgid "Limit feed items per import"
|
1297 |
+
msgstr ""
|
1298 |
+
|
1299 |
+
#: includes/admin-options.php:160
|
1300 |
+
msgid "Schedule future items"
|
1301 |
+
msgstr ""
|
1302 |
+
|
1303 |
+
#: includes/admin-options.php:167
|
1304 |
+
msgid "Custom feed URL"
|
1305 |
+
msgstr ""
|
1306 |
+
|
1307 |
+
#: includes/admin-options.php:171
|
1308 |
+
msgid "Custom feed title"
|
1309 |
+
msgstr ""
|
1310 |
+
|
1311 |
+
#: includes/admin-options.php:175
|
1312 |
+
msgid "Custom feed limit"
|
1313 |
+
msgstr ""
|
1314 |
+
|
1315 |
+
#: includes/admin-options.php:188
|
1316 |
+
msgid "Disable Styles"
|
1317 |
+
msgstr ""
|
1318 |
+
|
1319 |
+
#: includes/admin-options.php:219 templates/admin/tools/import.twig:1
|
1320 |
+
#: templates/admin/tools/import.twig:13
|
1321 |
+
msgid "Import Settings"
|
1322 |
+
msgstr ""
|
1323 |
+
|
1324 |
+
#: includes/admin-options.php:230
|
1325 |
+
msgid "Custom RSS Feed"
|
1326 |
+
msgstr ""
|
1327 |
+
|
1328 |
+
#: includes/admin-options.php:240
|
1329 |
+
msgid "Advanced Settings"
|
1330 |
+
msgstr ""
|
1331 |
+
|
1332 |
+
#: includes/admin-options.php:244
|
1333 |
+
msgid "Styles"
|
1334 |
+
msgstr ""
|
1335 |
+
|
1336 |
+
#: includes/admin-options.php:385
|
1337 |
+
msgid "Configure how WP RSS Aggregator imports RSS feed items."
|
1338 |
+
msgstr ""
|
1339 |
+
|
1340 |
+
#: includes/admin-options.php:395
|
1341 |
+
msgid ""
|
1342 |
+
"WP RSS Aggregator creates a custom RSS feed on your site that includes all "
|
1343 |
+
"of your imported items. Use the below options to set it up."
|
1344 |
+
msgstr ""
|
1345 |
+
|
1346 |
+
#: includes/admin-options.php:404
|
1347 |
+
msgid "Only change these options if you know what you are doing!"
|
1348 |
+
msgstr ""
|
1349 |
+
|
1350 |
+
#: includes/admin-options.php:413
|
1351 |
+
msgid ""
|
1352 |
+
"If you would like to disable all styles used in this plugin, tick the "
|
1353 |
+
"checkbox."
|
1354 |
+
msgstr ""
|
1355 |
+
|
1356 |
+
#: includes/admin-options.php:464 includes/admin-options.php:594
|
1357 |
+
msgid "No Limit"
|
1358 |
+
msgstr ""
|
1359 |
+
|
1360 |
+
#: includes/admin-options.php:541
|
1361 |
+
msgid "Open custom feed"
|
1362 |
+
msgstr ""
|
1363 |
+
|
1364 |
+
#: includes/admin-options.php:629
|
1365 |
+
msgid "Latest items first"
|
1366 |
+
msgstr ""
|
1367 |
+
|
1368 |
+
#: includes/admin-options.php:630
|
1369 |
+
msgid "Oldest items first"
|
1370 |
+
msgstr ""
|
1371 |
+
|
1372 |
+
#: includes/admin-options.php:631
|
1373 |
+
msgid "Original feed order"
|
1374 |
+
msgstr ""
|
1375 |
+
|
1376 |
+
#: includes/admin-options.php:656
|
1377 |
+
msgid "Generate Random Code"
|
1378 |
+
msgstr ""
|
1379 |
+
|
1380 |
+
#: includes/admin-options.php:661
|
1381 |
+
msgid ""
|
1382 |
+
"Enter the code to use to securely reset the plugin and deactivate it. Be "
|
1383 |
+
"sure to save this code somewhere safe."
|
1384 |
+
msgstr ""
|
1385 |
+
|
1386 |
+
#: includes/admin-options.php:667
|
1387 |
+
msgid ""
|
1388 |
+
"Leave this empty to disable the secure reset function.<br/>\n"
|
1389 |
+
" You use this code by adding any of the following to any URL on "
|
1390 |
+
"your site."
|
1391 |
+
msgstr ""
|
1392 |
+
|
1393 |
+
#: includes/admin-options.php:670
|
1394 |
+
msgid "Resets your WP RSS Aggregator settings"
|
1395 |
+
msgstr ""
|
1396 |
+
|
1397 |
+
#: includes/admin-options.php:671
|
1398 |
+
msgid "Deactivates WP RSS Aggregator"
|
1399 |
+
msgstr ""
|
1400 |
+
|
1401 |
+
#: includes/admin-options.php:672
|
1402 |
+
msgid "Does both of the above"
|
1403 |
+
msgstr ""
|
1404 |
+
|
1405 |
+
#: includes/admin-options.php:676
|
1406 |
+
msgid ""
|
1407 |
+
"Use the above actions only when absolutely necessary, or when instructed to "
|
1408 |
+
"by support staff."
|
1409 |
+
msgstr ""
|
1410 |
+
|
1411 |
+
#: includes/admin-options.php:692
|
1412 |
+
msgid "On"
|
1413 |
+
msgstr ""
|
1414 |
+
|
1415 |
+
#: includes/admin-options.php:693
|
1416 |
+
msgid "Off"
|
1417 |
+
msgstr ""
|
1418 |
+
|
1419 |
+
#: includes/admin-options.php:805
|
1420 |
+
#, php-format
|
1421 |
+
msgid "%s year"
|
1422 |
+
msgid_plural "%s years"
|
1423 |
+
msgstr[0] ""
|
1424 |
+
msgstr[1] ""
|
1425 |
+
|
1426 |
+
#: includes/admin-options.php:806
|
1427 |
+
#, php-format
|
1428 |
+
msgid "%s month"
|
1429 |
+
msgid_plural "%s months"
|
1430 |
+
msgstr[0] ""
|
1431 |
+
msgstr[1] ""
|
1432 |
+
|
1433 |
+
#: includes/admin-options.php:807
|
1434 |
+
#, php-format
|
1435 |
+
msgid "%s week"
|
1436 |
+
msgid_plural "%s weeks"
|
1437 |
+
msgstr[0] ""
|
1438 |
+
msgstr[1] ""
|
1439 |
+
|
1440 |
+
#: includes/admin-options.php:808
|
1441 |
+
#, php-format
|
1442 |
+
msgid "%s day"
|
1443 |
+
msgid_plural "%s days"
|
1444 |
+
msgstr[0] ""
|
1445 |
+
msgstr[1] ""
|
1446 |
+
|
1447 |
+
#: includes/admin-options.php:809
|
1448 |
+
#, php-format
|
1449 |
+
msgid "%s hour"
|
1450 |
+
msgid_plural "%s hours"
|
1451 |
+
msgstr[0] ""
|
1452 |
+
msgstr[1] ""
|
1453 |
+
|
1454 |
+
#: includes/admin-options.php:810
|
1455 |
+
#, php-format
|
1456 |
+
msgid "%s minute"
|
1457 |
+
msgid_plural "%s minutes"
|
1458 |
+
msgstr[0] ""
|
1459 |
+
msgstr[1] ""
|
1460 |
+
|
1461 |
+
#: includes/admin-options.php:811
|
1462 |
+
#, php-format
|
1463 |
+
msgid "%s second"
|
1464 |
+
msgid_plural "%s seconds"
|
1465 |
+
msgstr[0] ""
|
1466 |
+
msgstr[1] ""
|
1467 |
+
|
1468 |
+
#: includes/admin-options.php:816
|
1469 |
+
msgid "now"
|
1470 |
+
msgstr ""
|
1471 |
+
|
1472 |
+
#: includes/admin-plugins.php:46
|
1473 |
+
msgid "I no longer need the plugin"
|
1474 |
+
msgstr ""
|
1475 |
+
|
1476 |
+
#: includes/admin-plugins.php:50
|
1477 |
+
msgid "I found a better alternative"
|
1478 |
+
msgstr ""
|
1479 |
+
|
1480 |
+
#: includes/admin-plugins.php:54
|
1481 |
+
msgid "I couldn't get the plugin to work"
|
1482 |
+
msgstr ""
|
1483 |
+
|
1484 |
+
#: includes/admin-plugins.php:58
|
1485 |
+
msgid "I'm temporarily deactivating the plugin, but I'll be back"
|
1486 |
+
msgstr ""
|
1487 |
+
|
1488 |
+
#: includes/admin-plugins.php:62
|
1489 |
+
msgid "I have a WP RSS Aggregator add-on"
|
1490 |
+
msgstr ""
|
1491 |
+
|
1492 |
+
#: includes/admin-plugins.php:66
|
1493 |
+
msgid "Other"
|
1494 |
+
msgstr ""
|
1495 |
+
|
1496 |
+
#: includes/admin-plugins.php:71
|
1497 |
+
msgid "Would you mind sharing its name?"
|
1498 |
+
msgstr ""
|
1499 |
+
|
1500 |
+
#: includes/admin-plugins.php:83
|
1501 |
+
msgid ""
|
1502 |
+
"Have you <a target=\"_blank\" href=\"https://wordpress.org/support/plugin/wp-"
|
1503 |
+
"rss-aggregator/\">contacted our support team</a> or checked out our <a href="
|
1504 |
+
"\"https://kb.wprssaggregator.com/\" target=\"_blank\">Knowledge Base</a>?"
|
1505 |
+
msgstr ""
|
1506 |
+
|
1507 |
+
#: includes/admin-plugins.php:94
|
1508 |
+
msgid ""
|
1509 |
+
"This core plugin is required for all our premium add-ons. Please don't "
|
1510 |
+
"deactivate it if you currently have premium add-ons installed and activated."
|
1511 |
+
msgstr ""
|
1512 |
+
|
1513 |
+
#: includes/admin-plugins.php:103
|
1514 |
+
msgid "Please share your reason..."
|
1515 |
+
msgstr ""
|
1516 |
+
|
1517 |
+
#: includes/admin-update-page.php:14 includes/admin-update-page.php:15
|
1518 |
+
msgid "Thank you for updating WP RSS Aggregator"
|
1519 |
+
msgstr ""
|
1520 |
+
|
1521 |
+
#: includes/admin-update-page.php:43
|
1522 |
+
msgid "What's new in WP RSS Aggregator"
|
1523 |
+
msgstr ""
|
1524 |
+
|
1525 |
+
#: includes/admin.php:28 includes/admin.php:112
|
1526 |
+
msgid "Settings"
|
1527 |
+
msgstr ""
|
1528 |
+
|
1529 |
+
#: includes/admin.php:92
|
1530 |
+
msgid "Name this feed"
|
1531 |
+
msgstr ""
|
1532 |
+
|
1533 |
+
#: includes/admin.php:113
|
1534 |
+
msgid "Documentation"
|
1535 |
+
msgstr ""
|
1536 |
+
|
1537 |
+
#: includes/admin.php:184
|
1538 |
+
#, php-format
|
1539 |
+
msgid ""
|
1540 |
+
"Thank you for using <a href=\"%1$s\" target=\"_blank\">WP RSS Aggregator</a>."
|
1541 |
+
msgstr ""
|
1542 |
+
|
1543 |
+
#: includes/admin.php:188
|
1544 |
+
#, php-format
|
1545 |
+
msgid "Please <a href=\"%1$s\" target=\"_blank\">rate us</a>!"
|
1546 |
+
msgstr ""
|
1547 |
+
|
1548 |
+
#: includes/cpt-feeds.php:82
|
1549 |
+
#, php-format
|
1550 |
+
msgid "%1$s » %2$s Feed"
|
1551 |
+
msgstr ""
|
1552 |
+
|
1553 |
+
#: includes/cpt-feeds.php:83
|
1554 |
+
#, php-format
|
1555 |
+
msgid "<link rel=\"%1$s\" type=\"%2$s\" title=\"%3$s\" href=\"%4$s\" />\n"
|
1556 |
+
msgstr ""
|
1557 |
+
|
1558 |
+
#: includes/cron-jobs.php:222
|
1559 |
+
msgid "Once every 5 minutes"
|
1560 |
+
msgstr ""
|
1561 |
+
|
1562 |
+
#: includes/cron-jobs.php:226
|
1563 |
+
msgid "Once every 10 minutes"
|
1564 |
+
msgstr ""
|
1565 |
+
|
1566 |
+
#: includes/cron-jobs.php:230
|
1567 |
+
msgid "Once every 15 minutes"
|
1568 |
+
msgstr ""
|
1569 |
+
|
1570 |
+
#: includes/cron-jobs.php:234
|
1571 |
+
msgid "Once every 30 minutes"
|
1572 |
+
msgstr ""
|
1573 |
+
|
1574 |
+
#: includes/cron-jobs.php:238
|
1575 |
+
msgid "Once every 2 hours"
|
1576 |
+
msgstr ""
|
1577 |
+
|
1578 |
+
#: includes/cron-jobs.php:242
|
1579 |
+
msgid "Once weekly"
|
1580 |
+
msgstr ""
|
1581 |
+
|
1582 |
+
#: includes/feed-access.php:201
|
1583 |
+
msgid "Certificate path"
|
1584 |
+
msgstr ""
|
1585 |
+
|
1586 |
+
#: includes/feed-access.php:206
|
1587 |
+
msgid "Feed request useragent"
|
1588 |
+
msgstr ""
|
1589 |
+
|
1590 |
+
#: includes/feed-access.php:211
|
1591 |
+
msgid "Enable feed cache"
|
1592 |
+
msgstr ""
|
1593 |
+
|
1594 |
+
#: includes/feed-access.php:231
|
1595 |
+
msgid "Feed Request Useragent"
|
1596 |
+
msgstr ""
|
1597 |
+
|
1598 |
+
#: includes/feed-access.php:232
|
1599 |
+
msgid "Leave blank to inherit general setting"
|
1600 |
+
msgstr ""
|
1601 |
+
|
1602 |
+
#: includes/feed-blacklist.php:94
|
1603 |
+
msgid "The item you are trying to blacklist does not exist"
|
1604 |
+
msgstr ""
|
1605 |
+
|
1606 |
+
#: includes/feed-blacklist.php:99
|
1607 |
+
msgid "The item you are trying to blacklist is not valid!"
|
1608 |
+
msgstr ""
|
1609 |
+
|
1610 |
+
#: includes/feed-blacklist.php:178
|
1611 |
+
msgid "Delete Permanently & Blacklist"
|
1612 |
+
msgstr ""
|
1613 |
+
|
1614 |
+
#: includes/feed-blacklist.php:184
|
1615 |
+
msgid ""
|
1616 |
+
"The item will be deleted permanently, and its permalink will be recorded in "
|
1617 |
+
"the blacklist"
|
1618 |
+
msgstr ""
|
1619 |
+
|
1620 |
+
#: includes/feed-importing.php:380
|
1621 |
+
#, php-format
|
1622 |
+
msgid "Failed to fetch the RSS feed. Error: %s"
|
1623 |
+
msgstr ""
|
1624 |
+
|
1625 |
+
#: includes/feed-importing.php:827
|
1626 |
+
#, php-format
|
1627 |
+
msgid "The importing process failed after %d seconds with the message: \"%s\""
|
1628 |
+
msgstr ""
|
1629 |
+
|
1630 |
+
#: includes/feed-processing.php:467
|
1631 |
+
msgid "The plugin failed to schedule a fetch for this feed. Please try again."
|
1632 |
+
msgstr ""
|
1633 |
+
|
1634 |
+
#: includes/image-caching.php:514
|
1635 |
+
#, php-format
|
1636 |
+
msgid "Invalid URL provided: \"%1$s\""
|
1637 |
+
msgstr ""
|
1638 |
+
|
1639 |
+
#: includes/image-caching.php:538
|
1640 |
+
#, php-format
|
1641 |
+
msgid "Could not create directory: \"%1$s\". Filename: \"%2$s\""
|
1642 |
+
msgstr ""
|
1643 |
+
|
1644 |
+
#: includes/image-caching.php:544
|
1645 |
+
#, php-format
|
1646 |
+
msgid "The file library cannot be read from %1$s"
|
1647 |
+
msgstr ""
|
1648 |
+
|
1649 |
+
#: includes/legacy-feed-display.php:398 templates/feeds/list/feed-list.twig:15
|
1650 |
+
msgid "No feed items found."
|
1651 |
+
msgstr ""
|
1652 |
+
|
1653 |
+
#: includes/legacy-feed-display.php:448
|
1654 |
+
#: templates/feeds/list/default-pagination.twig:7
|
1655 |
+
msgid "Older posts"
|
1656 |
+
msgstr ""
|
1657 |
+
|
1658 |
+
#: includes/legacy-feed-display.php:449
|
1659 |
+
#: templates/feeds/list/default-pagination.twig:14
|
1660 |
+
msgid "Newer posts"
|
1661 |
+
msgstr ""
|
1662 |
+
|
1663 |
+
#: includes/libraries/EDD_licensing/EDD_SL_Plugin_Updater.php:186
|
1664 |
+
#, php-format
|
1665 |
+
msgid ""
|
1666 |
+
"There is a new version of %1$s available. %2$sView version %3$s details%4$s."
|
1667 |
+
msgstr ""
|
1668 |
+
|
1669 |
+
#: includes/libraries/EDD_licensing/EDD_SL_Plugin_Updater.php:194
|
1670 |
+
#, php-format
|
1671 |
+
msgid ""
|
1672 |
+
"There is a new version of %1$s available. %2$sView version %3$s details%4$s "
|
1673 |
+
"or %5$supdate now%6$s."
|
1674 |
+
msgstr ""
|
1675 |
+
|
1676 |
+
#: includes/libraries/EDD_licensing/EDD_SL_Plugin_Updater.php:337
|
1677 |
+
msgid "You do not have permission to install plugin updates"
|
1678 |
+
msgstr ""
|
1679 |
+
|
1680 |
+
#: includes/libraries/EDD_licensing/EDD_SL_Plugin_Updater.php:337
|
1681 |
+
msgid "Error"
|
1682 |
+
msgstr ""
|
1683 |
+
|
1684 |
+
#: includes/misc-functions.php:312
|
1685 |
+
msgid "…"
|
1686 |
+
msgstr ""
|
1687 |
+
|
1688 |
+
#. translators: If your word count is based on single characters (East Asian characters),
|
1689 |
+
#. enter 'characters'. Otherwise, enter 'words'. Do not translate into your own language.
|
1690 |
+
#: includes/misc-functions.php:317
|
1691 |
+
msgctxt "word count: words or characters?"
|
1692 |
+
msgid "words"
|
1693 |
+
msgstr ""
|
1694 |
+
|
1695 |
+
#: includes/opml-importer.php:65
|
1696 |
+
msgid "Import OPML"
|
1697 |
+
msgstr ""
|
1698 |
+
|
1699 |
+
#: includes/opml-importer.php:75
|
1700 |
+
msgid "Howdy! Import your feeds here from an OPML (.xml) export file."
|
1701 |
+
msgstr ""
|
1702 |
+
|
1703 |
+
#: includes/opml-importer.php:76
|
1704 |
+
msgid "Click the button below, choose your file, and click 'Upload'."
|
1705 |
+
msgstr ""
|
1706 |
+
|
1707 |
+
#: includes/opml-importer.php:77
|
1708 |
+
msgid "We will take care of the rest."
|
1709 |
+
msgstr ""
|
1710 |
+
|
1711 |
+
#: includes/opml-importer.php:108
|
1712 |
+
msgid "Sorry, an error has been encountered."
|
1713 |
+
msgstr ""
|
1714 |
+
|
1715 |
+
#: includes/opml-importer.php:113
|
1716 |
+
msgid "Sorry, it seems your uploaded file has been misplaced!"
|
1717 |
+
msgstr ""
|
1718 |
+
|
1719 |
+
#: includes/opml-importer.php:114
|
1720 |
+
msgid "The uploaded file could not be found at "
|
1721 |
+
msgstr ""
|
1722 |
+
|
1723 |
+
#: includes/opml-importer.php:115
|
1724 |
+
msgid "It is likely that this was caused by a permissions problem."
|
1725 |
+
msgstr ""
|
1726 |
+
|
1727 |
+
#: includes/opml-importer.php:187
|
1728 |
+
msgid "Feeds were imported successfully!"
|
1729 |
+
msgstr ""
|
1730 |
+
|
1731 |
+
#: includes/opml-importer.php:194 includes/opml-importer.php:225
|
1732 |
+
msgid "ID"
|
1733 |
+
msgstr ""
|
1734 |
+
|
1735 |
+
#: includes/opml-importer.php:195 includes/opml-importer.php:226
|
1736 |
+
msgid "Title"
|
1737 |
+
msgstr ""
|
1738 |
+
|
1739 |
+
#: includes/opml-importer.php:257
|
1740 |
+
msgid "WP RSS OPML"
|
1741 |
+
msgstr ""
|
1742 |
+
|
1743 |
+
#: includes/opml-importer.php:258
|
1744 |
+
msgid "Import Feeds from an OPML file into WP RSS Aggregator"
|
1745 |
+
msgstr ""
|
1746 |
+
|
1747 |
+
#: includes/scripts.php:22 includes/scripts.php:34
|
1748 |
+
msgid "Please wait ..."
|
1749 |
+
msgstr ""
|
1750 |
+
|
1751 |
+
#: includes/scripts.php:31
|
1752 |
+
msgid "Failed to import"
|
1753 |
+
msgstr ""
|
1754 |
+
|
1755 |
+
#: includes/scripts.php:32
|
1756 |
+
msgid "Importing!"
|
1757 |
+
msgstr ""
|
1758 |
+
|
1759 |
+
#: includes/scripts.php:33
|
1760 |
+
msgid "Deleting!"
|
1761 |
+
msgstr ""
|
1762 |
+
|
1763 |
+
#: includes/scripts.php:35
|
1764 |
+
msgid "Bulk Add"
|
1765 |
+
msgstr ""
|
1766 |
+
|
1767 |
+
#: includes/scripts.php:36
|
1768 |
+
msgid "OK"
|
1769 |
+
msgstr ""
|
1770 |
+
|
1771 |
+
#: includes/scripts.php:37
|
1772 |
+
msgid "Cancel"
|
1773 |
+
msgstr ""
|
1774 |
+
|
1775 |
+
#: includes/scripts.php:38
|
1776 |
+
msgid ""
|
1777 |
+
"The feed items listed here will be disregarded when importing new items from "
|
1778 |
+
"your feed sources."
|
1779 |
+
msgstr ""
|
1780 |
+
|
1781 |
+
#: includes/scripts.php:39
|
1782 |
+
msgid "Remove selected from Blacklist"
|
1783 |
+
msgstr ""
|
1784 |
+
|
1785 |
+
#: includes/scripts.php:50
|
1786 |
+
#: templates/admin/upsell/more-features-page/add-on.twig:22
|
1787 |
+
msgid "Activate"
|
1788 |
+
msgstr ""
|
1789 |
+
|
1790 |
+
#: includes/scripts.php:51
|
1791 |
+
msgid "Pause"
|
1792 |
+
msgstr ""
|
1793 |
+
|
1794 |
+
#: includes/scripts.php:62
|
1795 |
+
msgid "Activating..."
|
1796 |
+
msgstr ""
|
1797 |
+
|
1798 |
+
#: includes/scripts.php:63
|
1799 |
+
msgid "Deactivating..."
|
1800 |
+
msgstr ""
|
1801 |
+
|
1802 |
+
#: includes/scripts.php:68
|
1803 |
+
msgid "Sending..."
|
1804 |
+
msgstr ""
|
1805 |
+
|
1806 |
+
#: includes/scripts.php:69
|
1807 |
+
#, php-format
|
1808 |
+
msgid ""
|
1809 |
+
"There was an error sending the form. Please use the <a href=\"%s\">contact "
|
1810 |
+
"form on our site.</a>"
|
1811 |
+
msgstr ""
|
1812 |
+
|
1813 |
+
#: includes/scripts.php:70
|
1814 |
+
msgid ""
|
1815 |
+
"Your message has been sent and we'll send you a confirmation e-mail when we "
|
1816 |
+
"receive it."
|
1817 |
+
msgstr ""
|
1818 |
+
|
1819 |
+
#: includes/scripts.php:87
|
1820 |
+
msgid "Use Global Cron"
|
1821 |
+
msgstr ""
|
1822 |
+
|
1823 |
+
#: includes/scripts.php:98
|
1824 |
+
msgid "Global"
|
1825 |
+
msgstr ""
|
1826 |
+
|
1827 |
+
#: includes/scripts.php:105
|
1828 |
+
msgid "Are you sure you want to do this? This operation cannot be undone."
|
1829 |
+
msgstr ""
|
1830 |
+
|
1831 |
+
#: includes/system-info.php:60
|
1832 |
+
msgid "Could not determine database driver version"
|
1833 |
+
msgstr ""
|
1834 |
+
|
1835 |
+
#: includes/system-info.php:94
|
1836 |
+
msgid "Your server supports fsockopen."
|
1837 |
+
msgstr ""
|
1838 |
+
|
1839 |
+
#: includes/system-info.php:94
|
1840 |
+
msgid "Your server does not support fsockopen."
|
1841 |
+
msgstr ""
|
1842 |
+
|
1843 |
+
#: includes/system-info.php:268
|
1844 |
+
msgid ""
|
1845 |
+
"The mysql extension is deprecated since PHP 5.5 and removed since PHP 7.0; "
|
1846 |
+
"Use mysqli instead"
|
1847 |
+
msgstr ""
|
1848 |
+
|
1849 |
+
#: includes/update.php:67
|
1850 |
+
msgid "No Follow"
|
1851 |
+
msgstr ""
|
1852 |
+
|
1853 |
+
#: includes/update.php:69
|
1854 |
+
msgid "Follow"
|
1855 |
+
msgstr ""
|
1856 |
+
|
1857 |
+
#: src/Container/ModuleContainer.php:68
|
1858 |
+
#, php-format
|
1859 |
+
msgid "Service \"%s\" was not found"
|
1860 |
+
msgstr ""
|
1861 |
+
|
1862 |
+
#: src/Data/ChangelogDataSet.php:122
|
1863 |
+
#, php-format
|
1864 |
+
msgid "No changelog entry found for version %s"
|
1865 |
+
msgstr ""
|
1866 |
+
|
1867 |
+
#: src/Data/Collections/TwigTemplateCollection.php:91
|
1868 |
+
msgid "Cannot modify Twig templates"
|
1869 |
+
msgstr ""
|
1870 |
+
|
1871 |
+
#: src/Data/Collections/TwigTemplateCollection.php:101
|
1872 |
+
msgid "Cannot delete Twig templates"
|
1873 |
+
msgstr ""
|
1874 |
+
|
1875 |
+
#: src/Data/Wp/WpPostArrayMetaDataSet.php:72
|
1876 |
+
#, php-format
|
1877 |
+
msgid "Meta data \"%s\" for post %d does not have a \"%s\" key"
|
1878 |
+
msgstr ""
|
1879 |
+
|
1880 |
+
#: src/Data/Wp/WpPostMetaDataSet.php:51
|
1881 |
+
#: src/Util/NormalizeWpPostCapableTrait.php:32
|
1882 |
+
#, php-format
|
1883 |
+
msgid "Post with ID %s does not exist"
|
1884 |
+
msgstr ""
|
1885 |
+
|
1886 |
+
#: src/Database/WpdbTable.php:113
|
1887 |
+
#, php-format
|
1888 |
+
msgid "Cannot find record with key \"%s\""
|
1889 |
+
msgstr ""
|
1890 |
+
|
1891 |
+
#: src/Database/WpdbTable.php:234
|
1892 |
+
#, php-format
|
1893 |
+
msgid "Failed to create the \"%s\" database table. Reason: %s"
|
1894 |
+
msgstr ""
|
1895 |
+
|
1896 |
+
#: src/Entities/Collections/WpEntityCollection.php:129
|
1897 |
+
#, php-format
|
1898 |
+
msgid "Post \"%s\" was not found"
|
1899 |
+
msgstr ""
|
1900 |
+
|
1901 |
+
#: src/Handlers/FeedTemplates/PreviewTemplateRedirectHandler.php:75
|
1902 |
+
msgid "You do not have sufficient privileges!"
|
1903 |
+
msgstr ""
|
1904 |
+
|
1905 |
+
#: src/Handlers/FeedTemplates/PreviewTemplateRedirectHandler.php:81
|
1906 |
+
msgid "Invalid template ID"
|
1907 |
+
msgstr ""
|
1908 |
+
|
1909 |
+
#: src/Handlers/Images/RenderItemsImageColumnHandler.php:63
|
1910 |
+
msgid "Feed item image"
|
1911 |
+
msgstr ""
|
1912 |
+
|
1913 |
+
#: src/Importer/Images/ImageContainer.php:57
|
1914 |
+
msgid "Image URL cannot be empty"
|
1915 |
+
msgstr ""
|
1916 |
+
|
1917 |
+
#: src/Modules/BlacklistToolModule.php:33 src/Ui/BlacklistTable.php:37
|
1918 |
+
#: src/Ui/BlacklistTable.php:38 templates/admin/tools/blacklist.twig:2
|
1919 |
+
msgid "Blacklist"
|
1920 |
+
msgstr ""
|
1921 |
+
|
1922 |
+
#: src/Modules/BlacklistToolModule.php:71
|
1923 |
+
msgid "The blacklist item URL is empty. Please enter the URL to blacklist."
|
1924 |
+
msgstr ""
|
1925 |
+
|
1926 |
+
#: src/Modules/BlacklistToolModule.php:82
|
1927 |
+
msgid "Added to blacklist."
|
1928 |
+
msgstr ""
|
1929 |
+
|
1930 |
+
#: src/Modules/BulkAddToolModule.php:33 templates/admin/tools/bulk_add.twig:1
|
1931 |
+
msgid "Bulk Add Sources"
|
1932 |
+
msgstr ""
|
1933 |
+
|
1934 |
+
#: src/Modules/CronsToolModule.php:30
|
1935 |
+
msgid "Crons"
|
1936 |
+
msgstr ""
|
1937 |
+
|
1938 |
+
#: src/Modules/FeedBlacklistModule.php:44
|
1939 |
+
#: src/Modules/FeedBlacklistModule.php:47
|
1940 |
+
msgid "Blacklisted Items"
|
1941 |
+
msgstr ""
|
1942 |
+
|
1943 |
+
#: src/Modules/FeedBlacklistModule.php:45
|
1944 |
+
msgid "Blacklisted Item"
|
1945 |
+
msgstr ""
|
1946 |
+
|
1947 |
+
#: src/Modules/FeedBlacklistModule.php:46
|
1948 |
+
#: src/Modules/FeedBlacklistModule.php:48
|
1949 |
+
#: src/Modules/FeedBlacklistModule.php:50
|
1950 |
+
msgid "Blacklist An Item"
|
1951 |
+
msgstr ""
|
1952 |
+
|
1953 |
+
#: src/Modules/FeedBlacklistModule.php:49
|
1954 |
+
msgid "Edit Blacklisted Item"
|
1955 |
+
msgstr ""
|
1956 |
+
|
1957 |
+
#: src/Modules/FeedBlacklistModule.php:51
|
1958 |
+
msgid "View Blacklisted Items"
|
1959 |
+
msgstr ""
|
1960 |
+
|
1961 |
+
#: src/Modules/FeedBlacklistModule.php:52
|
1962 |
+
msgid "Search Blacklisted Items"
|
1963 |
+
msgstr ""
|
1964 |
+
|
1965 |
+
#: src/Modules/FeedBlacklistModule.php:53
|
1966 |
+
msgid "No Blacklisted Items"
|
1967 |
+
msgstr ""
|
1968 |
+
|
1969 |
+
#: src/Modules/FeedBlacklistModule.php:54
|
1970 |
+
msgid "No blacklisted items found in the trash"
|
1971 |
+
msgstr ""
|
1972 |
+
|
1973 |
+
#: src/Modules/FeedItemsModule.php:144 src/Modules/FeedItemsModule.php:146
|
1974 |
+
msgid "Feed Items"
|
1975 |
+
msgstr ""
|
1976 |
+
|
1977 |
+
#: src/Modules/FeedItemsModule.php:145
|
1978 |
+
msgid "Feed Item"
|
1979 |
+
msgstr ""
|
1980 |
+
|
1981 |
+
#: src/Modules/FeedItemsModule.php:147
|
1982 |
+
msgid "View Feed Items"
|
1983 |
+
msgstr ""
|
1984 |
+
|
1985 |
+
#: src/Modules/FeedItemsModule.php:148
|
1986 |
+
msgid "Search Feed Items"
|
1987 |
+
msgstr ""
|
1988 |
+
|
1989 |
+
#: src/Modules/FeedItemsModule.php:149
|
1990 |
+
msgid "No Feed Items Found"
|
1991 |
+
msgstr ""
|
1992 |
+
|
1993 |
+
#: src/Modules/FeedItemsModule.php:150
|
1994 |
+
msgid "No Feed Items Found In Trash"
|
1995 |
+
msgstr ""
|
1996 |
+
|
1997 |
+
#: src/Modules/FeedSourcesModule.php:168 src/Modules/FeedSourcesModule.php:171
|
1998 |
+
msgid "Feed Sources"
|
1999 |
+
msgstr ""
|
2000 |
+
|
2001 |
+
#: src/Modules/FeedSourcesModule.php:169
|
2002 |
+
msgid "Feed Source"
|
2003 |
+
msgstr ""
|
2004 |
+
|
2005 |
+
#: src/Modules/FeedSourcesModule.php:170
|
2006 |
+
#: src/Modules/FeedTemplatesModule.php:132
|
2007 |
+
msgid "Add New"
|
2008 |
+
msgstr ""
|
2009 |
+
|
2010 |
+
#: src/Modules/FeedSourcesModule.php:172
|
2011 |
+
msgid "Add New Feed Source"
|
2012 |
msgstr ""
|
2013 |
|
2014 |
+
#: src/Modules/FeedSourcesModule.php:173
|
2015 |
+
msgid "Edit Feed Source"
|
2016 |
msgstr ""
|
2017 |
|
2018 |
+
#: src/Modules/FeedSourcesModule.php:174
|
2019 |
+
msgid "New Feed Source"
|
2020 |
msgstr ""
|
2021 |
|
2022 |
+
#: src/Modules/FeedSourcesModule.php:175
|
2023 |
+
msgid "View Feed Source"
|
2024 |
msgstr ""
|
2025 |
|
2026 |
+
#: src/Modules/FeedSourcesModule.php:176
|
2027 |
+
#: src/Modules/FeedTemplatesModule.php:138
|
2028 |
+
msgid "Search Feeds"
|
2029 |
msgstr ""
|
2030 |
|
2031 |
+
#: src/Modules/FeedSourcesModule.php:177
|
2032 |
+
msgid "No Feed Sources Found"
|
2033 |
msgstr ""
|
2034 |
|
2035 |
+
#: src/Modules/FeedSourcesModule.php:178
|
2036 |
+
msgid "No Feed Sources Found In Trash"
|
2037 |
msgstr ""
|
2038 |
|
2039 |
+
#: src/Modules/FeedSourcesModule.php:179
|
2040 |
+
msgid "RSS Aggregator"
|
2041 |
msgstr ""
|
2042 |
|
2043 |
+
#: src/Modules/FeedTemplatesModule.php:130
|
2044 |
+
#: src/Modules/FeedTemplatesModule.php:133
|
2045 |
+
#: src/Modules/FeedTemplatesModule.php:141
|
2046 |
+
#: src/Modules/FeedTemplatesModule.php:230
|
2047 |
+
#: src/Modules/FeedTemplatesModule.php:231
|
2048 |
+
msgid "Templates"
|
2049 |
msgstr ""
|
2050 |
|
2051 |
+
#: src/Modules/FeedTemplatesModule.php:134
|
2052 |
+
msgid "Add New Template"
|
2053 |
msgstr ""
|
2054 |
|
2055 |
+
#: src/Modules/FeedTemplatesModule.php:135
|
2056 |
+
msgid "Edit Template"
|
2057 |
msgstr ""
|
2058 |
|
2059 |
+
#: src/Modules/FeedTemplatesModule.php:136
|
2060 |
+
msgid "New Template"
|
2061 |
msgstr ""
|
2062 |
|
2063 |
+
#: src/Modules/FeedTemplatesModule.php:137
|
2064 |
+
msgid "View Template"
|
2065 |
msgstr ""
|
2066 |
|
2067 |
+
#: src/Modules/FeedTemplatesModule.php:139
|
2068 |
+
msgid "No Templates Found"
|
2069 |
+
msgstr ""
|
2070 |
+
|
2071 |
+
#: src/Modules/FeedTemplatesModule.php:140
|
2072 |
+
msgid "No Templates Found In Trash"
|
2073 |
+
msgstr ""
|
2074 |
+
|
2075 |
+
#: src/Modules/FeedTemplatesModule.php:438
|
2076 |
+
#: src/Templates/Feeds/Types/ListTemplateType.php:99
|
2077 |
+
msgid "Source:"
|
2078 |
+
msgstr ""
|
2079 |
+
|
2080 |
+
#: src/Modules/FeedTemplatesModule.php:441
|
2081 |
+
#: src/Templates/Feeds/Types/ListTemplateType.php:111
|
2082 |
+
msgid "By"
|
2083 |
msgstr ""
|
2084 |
|
2085 |
+
#: src/Modules/FeedTemplatesModule.php:443
|
2086 |
+
#: src/Templates/Feeds/Types/ListTemplateType.php:119
|
2087 |
+
msgid "Published on:"
|
2088 |
msgstr ""
|
2089 |
|
2090 |
+
#: src/Modules/FeedTemplatesModule.php:465
|
2091 |
msgid ""
|
2092 |
+
"The maximum number of feed items to display when using the shortcode. This "
|
2093 |
+
"enables pagination if set to a number smaller than the number of items to be "
|
2094 |
+
"displayed."
|
2095 |
msgstr ""
|
2096 |
|
2097 |
+
#: src/Modules/FeedTemplatesModule.php:466
|
2098 |
+
msgid ""
|
2099 |
+
"Set the maximum number of characters to show for feed item titles.<hr/"
|
2100 |
+
"><em>Leave empty for no limit.</em>"
|
2101 |
msgstr ""
|
2102 |
|
2103 |
+
#: src/Modules/FeedTemplatesModule.php:468
|
2104 |
+
msgid "Enable this option to show the pagination beneath feed items."
|
2105 |
msgstr ""
|
2106 |
|
2107 |
+
#: src/Modules/FeedTemplatesModule.php:469
|
2108 |
msgid ""
|
2109 |
+
"The type of pagination to use when showing feed items on multiple pages. The "
|
2110 |
+
"first shows two links, \"Older\" and \"Newer\", which allow you to navigate "
|
2111 |
+
"through the pages. The second shows links for all the pages, together with "
|
2112 |
+
"links for the next and previous pages."
|
2113 |
msgstr ""
|
2114 |
|
2115 |
+
#: src/Modules/FeedTemplatesModule.php:474
|
2116 |
+
msgid ""
|
2117 |
+
"Enter the text that you want to show before the author name. A space is "
|
2118 |
+
"automatically added between this text and the author name."
|
2119 |
msgstr ""
|
2120 |
|
2121 |
+
#: src/Modules/FeedTemplatesModule.php:478
|
2122 |
+
msgid ""
|
2123 |
+
"Enable this option to show the elapsed time from the feed item's date and "
|
2124 |
+
"time to the present time. <em>Eg. 2 hours ago</em>"
|
2125 |
msgstr ""
|
2126 |
|
2127 |
+
#: src/Modules/FeedTemplatesModule.php:480
|
2128 |
+
msgid ""
|
2129 |
+
"Enable this option to set all links displayed as \"NoFollow\".<hr/>\"Nofollow"
|
2130 |
+
"\" provides a way to tell search engines to <em>not</em> follow certain "
|
2131 |
+
"links, such as links to feed items in this case."
|
2132 |
msgstr ""
|
2133 |
|
2134 |
+
#: src/Modules/FeedTemplatesModule.php:481
|
2135 |
+
msgid ""
|
2136 |
+
"Tick this box to have feed items link to their embedded content, if they "
|
2137 |
+
"have any. This works especially well when links are set to <em>\"Open in a "
|
2138 |
+
"lightbox\"</em>."
|
2139 |
msgstr ""
|
2140 |
|
2141 |
+
#: src/Modules/FeedTemplatesModule.php:482
|
2142 |
+
msgid "Enable this option to show bullets next to feed items."
|
2143 |
msgstr ""
|
2144 |
|
2145 |
+
#: src/Modules/FeedTemplatesModule.php:483
|
2146 |
+
msgid "The bullet type to use for feed items."
|
2147 |
msgstr ""
|
2148 |
|
2149 |
+
#: src/Modules/FeedTemplatesModule.php:484
|
2150 |
+
msgid ""
|
2151 |
+
"You can add your own HTML class name to the template output. This lets you "
|
2152 |
+
"customize your template further using custom CSS styling or custom JS "
|
2153 |
+
"functionality."
|
2154 |
msgstr ""
|
2155 |
|
2156 |
+
#: src/Modules/FeedTemplatesModule.php:496
|
2157 |
+
#: src/Templates/Feeds/Types/ListTemplateType.php:29
|
2158 |
+
msgid "List"
|
2159 |
msgstr ""
|
2160 |
|
2161 |
+
#: src/Modules/FeedTemplatesModule.php:523
|
2162 |
+
msgid "Open in same tab/window"
|
2163 |
msgstr ""
|
2164 |
|
2165 |
+
#: src/Modules/FeedTemplatesModule.php:524
|
2166 |
+
msgid "Open in a new tab"
|
2167 |
msgstr ""
|
2168 |
|
2169 |
+
#: src/Modules/FeedTemplatesModule.php:525
|
2170 |
+
msgid "Open in a lightbox"
|
2171 |
msgstr ""
|
2172 |
|
2173 |
+
#: src/Modules/FeedTemplatesModule.php:528
|
2174 |
+
msgid "Older/Newer"
|
2175 |
msgstr ""
|
2176 |
|
2177 |
+
#: src/Modules/FeedTemplatesModule.php:529
|
2178 |
+
msgid "Numbered"
|
2179 |
msgstr ""
|
2180 |
|
2181 |
+
#: src/Modules/FeedTemplatesModule.php:532
|
2182 |
+
msgid "Bullets"
|
2183 |
msgstr ""
|
2184 |
|
2185 |
+
#: src/Modules/FeedTemplatesModule.php:533
|
2186 |
+
msgid "Numbers"
|
|
|
|
|
2187 |
msgstr ""
|
2188 |
|
2189 |
+
#: src/Modules/ImagesModule.php:150
|
2190 |
+
msgid "Image"
|
2191 |
+
msgstr ""
|
2192 |
+
|
2193 |
+
#: src/Modules/ImagesModule.php:191 src/Modules/ImagesModule.php:288
|
2194 |
+
msgid "Images"
|
2195 |
+
msgstr ""
|
2196 |
+
|
2197 |
+
#: src/Modules/ImagesModule.php:270
|
2198 |
msgid ""
|
2199 |
+
"This option allows you to select which feed item image to use as the "
|
2200 |
+
"featured image. Automatic best image detection will attempt to find the "
|
2201 |
+
"largest image with the best aspect ratio.\n"
|
2202 |
+
"\n"
|
2203 |
+
" WordPress requires that featured images exist in the "
|
2204 |
+
"media library, so WP RSS Aggregator will always download and save featured "
|
2205 |
+
"images."
|
2206 |
msgstr ""
|
2207 |
|
2208 |
+
#: src/Modules/ImportExportToolsModule.php:30
|
2209 |
+
msgid "Export"
|
2210 |
msgstr ""
|
2211 |
|
2212 |
+
#: src/Modules/ImportExportToolsModule.php:43
|
2213 |
+
msgid "Import"
|
2214 |
msgstr ""
|
2215 |
|
2216 |
+
#: src/Modules/ImportExportToolsModule.php:105
|
2217 |
+
msgid "No file was uploaded. Please select a file."
|
2218 |
msgstr ""
|
2219 |
|
2220 |
+
#: src/Modules/ImportExportToolsModule.php:109
|
2221 |
+
msgid "Upload file is too large."
|
|
|
|
|
2222 |
msgstr ""
|
2223 |
|
2224 |
+
#: src/Modules/ImportExportToolsModule.php:112
|
2225 |
+
msgid "The file was not fully uploaded."
|
|
|
|
|
2226 |
msgstr ""
|
2227 |
|
2228 |
+
#: src/Modules/ImportExportToolsModule.php:115
|
2229 |
+
msgid "The file upload failed. Please try again."
|
2230 |
msgstr ""
|
2231 |
|
2232 |
+
#: src/Modules/ImportExportToolsModule.php:119
|
2233 |
+
msgid "Upload error"
|
2234 |
msgstr ""
|
2235 |
|
2236 |
+
#: src/Modules/LogsToolModule.php:33
|
2237 |
+
msgid "Logs"
|
|
|
2238 |
msgstr ""
|
2239 |
|
2240 |
+
#: src/Modules/ResetToolModule.php:30
|
2241 |
+
msgid "Reset"
|
2242 |
msgstr ""
|
2243 |
|
2244 |
+
#: src/Modules/ResetToolModule.php:90
|
2245 |
+
msgid "The items are being deleted in the background."
|
2246 |
msgstr ""
|
2247 |
|
2248 |
+
#: src/Modules/SysInfoToolModule.php:30 templates/admin/tools/sys_info.twig:2
|
2249 |
+
msgid "System Info"
|
2250 |
msgstr ""
|
2251 |
|
2252 |
+
#: src/Modules/ToolsModule.php:41 src/Modules/ToolsModule.php:52
|
2253 |
+
#: templates/admin/tools/main.twig:2
|
2254 |
+
msgid "Tools"
|
|
|
|
|
|
|
|
|
|
|
|
|
2255 |
msgstr ""
|
2256 |
|
2257 |
+
#: src/Modules/UpsellModule.php:65
|
2258 |
+
msgid ""
|
2259 |
+
"An advanced importer that lets you import RSS feed items as WordPress posts "
|
2260 |
+
"or any other custom post type. You can use it to populate a website in "
|
2261 |
+
"minutes (auto-blog). This is the most popular and feature-filled extension."
|
2262 |
msgstr ""
|
2263 |
|
2264 |
+
#: src/Modules/UpsellModule.php:77
|
2265 |
+
msgid ""
|
2266 |
+
"An extension for Feed to Post that adds connectivity to our premium full "
|
2267 |
+
"text service, which allows you to import the full post content for an "
|
2268 |
+
"unlimited number of feed items per feed source, even when the feed itself "
|
2269 |
+
"doesn't provide it"
|
2270 |
msgstr ""
|
2271 |
|
2272 |
+
#: src/Modules/UpsellModule.php:89
|
2273 |
msgid ""
|
2274 |
+
"Premium templates to display images and excerpts in various ways. It "
|
2275 |
+
"includes a fully customisable grid template and a list template that "
|
2276 |
+
"includes excerpts & thumbnails, both of which will spruce up your site!"
|
2277 |
msgstr ""
|
2278 |
|
2279 |
+
#: src/Modules/UpsellModule.php:101
|
2280 |
+
msgid ""
|
2281 |
+
"Filters the feed items to be imported based on your own keywords, key "
|
2282 |
+
"phrases, or tags; you only get the items you're interested in. It is "
|
2283 |
+
"compatible with all other add-ons."
|
2284 |
msgstr ""
|
2285 |
|
2286 |
+
#: src/Modules/UpsellModule.php:113
|
2287 |
msgid ""
|
2288 |
+
"Categorises your feed sources and allows you to display feed items from a "
|
2289 |
+
"particular category within your site using the shortcode parameters."
|
|
|
2290 |
msgstr ""
|
2291 |
|
2292 |
+
#: src/Modules/UpsellModule.php:125
|
2293 |
+
msgid ""
|
2294 |
+
"An extension for Feed to Post that allows you to integrate the WordAi "
|
2295 |
+
"article spinner so that the imported content is both completely unique and "
|
2296 |
+
"completely readable."
|
2297 |
msgstr ""
|
2298 |
|
2299 |
+
#: src/Modules/UpsellModule.php:137
|
2300 |
msgid ""
|
2301 |
+
"An extension for Feed to Post that allows you to integrate the SpinnerChief "
|
2302 |
+
"article spinner so that the imported content is both completely unique and "
|
2303 |
+
"completely readable."
|
2304 |
+
msgstr ""
|
2305 |
+
|
2306 |
+
#: src/Modules/UpsellModule.php:184
|
2307 |
+
msgid "More Features"
|
2308 |
+
msgstr ""
|
2309 |
+
|
2310 |
+
#: src/RestApi/Auth/AuthUserIsAdmin.php:24
|
2311 |
+
msgid "Not a user or not logged in"
|
2312 |
+
msgstr ""
|
2313 |
+
|
2314 |
+
#: src/RestApi/Auth/AuthUserIsAdmin.php:33
|
2315 |
+
msgid "User is not an administrator"
|
2316 |
+
msgstr ""
|
2317 |
+
|
2318 |
+
#: src/RestApi/Auth/AuthVerifyNonce.php:55
|
2319 |
+
msgid "Invalid request"
|
2320 |
+
msgstr ""
|
2321 |
+
|
2322 |
+
#: src/RestApi/Auth/AuthVerifyNonce.php:64
|
2323 |
+
msgid "Request nonce is invalid or has expired"
|
2324 |
+
msgstr ""
|
2325 |
+
|
2326 |
+
#: src/RestApi/EndPointManager.php:92
|
2327 |
+
msgid "Unauthorized"
|
2328 |
msgstr ""
|
2329 |
|
2330 |
+
#: src/RestApi/EndPoints/FeedTemplates/CreateUpdateTemplateEndPoint.php:63
|
2331 |
+
msgid "Missing template ID or slug name"
|
2332 |
msgstr ""
|
2333 |
|
2334 |
+
#: src/RestApi/EndPoints/FeedTemplates/DeleteTemplateEndPoint.php:60
|
2335 |
+
msgid "Missing template ID or set of IDs in the request"
|
2336 |
msgstr ""
|
2337 |
|
2338 |
+
#: src/RestApi/EndPoints/FeedTemplates/DeleteTemplateEndPoint.php:79
|
2339 |
+
#: src/RestApi/EndPoints/FeedTemplates/PatchTemplateEndPoint.php:55
|
2340 |
#, php-format
|
2341 |
+
msgid "Template \"%s\" does not exist"
|
2342 |
+
msgstr ""
|
2343 |
+
|
2344 |
+
#: src/Templates/Feeds/MasterFeedsTemplate.php:259
|
2345 |
+
#: src/Templates/Feeds/TemplateTypeTemplate.php:179
|
2346 |
+
msgid "The \"items\" must be a collection instance"
|
2347 |
+
msgstr ""
|
2348 |
+
|
2349 |
+
#: src/Templates/Feeds/MasterFeedsTemplate.php:287
|
2350 |
msgid ""
|
2351 |
+
"Template \"{0}\" does not exist or could not be loaded. The \"{1}\" template "
|
2352 |
+
"was used is instead."
|
2353 |
msgstr ""
|
2354 |
|
2355 |
+
#: src/Templates/Feeds/Types/AbstractFeedTemplateType.php:85
|
2356 |
+
msgid "Items is not a collection instance"
|
|
|
2357 |
msgstr ""
|
2358 |
|
2359 |
+
#: src/Templates/TwigTemplate.php:70
|
2360 |
+
msgid "Could not load template"
|
2361 |
+
msgstr ""
|
2362 |
+
|
2363 |
+
#: src/Templates/TwigTemplate.php:75
|
2364 |
#, php-format
|
2365 |
+
msgid "Syntax error in template at line %d: %s"
|
|
|
|
|
2366 |
msgstr ""
|
2367 |
|
2368 |
+
#: src/Templates/TwigTemplate.php:83
|
2369 |
+
msgid "Could not render twig template: "
|
2370 |
+
msgstr ""
|
2371 |
+
|
2372 |
+
#: src/Ui/BlacklistTable.php:52
|
2373 |
+
msgid "There are no blacklisted items"
|
2374 |
+
msgstr ""
|
2375 |
+
|
2376 |
+
#: src/Ui/BlacklistTable.php:130
|
2377 |
+
msgid "Edit"
|
2378 |
msgstr ""
|
2379 |
|
2380 |
+
#: src/Ui/BlacklistTable.php:134 src/Ui/BlacklistTable.php:171
|
2381 |
+
msgid "Delete"
|
2382 |
+
msgstr ""
|
2383 |
+
|
2384 |
+
#: wp-rss-aggregator.php:470
|
2385 |
+
msgid "Attempted to load an invalid WP RSS Aggregator module"
|
2386 |
+
msgstr ""
|
2387 |
+
|
2388 |
+
#: wp-rss-aggregator.php:491
|
2389 |
msgid ""
|
2390 |
+
"<b>WP RSS Aggregator</b> has encountered an error. If this problem persists, "
|
2391 |
+
"kindly contact customer support and provide the following details:"
|
2392 |
+
msgstr ""
|
2393 |
+
|
2394 |
+
#: wp-rss-aggregator.php:524
|
2395 |
+
msgid "Deactivate WP RSS Aggregator and its addons"
|
2396 |
+
msgstr ""
|
2397 |
+
|
2398 |
+
#: wp-rss-aggregator.php:525
|
2399 |
+
msgid "Deactivate WP RSS Aggregator"
|
2400 |
msgstr ""
|
2401 |
|
2402 |
+
#: wp-rss-aggregator.php:533
|
2403 |
msgid ""
|
2404 |
+
"<b>WP RSS Aggregator</b> has encountered a critical error. The safest course "
|
2405 |
+
"of action is to deactivate the plugin and any of its add-ons on this site "
|
2406 |
+
"using the button below. Once you’ve done that, you may reactivate them and "
|
2407 |
+
"start using the plugins again. If the problem persists, please copy the "
|
2408 |
+
"below error and send it to our support team with an explanation of when and "
|
2409 |
+
"how it happened."
|
2410 |
msgstr ""
|
2411 |
|
2412 |
+
#: wp-rss-aggregator.php:542
|
2413 |
+
msgid "WP RSS Aggregator Error"
|
2414 |
msgstr ""
|
2415 |
|
2416 |
+
#: wp-rss-aggregator.php:566
|
2417 |
+
msgid "Click to show error details"
|
2418 |
msgstr ""
|
2419 |
|
2420 |
+
#: wp-rss-aggregator.php:569
|
2421 |
+
msgid "Error Message:"
|
2422 |
msgstr ""
|
2423 |
|
2424 |
+
#: wp-rss-aggregator.php:573
|
2425 |
+
msgid "Occurred at:"
|
2426 |
msgstr ""
|
2427 |
|
2428 |
+
#: wp-rss-aggregator.php:577
|
2429 |
+
msgid "Stack trace:"
|
2430 |
msgstr ""
|
2431 |
|
2432 |
+
#: wp-rss-aggregator.php:696 wp-rss-aggregator.php:790
|
|
|
2433 |
msgid ""
|
2434 |
+
"As of version 4.13, WP RSS Aggregator will stop supporting PHP 5.3 and will "
|
2435 |
+
"require PHP 5.4 or later. Kindly contact your site's hosting provider for "
|
2436 |
+
"PHP version update options."
|
2437 |
msgstr ""
|
2438 |
|
2439 |
+
#: wp-rss-aggregator.php:718
|
2440 |
#, php-format
|
2441 |
+
msgid ""
|
2442 |
+
"<p><strong>%2$s requires WordPress to be of version %1$s or higher.</"
|
2443 |
+
"strong></br>Older versions of WordPress are no longer supported by %2$s. "
|
2444 |
+
"Please upgrade your WordPress core to continue benefiting from %2$s support "
|
2445 |
+
"services.</p>"
|
2446 |
msgstr ""
|
2447 |
|
2448 |
+
#: wp-rss-aggregator.php:740
|
2449 |
+
msgid "WP RSS Aggregator cannot be activated."
|
|
|
2450 |
msgstr ""
|
2451 |
|
2452 |
+
#: wp-rss-aggregator.php:741
|
2453 |
+
msgid "WP RSS Aggregator has been deactivated."
|
2454 |
msgstr ""
|
2455 |
|
2456 |
+
#: wp-rss-aggregator.php:746
|
2457 |
+
msgctxt ""
|
2458 |
+
"Used like \"Kindly contact your hosting provider or contact support for more "
|
2459 |
+
"information.\""
|
2460 |
+
msgid "contact support"
|
2461 |
msgstr ""
|
2462 |
|
2463 |
+
#: wp-rss-aggregator.php:753
|
2464 |
+
#, php-format
|
2465 |
+
msgid ""
|
2466 |
+
"The plugin requires version %s or later and your site's PHP version is %s."
|
2467 |
msgstr ""
|
2468 |
|
2469 |
+
#: wp-rss-aggregator.php:759
|
2470 |
+
#, php-format
|
2471 |
+
msgctxt "the \"%s\" part is a link with text = \"contact support\""
|
2472 |
+
msgid ""
|
2473 |
+
"Kindly contact your hosting provider to upgrade your PHP version or %s for "
|
2474 |
+
"more information."
|
2475 |
msgstr ""
|
2476 |
|
2477 |
+
#: wp-rss-aggregator.php:768
|
2478 |
+
msgid "WP RSS Aggregator - PHP version error"
|
2479 |
msgstr ""
|
2480 |
|
2481 |
+
#: wp-rss-aggregator.php:808
|
2482 |
+
#, php-format
|
2483 |
+
msgid "%2$s requires WordPress version %1$s or higher."
|
2484 |
msgstr ""
|
2485 |
|
2486 |
+
#: wp-rss-aggregator.php:1017
|
2487 |
+
msgid ""
|
2488 |
+
"The Excerpts & Thumbnails addon has been discontinued in favor of the "
|
2489 |
+
"Templates addon."
|
2490 |
msgstr ""
|
2491 |
|
2492 |
+
#: wp-rss-aggregator.php:1018
|
2493 |
+
msgid "Click here to learn more."
|
2494 |
msgstr ""
|
2495 |
|
2496 |
+
#: templates/admin/blacklist-metabox.twig:3
|
2497 |
+
msgid "The URL to blacklist"
|
2498 |
msgstr ""
|
2499 |
|
2500 |
+
#: templates/admin/feeds/images-meta-box.twig:9
|
2501 |
+
msgid "Featured Image"
|
2502 |
msgstr ""
|
2503 |
|
2504 |
+
#: templates/admin/feeds/images-meta-box.twig:15
|
2505 |
+
msgid "No featured image"
|
2506 |
msgstr ""
|
2507 |
|
2508 |
+
#: templates/admin/feeds/images-meta-box.twig:18
|
2509 |
+
msgid "Auto detect best image"
|
2510 |
msgstr ""
|
2511 |
|
2512 |
+
#: templates/admin/feeds/images-meta-box.twig:21
|
2513 |
+
msgid "Media thumbnail image"
|
2514 |
msgstr ""
|
2515 |
|
2516 |
+
#: templates/admin/feeds/images-meta-box.twig:24
|
2517 |
+
msgid "Enclosure image"
|
2518 |
msgstr ""
|
2519 |
|
2520 |
+
#: templates/admin/feeds/images-meta-box.twig:27
|
2521 |
+
msgid "iTunes image"
|
2522 |
msgstr ""
|
2523 |
|
2524 |
+
#: templates/admin/feeds/images-meta-box.twig:30
|
2525 |
+
msgid "First image in content/excerpt"
|
2526 |
msgstr ""
|
2527 |
|
2528 |
+
#: templates/admin/feeds/images-meta-box.twig:33
|
2529 |
+
msgid "Always use default image"
|
2530 |
msgstr ""
|
2531 |
|
2532 |
+
#: templates/admin/feeds/images-meta-box.twig:48
|
2533 |
+
msgid "Items must have a featured image"
|
2534 |
msgstr ""
|
2535 |
|
2536 |
+
#: templates/admin/feeds/images-meta-box.twig:64
|
2537 |
+
msgid "Remove the featured image from the content"
|
2538 |
msgstr ""
|
2539 |
|
2540 |
+
#: templates/admin/feeds/images-meta-box.twig:76
|
2541 |
+
msgid "Default Featured Image"
|
2542 |
msgstr ""
|
2543 |
|
2544 |
+
#: templates/admin/feeds/images-meta-box.twig:84
|
2545 |
+
msgid "Click the image to edit or update"
|
2546 |
msgstr ""
|
2547 |
|
2548 |
+
#: templates/admin/feeds/images-meta-box.twig:88
|
2549 |
+
msgid "Set default featured image"
|
2550 |
msgstr ""
|
2551 |
|
2552 |
+
#: templates/admin/feeds/images-meta-box.twig:91
|
2553 |
+
msgid "Remove default featured image"
|
2554 |
msgstr ""
|
2555 |
|
2556 |
+
#: templates/admin/feeds/images-meta-box.twig:103
|
2557 |
+
msgid "Download other images"
|
|
|
2558 |
msgstr ""
|
2559 |
|
2560 |
+
#: templates/admin/feeds/images-meta-box.twig:115
|
2561 |
+
msgid "Tick this box to save feed item images to your WordPress Gallery."
|
2562 |
msgstr ""
|
2563 |
|
2564 |
+
#: templates/admin/feeds/images-meta-box.twig:126
|
2565 |
+
msgid "Minimum Image Size"
|
2566 |
msgstr ""
|
2567 |
|
2568 |
+
#: templates/admin/feeds/images-meta-box.twig:131
|
2569 |
+
msgid "Width:"
|
2570 |
msgstr ""
|
2571 |
|
2572 |
+
#: templates/admin/feeds/images-meta-box.twig:141
|
2573 |
+
msgid "Height:"
|
|
|
|
|
2574 |
msgstr ""
|
2575 |
|
2576 |
+
#: templates/admin/feeds/images-meta-box.twig:150
|
2577 |
+
msgid ""
|
2578 |
+
"Images that are smaller than the given size will not be downloaded. Leave "
|
2579 |
+
"empty to download all images without restriction. This also applies to "
|
2580 |
+
"featured images."
|
2581 |
msgstr ""
|
2582 |
|
2583 |
+
#: templates/admin/feeds/save-meta-box.twig:4
|
2584 |
+
msgid "Slug:"
|
|
|
2585 |
msgstr ""
|
2586 |
|
2587 |
+
#: templates/admin/feeds/save-meta-box.twig:9
|
2588 |
+
msgid "Auto Generate"
|
2589 |
msgstr ""
|
2590 |
|
2591 |
+
#: templates/admin/feeds/shortcode.twig:4
|
2592 |
+
msgid "Shortcode:"
|
2593 |
msgstr ""
|
2594 |
|
2595 |
+
#: templates/admin/items/images-meta-box.twig:1
|
2596 |
+
msgid "Found images:"
|
2597 |
msgstr ""
|
2598 |
|
2599 |
+
#: templates/admin/tools/blacklist.twig:7
|
2600 |
+
msgid "Blacklist a URL"
|
|
|
2601 |
msgstr ""
|
2602 |
|
2603 |
+
#: templates/admin/tools/blacklist.twig:11
|
|
|
2604 |
msgid ""
|
2605 |
+
"The blacklist is a list of feed item URLs. Any items with a URL from this "
|
2606 |
+
"list will be not be imported."
|
2607 |
msgstr ""
|
2608 |
|
2609 |
+
#: templates/admin/tools/blacklist.twig:18
|
2610 |
+
msgid "Add to Blacklist"
|
2611 |
msgstr ""
|
2612 |
|
2613 |
+
#: templates/admin/tools/blacklist.twig:21
|
2614 |
+
msgid "Give it a name"
|
2615 |
msgstr ""
|
2616 |
|
2617 |
+
#: templates/admin/tools/blacklist.twig:27
|
2618 |
+
msgid "URL to blacklist"
|
|
|
|
|
|
|
2619 |
msgstr ""
|
2620 |
|
2621 |
+
#: templates/admin/tools/blacklist.twig:32
|
2622 |
+
msgid "Add to blacklist"
|
|
|
|
|
|
|
|
|
2623 |
msgstr ""
|
2624 |
|
2625 |
+
#: templates/admin/tools/bulk_add.twig:2
|
2626 |
+
msgid ""
|
2627 |
+
"Create multiple feed sources at once, by entering the name and URLs of your "
|
2628 |
+
"feeds below."
|
2629 |
msgstr ""
|
2630 |
|
2631 |
+
#: templates/admin/tools/bulk_add.twig:3
|
2632 |
+
msgid "The feed sources will be created using your global settings."
|
2633 |
msgstr ""
|
2634 |
|
2635 |
+
#: templates/admin/tools/bulk_add.twig:5
|
|
|
2636 |
msgid ""
|
2637 |
+
"Put each feed on its own line, and separate the name and the URL using a "
|
2638 |
+
"comma. For example:"
|
2639 |
msgstr ""
|
2640 |
|
2641 |
+
#: templates/admin/tools/bulk_add.twig:6
|
2642 |
+
msgid "Feed Name, http://www.myfeed.com"
|
|
|
|
|
|
|
2643 |
msgstr ""
|
2644 |
|
2645 |
+
#: templates/admin/tools/bulk_add.twig:14
|
2646 |
+
msgid "Add Feeds"
|
2647 |
msgstr ""
|
2648 |
|
2649 |
+
#: templates/admin/tools/crons.twig:20
|
2650 |
+
msgid "{number} feeds"
|
2651 |
msgstr ""
|
2652 |
|
2653 |
+
#: templates/admin/tools/crons.twig:28
|
2654 |
+
msgid "{page} of {pages}"
|
2655 |
msgstr ""
|
2656 |
|
2657 |
+
#: templates/admin/tools/crons.twig:36
|
2658 |
+
msgid "Loading"
|
2659 |
msgstr ""
|
2660 |
|
2661 |
+
#: templates/admin/tools/crons.twig:41
|
2662 |
+
msgid "Global Interval:"
|
2663 |
msgstr ""
|
2664 |
|
2665 |
+
#: templates/admin/tools/crons.twig:45
|
2666 |
+
msgid "Global Time:"
|
2667 |
msgstr ""
|
2668 |
|
2669 |
+
#: templates/admin/tools/crons.twig:51
|
2670 |
+
msgid "Download Timeline Image"
|
2671 |
msgstr ""
|
2672 |
|
2673 |
+
#: templates/admin/tools/crons.twig:62
|
2674 |
+
msgid "Feed"
|
2675 |
msgstr ""
|
2676 |
|
2677 |
+
#: templates/admin/tools/crons.twig:63
|
2678 |
+
msgid "Interval"
|
2679 |
msgstr ""
|
2680 |
|
2681 |
+
#: templates/admin/tools/crons.twig:64
|
2682 |
+
msgid "Time"
|
2683 |
msgstr ""
|
2684 |
|
2685 |
+
#: templates/admin/tools/export.twig:1 templates/admin/tools/export.twig:13
|
2686 |
+
msgid "Export Settings"
|
2687 |
msgstr ""
|
2688 |
|
2689 |
+
#: templates/admin/tools/export.twig:3
|
2690 |
msgid ""
|
2691 |
+
"Create a file that contains all of your settings for WP RSS Aggregator and "
|
2692 |
+
"its add-ons."
|
2693 |
msgstr ""
|
2694 |
|
2695 |
+
#: templates/admin/tools/import.twig:2
|
2696 |
+
msgid ""
|
2697 |
+
"Upload an exported settings file to import your settings for WP RSS "
|
2698 |
+
"Aggregator and its add-ons"
|
2699 |
msgstr ""
|
2700 |
|
2701 |
+
#: templates/admin/tools/logs.twig:2
|
2702 |
+
msgid "Debug Log"
|
2703 |
msgstr ""
|
2704 |
|
2705 |
+
#: templates/admin/tools/logs.twig:13 templates/admin/tools/sys_info.twig:11
|
2706 |
+
msgid "Download"
|
2707 |
msgstr ""
|
2708 |
|
2709 |
+
#: templates/admin/tools/logs.twig:23
|
2710 |
+
msgid "Logging is disabled"
|
2711 |
msgstr ""
|
2712 |
|
2713 |
+
#: templates/admin/tools/logs.twig:30
|
2714 |
+
msgid "The log is empty"
|
|
|
|
|
2715 |
msgstr ""
|
2716 |
|
2717 |
+
#: templates/admin/tools/logs.twig:36
|
2718 |
+
msgid "Showing the most recent %d log messages."
|
2719 |
msgstr ""
|
2720 |
|
2721 |
+
#: templates/admin/tools/logs.twig:41
|
2722 |
+
msgid "Filters:"
|
2723 |
msgstr ""
|
2724 |
|
2725 |
+
#: templates/admin/tools/logs.twig:44
|
2726 |
+
msgid "All"
|
2727 |
msgstr ""
|
2728 |
|
2729 |
+
#: templates/admin/tools/logs.twig:47
|
2730 |
+
msgid "Errors"
|
2731 |
msgstr ""
|
2732 |
|
2733 |
+
#: templates/admin/tools/logs.twig:50
|
2734 |
+
msgid "Info"
|
2735 |
msgstr ""
|
2736 |
|
2737 |
+
#: templates/admin/tools/logs.twig:53
|
2738 |
+
msgid "Notice"
|
2739 |
msgstr ""
|
2740 |
|
2741 |
+
#: templates/admin/tools/logs.twig:56
|
2742 |
+
msgid "Warnings"
|
2743 |
msgstr ""
|
2744 |
|
2745 |
+
#: templates/admin/tools/logs.twig:59
|
2746 |
+
msgid "Debug"
|
2747 |
msgstr ""
|
2748 |
|
2749 |
+
#: templates/admin/tools/logs.twig:66
|
2750 |
+
msgid "Clear log"
|
2751 |
msgstr ""
|
2752 |
|
2753 |
+
#: templates/admin/tools/logs.twig:93
|
2754 |
+
msgid "Log Options"
|
2755 |
msgstr ""
|
2756 |
|
2757 |
+
#: templates/admin/tools/logs.twig:95
|
2758 |
+
msgid "Enable logging"
|
2759 |
msgstr ""
|
2760 |
|
2761 |
+
#: templates/admin/tools/logs.twig:102
|
2762 |
+
msgid "Auto delete logs older than"
|
2763 |
msgstr ""
|
2764 |
|
2765 |
+
#: templates/admin/tools/logs.twig:106
|
2766 |
+
msgid "days"
|
2767 |
msgstr ""
|
2768 |
|
2769 |
+
#: templates/admin/tools/logs.twig:107
|
2770 |
+
msgid "(Once per day, logs older than the set amount of days are deleted)"
|
2771 |
msgstr ""
|
2772 |
|
2773 |
+
#: templates/admin/tools/logs.twig:113
|
2774 |
+
msgid "Save Log Options"
|
2775 |
msgstr ""
|
2776 |
|
2777 |
+
#: templates/admin/tools/reset.twig:1 templates/admin/tools/reset.twig:14
|
2778 |
+
msgid "Delete all imported items"
|
2779 |
msgstr ""
|
2780 |
|
2781 |
+
#: templates/admin/tools/reset.twig:2
|
2782 |
+
msgid "Click the button below to delete all imported items and posts."
|
2783 |
msgstr ""
|
2784 |
|
2785 |
+
#: templates/admin/tools/reset.twig:4
|
2786 |
+
msgid ""
|
2787 |
+
"Kindly note that old items may no longer be present in their respective RSS "
|
2788 |
+
"feeds, meaning that you may be unable to re-import them later."
|
2789 |
msgstr ""
|
2790 |
|
2791 |
+
#: templates/admin/tools/reset.twig:18
|
2792 |
+
msgid "Restore Default Settings"
|
2793 |
msgstr ""
|
2794 |
|
2795 |
+
#: templates/admin/tools/reset.twig:20
|
2796 |
+
msgid "Click the red button to reset the plugin settings to default."
|
2797 |
+
msgstr ""
|
2798 |
+
|
2799 |
+
#: templates/admin/tools/reset.twig:21
|
2800 |
msgid ""
|
2801 |
+
"It is recommended to export your settings before resetting them, in case you "
|
2802 |
+
"need to rollback."
|
2803 |
msgstr ""
|
2804 |
|
2805 |
+
#: templates/admin/tools/reset.twig:30
|
2806 |
+
msgid "Reset Settings to Default"
|
2807 |
msgstr ""
|
2808 |
|
2809 |
+
#: templates/admin/tools/sys_info.twig:17
|
2810 |
+
msgid ""
|
2811 |
+
"To copy the system info, double click it and then press Ctrl + C (PC) or Cmd "
|
2812 |
+
"+ C (Mac)."
|
2813 |
msgstr ""
|
2814 |
|
2815 |
+
#: templates/admin/update-page.twig:10
|
2816 |
+
msgid "Skip the update details and get back to the plugin."
|
2817 |
msgstr ""
|
2818 |
|
2819 |
+
#: templates/admin/update-page.twig:25
|
2820 |
+
msgid "Introducing Lorem: A New WP RSS Aggregator Partner"
|
2821 |
msgstr ""
|
2822 |
|
2823 |
+
#: templates/admin/update-page.twig:28
|
2824 |
+
msgid ""
|
2825 |
+
"Over the years we have partnered up with a few trusted companies to offer "
|
2826 |
+
"customisations that go beyond\n"
|
2827 |
+
" our premium support services. Being a small "
|
2828 |
+
"team, we don’t always have the time to offer the level\n"
|
2829 |
+
" of customisation that some of you may need or "
|
2830 |
+
"want. That’s why partnering up with others who excel\n"
|
2831 |
+
" in this area was the logical next step."
|
2832 |
msgstr ""
|
2833 |
|
2834 |
+
#: templates/admin/update-page.twig:36
|
2835 |
+
msgid ""
|
2836 |
+
"Lorem is a platform through which you can hire expert designers, developers, "
|
2837 |
+
"marketers and more at\n"
|
2838 |
+
" affordable rates. They have a dedicated team "
|
2839 |
+
"that guides you from the moment you start a\n"
|
2840 |
+
" conversation to the moment that a project is "
|
2841 |
+
"delivered."
|
2842 |
msgstr ""
|
2843 |
|
2844 |
+
#: templates/admin/update-page.twig:43
|
2845 |
msgid ""
|
2846 |
+
"We chose to work with Lorem in order to provide customisation works as well "
|
2847 |
+
"as support in terms of\n"
|
2848 |
+
" setting up WP RSS Aggregator to meet your exact "
|
2849 |
+
"needs."
|
2850 |
msgstr ""
|
2851 |
|
2852 |
+
#: templates/admin/update-page.twig:49
|
2853 |
+
msgid "Learn more"
|
2854 |
msgstr ""
|
2855 |
|
2856 |
+
#: templates/admin/update-page.twig:58
|
2857 |
+
msgid "Full Changelog"
|
2858 |
msgstr ""
|
2859 |
|
2860 |
+
#: templates/admin/upsell/add-on-list.twig:1
|
2861 |
+
msgid "Add functionality with our premium extensions:"
|
2862 |
msgstr ""
|
2863 |
|
2864 |
+
#: templates/admin/upsell/more-features-page/add-on.twig:18
|
2865 |
+
msgid "Installed!"
|
2866 |
msgstr ""
|
2867 |
|
2868 |
+
#: templates/admin/upsell/more-features-page/add-on.twig:27
|
2869 |
+
msgid "Purchase & Install"
|
2870 |
+
msgstr ""
|
2871 |
+
|
2872 |
+
#: templates/admin/upsell/more-features-page/main.twig:2
|
2873 |
+
msgid "More Features With Our Premium Add-Ons"
|
2874 |
+
msgstr ""
|
2875 |
+
|
2876 |
+
#: templates/admin/upsell/more-features-page/main.twig:5
|
2877 |
+
msgid ""
|
2878 |
+
"The following addons are available to increase the functionality of the WP "
|
2879 |
+
"RSS Aggregator plugin."
|
2880 |
+
msgstr ""
|
2881 |
+
|
2882 |
+
#: templates/admin/upsell/more-features-page/main.twig:10
|
2883 |
+
msgid "Check out our pricing plans for bigger savings!"
|
2884 |
+
msgstr ""
|
2885 |
+
|
2886 |
+
#: templates/feeds/list/numbered-pagination.twig:13
|
2887 |
+
msgid "Previous"
|
2888 |
+
msgstr ""
|
2889 |
+
|
2890 |
+
#: templates/feeds/list/numbered-pagination.twig:39
|
2891 |
+
msgid "Next"
|
2892 |
msgstr ""
|
2893 |
|
2894 |
+
#. Plugin Name of the plugin/theme
|
2895 |
+
msgid "WP RSS Aggregator"
|
2896 |
msgstr ""
|
2897 |
|
2898 |
+
#. Plugin URI of the plugin/theme
|
2899 |
msgid ""
|
2900 |
+
"https://www.wprssaggregator.com/"
|
2901 |
+
"#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin"
|
|
|
2902 |
msgstr ""
|
2903 |
|
2904 |
+
#. Description of the plugin/theme
|
2905 |
+
msgid "Imports and aggregates multiple RSS Feeds."
|
2906 |
msgstr ""
|
2907 |
|
2908 |
+
#. Author of the plugin/theme
|
2909 |
+
msgid "RebelCode"
|
2910 |
msgstr ""
|
2911 |
|
2912 |
+
#. Author URI of the plugin/theme
|
2913 |
+
msgid "https://www.wprssaggregator.com"
|
2914 |
msgstr ""
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: RSS import, RSS aggregator, feed import, content curation, feed to post
|
|
5 |
Requires at least: 4.0 or higher
|
6 |
Tested up to: 5.3
|
7 |
Requires PHP: 5.4
|
8 |
-
Stable tag: 4.17.
|
9 |
License: GPLv3
|
10 |
|
11 |
WP RSS Aggregator is the original & most popular WordPress solution for importing RSS feeds, auto-blogging, content curation & aggregation.
|
@@ -259,6 +259,20 @@ Our complete Knowledge Base with FAQs can be found [here](https://kb.wprssaggreg
|
|
259 |
|
260 |
== Changelog ==
|
261 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
262 |
= 4.17.2 (2019-12-19) =
|
263 |
**Added**
|
264 |
- The error handler now includes the file and line where the error occurred.
|
5 |
Requires at least: 4.0 or higher
|
6 |
Tested up to: 5.3
|
7 |
Requires PHP: 5.4
|
8 |
+
Stable tag: 4.17.3
|
9 |
License: GPLv3
|
10 |
|
11 |
WP RSS Aggregator is the original & most popular WordPress solution for importing RSS feeds, auto-blogging, content curation & aggregation.
|
259 |
|
260 |
== Changelog ==
|
261 |
|
262 |
+
= 4.17.3 (2020-01-23) =
|
263 |
+
**Changed**
|
264 |
+
- Updated code to fix deprecation warnings on PHP version 7.4 and later.
|
265 |
+
- Updated the Twig library to version `1.41.0` to fix deprecation warnings on PHP version 7.4 and later.
|
266 |
+
- Updated the default translation files to contain up-to-date text.
|
267 |
+
|
268 |
+
**Fixed**
|
269 |
+
- Removed a false-positive error from the log.
|
270 |
+
- Localization in Twig templates did not work.
|
271 |
+
- When revisions are enabled, an error would prevent feed sources from being saved.
|
272 |
+
- Translations were being loaded from an invalid path.
|
273 |
+
- The default featured image in the New/Edit Feed Source page did not preview after saving the feed source.
|
274 |
+
- Missing space between the link `a` tag and the `href` attribute on PHP 7.4
|
275 |
+
|
276 |
= 4.17.2 (2019-12-19) =
|
277 |
**Added**
|
278 |
- The error handler now includes the file and line where the error occurred.
|
src/Handlers/FeedSources/FeedSourceSaveMetaHandler.php
CHANGED
@@ -65,6 +65,11 @@ class FeedSourceSaveMetaHandler
|
|
65 |
// Get the post type object.
|
66 |
$post_type = get_post_type_object($post->post_type);
|
67 |
|
|
|
|
|
|
|
|
|
|
|
68 |
// Check if the current user has permission to edit the post.
|
69 |
if (!current_user_can($post_type->cap->edit_post, $postId)) {
|
70 |
return;
|
65 |
// Get the post type object.
|
66 |
$post_type = get_post_type_object($post->post_type);
|
67 |
|
68 |
+
// Check if a revision. If so, stop
|
69 |
+
if ($post->post_type === 'revision') {
|
70 |
+
return;
|
71 |
+
}
|
72 |
+
|
73 |
// Check if the current user has permission to edit the post.
|
74 |
if (!current_user_can($post_type->cap->edit_post, $postId)) {
|
75 |
return;
|
src/Modules/CoreModule.php
CHANGED
@@ -78,6 +78,14 @@ class CoreModule implements ModuleInterface
|
|
78 |
'wpra/core/plugin_dir_path' => function (ContainerInterface $c) {
|
79 |
return plugin_dir_path($c->get('wpra/core/plugin_file_path'));
|
80 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
/*
|
82 |
* The URL to the WP RSS Aggregator plugin directory.
|
83 |
*
|
78 |
'wpra/core/plugin_dir_path' => function (ContainerInterface $c) {
|
79 |
return plugin_dir_path($c->get('wpra/core/plugin_file_path'));
|
80 |
},
|
81 |
+
/*
|
82 |
+
* The name of the WP RSS Aggregator plugin directory.
|
83 |
+
*
|
84 |
+
* @since 4.17.3
|
85 |
+
*/
|
86 |
+
'wpra/core/plugin_dir_name' => function (ContainerInterface $c) {
|
87 |
+
return basename(plugin_dir_path($c->get('wpra/core/plugin_file_path')));
|
88 |
+
},
|
89 |
/*
|
90 |
* The URL to the WP RSS Aggregator plugin directory.
|
91 |
*
|
src/Modules/I18nModule.php
CHANGED
@@ -28,13 +28,23 @@ class I18nModule implements ModuleInterface
|
|
28 |
'wpra/i18n/domain' => function () {
|
29 |
return WPRSS_TEXT_DOMAIN;
|
30 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
/*
|
32 |
* The path to the languages directory.
|
33 |
*
|
34 |
* @since 4.13
|
35 |
*/
|
36 |
-
'wpra/i18n/
|
37 |
-
return
|
38 |
},
|
39 |
/*
|
40 |
* The handler that loads the plugin's text domain.
|
@@ -44,9 +54,9 @@ class I18nModule implements ModuleInterface
|
|
44 |
'wpra/i18n/load_text_domain_handler' => function (ContainerInterface $c) {
|
45 |
return new LoadTextDomainHandler(
|
46 |
$c->get('wpra/i18n/domain'),
|
47 |
-
$c->get('wpra/i18n/
|
48 |
);
|
49 |
-
}
|
50 |
];
|
51 |
}
|
52 |
|
28 |
'wpra/i18n/domain' => function () {
|
29 |
return WPRSS_TEXT_DOMAIN;
|
30 |
},
|
31 |
+
/*
|
32 |
+
* The name of the languages' parent directory.
|
33 |
+
*
|
34 |
+
* @since 4.17.3
|
35 |
+
*/
|
36 |
+
'wpra/i18n/languages/parent_dir' => function (ContainerInterface $c) {
|
37 |
+
return $c->has('wpra/core/plugin_dir_name')
|
38 |
+
? $c->get('wpra/core/plugin_dir_name')
|
39 |
+
: '';
|
40 |
+
},
|
41 |
/*
|
42 |
* The path to the languages directory.
|
43 |
*
|
44 |
* @since 4.13
|
45 |
*/
|
46 |
+
'wpra/i18n/languages_rel_dir' => function (ContainerInterface $c) {
|
47 |
+
return $c->get('wpra/i18n/languages/parent_dir') . '/languages';
|
48 |
},
|
49 |
/*
|
50 |
* The handler that loads the plugin's text domain.
|
54 |
'wpra/i18n/load_text_domain_handler' => function (ContainerInterface $c) {
|
55 |
return new LoadTextDomainHandler(
|
56 |
$c->get('wpra/i18n/domain'),
|
57 |
+
$c->get('wpra/i18n/languages_rel_dir')
|
58 |
);
|
59 |
+
},
|
60 |
];
|
61 |
}
|
62 |
|
src/Modules/ImagesModule.php
CHANGED
@@ -223,12 +223,17 @@ class ImagesModule implements ModuleInterface
|
|
223 |
global $post;
|
224 |
|
225 |
$collection = $c->get('wpra/feeds/sources/collection');
|
226 |
-
$
|
227 |
-
? $collection[$post->ID]
|
228 |
: [];
|
229 |
|
|
|
|
|
|
|
|
|
|
|
230 |
return [
|
231 |
-
'feed' => $
|
232 |
'options' => $c->get('wpra/images/feeds/meta_box/template/enabled_options'),
|
233 |
];
|
234 |
};
|
223 |
global $post;
|
224 |
|
225 |
$collection = $c->get('wpra/feeds/sources/collection');
|
226 |
+
$info = isset($collection[$post->ID])
|
227 |
+
? $collection[$post->ID]->export()
|
228 |
: [];
|
229 |
|
230 |
+
// Get the URL for the default ft. image and add it to the info
|
231 |
+
if (array_key_exists('def_ft_image', $info)) {
|
232 |
+
$info['def_ft_image_url'] = wp_get_attachment_url($info['def_ft_image']);
|
233 |
+
}
|
234 |
+
|
235 |
return [
|
236 |
+
'feed' => $info,
|
237 |
'options' => $c->get('wpra/images/feeds/meta_box/template/enabled_options'),
|
238 |
];
|
239 |
};
|
src/RestApi/EndPoints/Handlers/GetEntityHandler.php
CHANGED
@@ -12,33 +12,33 @@ use WP_REST_Response;
|
|
12 |
/**
|
13 |
* A generic endpoint handler for entity collections.
|
14 |
*
|
15 |
-
* @since
|
16 |
*/
|
17 |
class GetEntityHandler extends AbstractRestApiEndPoint
|
18 |
{
|
19 |
/**
|
20 |
-
* @since
|
21 |
*
|
22 |
* @var CollectionInterface
|
23 |
*/
|
24 |
protected $collection;
|
25 |
|
26 |
/**
|
27 |
-
* @since
|
28 |
*
|
29 |
* @var string
|
30 |
*/
|
31 |
protected $idKey;
|
32 |
|
33 |
/**
|
34 |
-
* @since
|
35 |
*
|
36 |
* @var callable[]
|
37 |
*/
|
38 |
protected $filters;
|
39 |
|
40 |
/**
|
41 |
-
* @since
|
42 |
*
|
43 |
* @var int
|
44 |
*/
|
@@ -47,7 +47,7 @@ class GetEntityHandler extends AbstractRestApiEndPoint
|
|
47 |
/**
|
48 |
* Constructor.
|
49 |
*
|
50 |
-
* @since
|
51 |
*
|
52 |
* @param CollectionInterface $collection The entity collection.
|
53 |
* @param string $idKey The key in requests for IDs, for responding with single entities.
|
@@ -67,7 +67,7 @@ class GetEntityHandler extends AbstractRestApiEndPoint
|
|
67 |
/**
|
68 |
* @inheritDoc
|
69 |
*
|
70 |
-
* @since
|
71 |
*/
|
72 |
protected function handle(WP_REST_Request $request)
|
73 |
{
|
@@ -89,7 +89,7 @@ class GetEntityHandler extends AbstractRestApiEndPoint
|
|
89 |
/**
|
90 |
* Applies filters to the collection based on the request.
|
91 |
*
|
92 |
-
* @since
|
93 |
*
|
94 |
* @param WP_REST_Request $request The request.
|
95 |
* @param CollectionInterface $collection The collection to filter.
|
@@ -112,7 +112,7 @@ class GetEntityHandler extends AbstractRestApiEndPoint
|
|
112 |
/**
|
113 |
* Paginates the collection.
|
114 |
*
|
115 |
-
* @since
|
116 |
*
|
117 |
* @param WP_REST_Request $request The request.
|
118 |
* @param CollectionInterface $collection The collection to paginate.
|
12 |
/**
|
13 |
* A generic endpoint handler for entity collections.
|
14 |
*
|
15 |
+
* @since 4.17.2
|
16 |
*/
|
17 |
class GetEntityHandler extends AbstractRestApiEndPoint
|
18 |
{
|
19 |
/**
|
20 |
+
* @since 4.17.2
|
21 |
*
|
22 |
* @var CollectionInterface
|
23 |
*/
|
24 |
protected $collection;
|
25 |
|
26 |
/**
|
27 |
+
* @since 4.17.2
|
28 |
*
|
29 |
* @var string
|
30 |
*/
|
31 |
protected $idKey;
|
32 |
|
33 |
/**
|
34 |
+
* @since 4.17.2
|
35 |
*
|
36 |
* @var callable[]
|
37 |
*/
|
38 |
protected $filters;
|
39 |
|
40 |
/**
|
41 |
+
* @since 4.17.2
|
42 |
*
|
43 |
* @var int
|
44 |
*/
|
47 |
/**
|
48 |
* Constructor.
|
49 |
*
|
50 |
+
* @since 4.17.2
|
51 |
*
|
52 |
* @param CollectionInterface $collection The entity collection.
|
53 |
* @param string $idKey The key in requests for IDs, for responding with single entities.
|
67 |
/**
|
68 |
* @inheritDoc
|
69 |
*
|
70 |
+
* @since 4.17.2
|
71 |
*/
|
72 |
protected function handle(WP_REST_Request $request)
|
73 |
{
|
89 |
/**
|
90 |
* Applies filters to the collection based on the request.
|
91 |
*
|
92 |
+
* @since 4.17.2
|
93 |
*
|
94 |
* @param WP_REST_Request $request The request.
|
95 |
* @param CollectionInterface $collection The collection to filter.
|
112 |
/**
|
113 |
* Paginates the collection.
|
114 |
*
|
115 |
+
* @since 4.17.2
|
116 |
*
|
117 |
* @param WP_REST_Request $request The request.
|
118 |
* @param CollectionInterface $collection The collection to paginate.
|
src/Twig/Extensions/I18n/I18nTransNode.php
CHANGED
@@ -18,6 +18,6 @@ class I18nTransNode extends Twig_Extensions_Node_Trans
|
|
18 |
*/
|
19 |
protected function getTransFunction($plural)
|
20 |
{
|
21 |
-
return $plural ? '
|
22 |
}
|
23 |
}
|
18 |
*/
|
19 |
protected function getTransFunction($plural)
|
20 |
{
|
21 |
+
return ($plural) ? 'wprss_translate_n' : 'wprss_translate';
|
22 |
}
|
23 |
}
|
src/Twig/Extensions/WpraExtension.php
CHANGED
@@ -158,10 +158,13 @@ class WpraExtension extends AbstractExtension
|
|
158 |
protected function getWpraLinkAttrsFunction()
|
159 |
{
|
160 |
$name = 'wpra_link_attrs';
|
|
|
|
|
|
|
161 |
|
162 |
return new TwigFunction($name, function ($url, $options, $className = '') {
|
163 |
-
return $this->prepareLinkAttrs($url, $options, $className);
|
164 |
-
});
|
165 |
}
|
166 |
|
167 |
/**
|
158 |
protected function getWpraLinkAttrsFunction()
|
159 |
{
|
160 |
$name = 'wpra_link_attrs';
|
161 |
+
$options = [
|
162 |
+
'is_safe' => ['html'],
|
163 |
+
];
|
164 |
|
165 |
return new TwigFunction($name, function ($url, $options, $className = '') {
|
166 |
+
return ' ' . $this->prepareLinkAttrs($url, $options, $className);
|
167 |
+
}, $options);
|
168 |
}
|
169 |
|
170 |
/**
|
templates/admin/feeds/images-meta-box.twig
CHANGED
@@ -77,7 +77,7 @@
|
|
77 |
</label>
|
78 |
</th>
|
79 |
<td>
|
80 |
-
<input type="hidden" id="wprss-feed-def-ft-image" name="wpra_feed_def_ft_image" value="{{ feed.
|
81 |
|
82 |
<img src="{{ feed.def_ft_image_url }}" id="wprss-feed-def-ft-image-preview" />
|
83 |
<p id="wprss-feed-def-ft-image-preview-hint" class="howto">
|
77 |
</label>
|
78 |
</th>
|
79 |
<td>
|
80 |
+
<input type="hidden" id="wprss-feed-def-ft-image" name="wpra_feed_def_ft_image" value="{{ feed.def_ft_image }}" />
|
81 |
|
82 |
<img src="{{ feed.def_ft_image_url }}" id="wprss-feed-def-ft-image-preview" />
|
83 |
<p id="wprss-feed-def-ft-image-preview-hint" class="howto">
|
templates/admin/tools/crons.twig
CHANGED
@@ -1,82 +1,130 @@
|
|
1 |
-
<h3>{% trans "Crons" %}</h3>
|
2 |
-
|
3 |
<div id="wpra-crons">
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
|
|
8 |
</div>
|
9 |
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
<
|
21 |
-
<span class="wpra-crons-
|
22 |
-
|
23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
</span>
|
25 |
-
|
26 |
-
|
|
|
27 |
</div>
|
28 |
-
</div>
|
29 |
|
30 |
-
|
31 |
-
|
32 |
|
33 |
-
|
34 |
-
|
35 |
<span>
|
36 |
<strong>{% trans "Global Interval:" %}</strong>
|
37 |
<code class="wpra-crons-global-interval"></code>
|
38 |
</span>
|
39 |
-
|
40 |
<strong>{% trans "Global Time:" %}</strong>
|
41 |
<code class="wpra-crons-global-time"></code>
|
42 |
</span>
|
43 |
|
44 |
-
|
45 |
<a class="button wpra-crons-download-timeline">
|
46 |
{% trans "Download Timeline Image" %}
|
47 |
</a>
|
48 |
</span>
|
|
|
49 |
</div>
|
50 |
-
</div>
|
51 |
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
65 |
</div>
|
66 |
|
67 |
<style type="text/css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
#wpra-crons-toolbar {
|
69 |
display: block;
|
70 |
-
position: sticky;
|
71 |
-
top: 32px;
|
72 |
width: 100%;
|
73 |
-
padding:
|
74 |
-
margin
|
75 |
line-height: 30px;
|
76 |
box-sizing: border-box;
|
77 |
}
|
78 |
|
79 |
#wpra-crons-timeline {
|
|
|
|
|
80 |
display: block;
|
81 |
width: 100%;
|
82 |
overflow-x: auto;
|
@@ -85,8 +133,9 @@
|
|
85 |
padding: 10px 0;
|
86 |
background: #fff;
|
87 |
border: 1px solid #ccd0d4;
|
88 |
-
box-shadow: 0
|
89 |
box-sizing: border-box;
|
|
|
90 |
}
|
91 |
|
92 |
#wpra-crons-timeline-canvas {
|
@@ -96,6 +145,7 @@
|
|
96 |
#wpra-crons-tool-table tbody tr {
|
97 |
cursor: pointer;
|
98 |
}
|
|
|
99 |
#wpra-crons-tool-table tbody tr td {
|
100 |
border-width: 1px 0;
|
101 |
border-style: solid;
|
@@ -142,14 +192,21 @@
|
|
142 |
color: #999;
|
143 |
}
|
144 |
|
|
|
|
|
|
|
|
|
|
|
145 |
.wpra-crons-pagination {
|
146 |
display: inline-block;
|
147 |
float: right;
|
148 |
}
|
|
|
149 |
.wpra-crons-pagination-info,
|
150 |
.wpra-crons-pagination-buttons {
|
151 |
display: inline-block;
|
152 |
}
|
|
|
153 |
.wpra-crons-pagination-buttons {
|
154 |
margin-left: 5px;
|
155 |
}
|
|
|
|
|
1 |
<div id="wpra-crons">
|
2 |
+
<div class="wpra-crons-loading">
|
3 |
+
<span class="wpra-crons-loading-text">Loading</span>
|
4 |
+
<div class="wpra-crons-loading-bar-container">
|
5 |
+
<div class="wpra-crons-loading-bar"></div>
|
6 |
+
</div>
|
7 |
</div>
|
8 |
|
9 |
+
<div class="wpra-crons-wrap">
|
10 |
+
{# the timeline diagram #}
|
11 |
+
<div id="wpra-crons-timeline">
|
12 |
+
<canvas id="wpra-crons-timeline-canvas" height="150"></canvas>
|
13 |
+
</div>
|
14 |
+
|
15 |
+
{# Toolbar #}
|
16 |
+
<div id="wpra-crons-toolbar">
|
17 |
+
{# Pagination #}
|
18 |
+
<div class="wpra-crons-pagination">
|
19 |
+
<div class="wpra-crons-pagination-info">
|
20 |
+
{{ "{number} feeds"|trans|replace({'{number}': '<span class="wpra-crons-num-feeds"></span>'})|raw }}
|
21 |
+
</div>
|
22 |
+
<div class="wpra-crons-pagination-buttons">
|
23 |
+
<button id="wpra-crons-first-page" class="button" disabled>«</button>
|
24 |
+
<button id="wpra-crons-prev-page" class="button" disabled>‹</button>
|
25 |
+
<span class="wpra-crons-page-indicator">
|
26 |
+
{% set currPageSpan = '<span class="wpra-crons-curr-page">1</span>' %}
|
27 |
+
{% set numPagesSpan = '<span class="wpra-crons-num-pages">1</span>' %}
|
28 |
+
{{ "{page} of {pages}"|trans|replace({'{page}': currPageSpan, '{pages}': numPagesSpan})|raw }}
|
29 |
</span>
|
30 |
+
<button id="wpra-crons-next-page" class="button" disabled>›</button>
|
31 |
+
<button id="wpra-crons-last-page" class="button" disabled>»</button>
|
32 |
+
</div>
|
33 |
</div>
|
|
|
34 |
|
35 |
+
{# Loading text #}
|
36 |
+
<span id="wpra-crons-loading">{% trans "Loading" %}</span>
|
37 |
|
38 |
+
{# Info panel #}
|
39 |
+
<div class="wpra-crons-info">
|
40 |
<span>
|
41 |
<strong>{% trans "Global Interval:" %}</strong>
|
42 |
<code class="wpra-crons-global-interval"></code>
|
43 |
</span>
|
44 |
+
<span>
|
45 |
<strong>{% trans "Global Time:" %}</strong>
|
46 |
<code class="wpra-crons-global-time"></code>
|
47 |
</span>
|
48 |
|
49 |
+
<span>
|
50 |
<a class="button wpra-crons-download-timeline">
|
51 |
{% trans "Download Timeline Image" %}
|
52 |
</a>
|
53 |
</span>
|
54 |
+
</div>
|
55 |
</div>
|
|
|
56 |
|
57 |
+
{# The table #}
|
58 |
+
<table id="wpra-crons-tool-table" class="widefat fixed striped">
|
59 |
+
<thead>
|
60 |
+
<tr>
|
61 |
+
<th class="wpra-crons-feed-id-col"></th>
|
62 |
+
<th class="wpra-crons-feed-name-col">{% trans "Feed" %}</th>
|
63 |
+
<th class="wpra-crons-interval-col">{% trans "Interval" %}</th>
|
64 |
+
<th class="wpra-crons-time-col">{% trans "Time" %}</th>
|
65 |
+
</tr>
|
66 |
+
</thead>
|
67 |
+
<tbody>
|
68 |
+
</tbody>
|
69 |
+
</table>
|
70 |
+
</div>
|
71 |
</div>
|
72 |
|
73 |
<style type="text/css">
|
74 |
+
#wpra-crons {
|
75 |
+
position: relative;
|
76 |
+
}
|
77 |
+
|
78 |
+
.wpra-crons-loading {
|
79 |
+
display: none;
|
80 |
+
position: relative;
|
81 |
+
width: 30%;
|
82 |
+
margin: 30px auto 20px;
|
83 |
+
text-align: center;
|
84 |
+
}
|
85 |
+
|
86 |
+
.wpra-crons-loading-text {
|
87 |
+
font-size: 20px;
|
88 |
+
color: #999;
|
89 |
+
font-weight: bold;
|
90 |
+
text-shadow: 0 1px 0 #fff;
|
91 |
+
}
|
92 |
+
|
93 |
+
.wpra-crons-loading-bar-container,
|
94 |
+
.wpra-crons-loading-bar {
|
95 |
+
display: block;
|
96 |
+
width: 100%;
|
97 |
+
height: 6px;
|
98 |
+
margin: 10px auto;
|
99 |
+
border-radius: 3px;
|
100 |
+
}
|
101 |
+
|
102 |
+
.wpra-crons-loading-bar-container {
|
103 |
+
background-color: #ccc;
|
104 |
+
}
|
105 |
+
|
106 |
+
.wpra-crons-loading-bar {
|
107 |
+
background-color: #0073AA;
|
108 |
+
transition: 0.1s linear width;
|
109 |
+
}
|
110 |
+
|
111 |
+
.wpra-crons-loading-text,
|
112 |
+
.wpra-crons-loading-bar {
|
113 |
+
animation: 0.8s ease-in-out infinite wpra-crons-loading-anim;
|
114 |
+
}
|
115 |
+
|
116 |
#wpra-crons-toolbar {
|
117 |
display: block;
|
|
|
|
|
118 |
width: 100%;
|
119 |
+
padding: 0;
|
120 |
+
margin: 10px 0 5px;
|
121 |
line-height: 30px;
|
122 |
box-sizing: border-box;
|
123 |
}
|
124 |
|
125 |
#wpra-crons-timeline {
|
126 |
+
position: sticky;
|
127 |
+
top: 32px;
|
128 |
display: block;
|
129 |
width: 100%;
|
130 |
overflow-x: auto;
|
133 |
padding: 10px 0;
|
134 |
background: #fff;
|
135 |
border: 1px solid #ccd0d4;
|
136 |
+
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.1);
|
137 |
box-sizing: border-box;
|
138 |
+
z-index: 100;
|
139 |
}
|
140 |
|
141 |
#wpra-crons-timeline-canvas {
|
145 |
#wpra-crons-tool-table tbody tr {
|
146 |
cursor: pointer;
|
147 |
}
|
148 |
+
|
149 |
#wpra-crons-tool-table tbody tr td {
|
150 |
border-width: 1px 0;
|
151 |
border-style: solid;
|
192 |
color: #999;
|
193 |
}
|
194 |
|
195 |
+
.wpra-crons-reset-interval,
|
196 |
+
.wpra-crons-reset-time {
|
197 |
+
margin-left: 8px;
|
198 |
+
}
|
199 |
+
|
200 |
.wpra-crons-pagination {
|
201 |
display: inline-block;
|
202 |
float: right;
|
203 |
}
|
204 |
+
|
205 |
.wpra-crons-pagination-info,
|
206 |
.wpra-crons-pagination-buttons {
|
207 |
display: inline-block;
|
208 |
}
|
209 |
+
|
210 |
.wpra-crons-pagination-buttons {
|
211 |
margin-left: 5px;
|
212 |
}
|
test/bootstrap.php
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
global $vendorDir;
|
4 |
-
$vendorDir = __DIR__ . '/../vendor/';
|
5 |
-
|
6 |
-
require_once $vendorDir . 'autoload.php';
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Loads a WordPress file.
|
10 |
-
*
|
11 |
-
* @since [*next-version*]
|
12 |
-
*
|
13 |
-
* @param string $relPath The path relative to a WordPress installation's root directory.
|
14 |
-
*/
|
15 |
-
function wpraTestLoadWpFile($relPath)
|
16 |
-
{
|
17 |
-
global $vendorDir;
|
18 |
-
|
19 |
-
require_once $vendorDir . 'johnpbloch/wordpress-core/' . $relPath;
|
20 |
-
}
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60::getLoader();
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -539,6 +539,7 @@ return array(
|
|
539 |
'Twig\\Node\\EmbedNode' => $vendorDir . '/twig/twig/src/Node/EmbedNode.php',
|
540 |
'Twig\\Node\\Expression\\AbstractExpression' => $vendorDir . '/twig/twig/src/Node/Expression/AbstractExpression.php',
|
541 |
'Twig\\Node\\Expression\\ArrayExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ArrayExpression.php',
|
|
|
542 |
'Twig\\Node\\Expression\\AssignNameExpression' => $vendorDir . '/twig/twig/src/Node/Expression/AssignNameExpression.php',
|
543 |
'Twig\\Node\\Expression\\Binary\\AbstractBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AbstractBinary.php',
|
544 |
'Twig\\Node\\Expression\\Binary\\AddBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AddBinary.php',
|
@@ -638,6 +639,7 @@ return array(
|
|
638 |
'Twig\\Test\\NodeTestCase' => $vendorDir . '/twig/twig/src/Test/NodeTestCase.php',
|
639 |
'Twig\\Token' => $vendorDir . '/twig/twig/src/Token.php',
|
640 |
'Twig\\TokenParser\\AbstractTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/AbstractTokenParser.php',
|
|
|
641 |
'Twig\\TokenParser\\AutoEscapeTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/AutoEscapeTokenParser.php',
|
642 |
'Twig\\TokenParser\\BlockTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/BlockTokenParser.php',
|
643 |
'Twig\\TokenParser\\DeprecatedTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/DeprecatedTokenParser.php',
|
539 |
'Twig\\Node\\EmbedNode' => $vendorDir . '/twig/twig/src/Node/EmbedNode.php',
|
540 |
'Twig\\Node\\Expression\\AbstractExpression' => $vendorDir . '/twig/twig/src/Node/Expression/AbstractExpression.php',
|
541 |
'Twig\\Node\\Expression\\ArrayExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ArrayExpression.php',
|
542 |
+
'Twig\\Node\\Expression\\ArrowFunctionExpression' => $vendorDir . '/twig/twig/src/Node/Expression/ArrowFunctionExpression.php',
|
543 |
'Twig\\Node\\Expression\\AssignNameExpression' => $vendorDir . '/twig/twig/src/Node/Expression/AssignNameExpression.php',
|
544 |
'Twig\\Node\\Expression\\Binary\\AbstractBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AbstractBinary.php',
|
545 |
'Twig\\Node\\Expression\\Binary\\AddBinary' => $vendorDir . '/twig/twig/src/Node/Expression/Binary/AddBinary.php',
|
639 |
'Twig\\Test\\NodeTestCase' => $vendorDir . '/twig/twig/src/Test/NodeTestCase.php',
|
640 |
'Twig\\Token' => $vendorDir . '/twig/twig/src/Token.php',
|
641 |
'Twig\\TokenParser\\AbstractTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/AbstractTokenParser.php',
|
642 |
+
'Twig\\TokenParser\\ApplyTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/ApplyTokenParser.php',
|
643 |
'Twig\\TokenParser\\AutoEscapeTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/AutoEscapeTokenParser.php',
|
644 |
'Twig\\TokenParser\\BlockTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/BlockTokenParser.php',
|
645 |
'Twig\\TokenParser\\DeprecatedTokenParser' => $vendorDir . '/twig/twig/src/TokenParser/DeprecatedTokenParser.php',
|
vendor/composer/autoload_psr4.php
CHANGED
@@ -17,18 +17,18 @@ return array(
|
|
17 |
'PhpDocReader\\' => array($vendorDir . '/php-di/phpdoc-reader/src/PhpDocReader'),
|
18 |
'Invoker\\' => array($vendorDir . '/php-di/invoker/src'),
|
19 |
'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container', $vendorDir . '/container-interop/service-provider/src'),
|
20 |
-
'Dhii\\Validation\\' => array($vendorDir . '/dhii/validation-
|
21 |
'Dhii\\Util\\String\\' => array($vendorDir . '/dhii/stringable-interface/src'),
|
22 |
'Dhii\\Util\\Normalization\\' => array($vendorDir . '/dhii/normalization-helper-base/src'),
|
23 |
'Dhii\\Transformer\\' => array($vendorDir . '/dhii/transformer-interface/src'),
|
24 |
-
'Dhii\\Stats\\' => array($vendorDir . '/dhii/stats-
|
25 |
-
'Dhii\\Output\\' => array($vendorDir . '/dhii/output-renderer-
|
26 |
'Dhii\\Iterator\\' => array($vendorDir . '/dhii/iterator-helper-base/src'),
|
27 |
-
'Dhii\\I18n\\' => array($vendorDir . '/dhii/i18n-
|
28 |
'Dhii\\Factory\\' => array($vendorDir . '/dhii/factory-interface/src'),
|
29 |
-
'Dhii\\Exception\\' => array($vendorDir . '/dhii/exception
|
30 |
-
'Dhii\\Di\\' => array($vendorDir . '/dhii/di
|
31 |
'Dhii\\Data\\Container\\' => array($vendorDir . '/dhii/container-helper-base/src'),
|
32 |
-
'Dhii\\Collection\\' => array($vendorDir . '/dhii/collections-
|
33 |
'DI\\' => array($vendorDir . '/php-di/php-di/src/DI'),
|
34 |
);
|
17 |
'PhpDocReader\\' => array($vendorDir . '/php-di/phpdoc-reader/src/PhpDocReader'),
|
18 |
'Invoker\\' => array($vendorDir . '/php-di/invoker/src'),
|
19 |
'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container', $vendorDir . '/container-interop/service-provider/src'),
|
20 |
+
'Dhii\\Validation\\' => array($vendorDir . '/dhii/validation-abstract/src', $vendorDir . '/dhii/validation-base/src', $vendorDir . '/dhii/validation-interface/src'),
|
21 |
'Dhii\\Util\\String\\' => array($vendorDir . '/dhii/stringable-interface/src'),
|
22 |
'Dhii\\Util\\Normalization\\' => array($vendorDir . '/dhii/normalization-helper-base/src'),
|
23 |
'Dhii\\Transformer\\' => array($vendorDir . '/dhii/transformer-interface/src'),
|
24 |
+
'Dhii\\Stats\\' => array($vendorDir . '/dhii/stats-abstract/src', $vendorDir . '/dhii/stats-interface/src'),
|
25 |
+
'Dhii\\Output\\' => array($vendorDir . '/dhii/output-renderer-abstract/src', $vendorDir . '/dhii/output-renderer-base/src', $vendorDir . '/dhii/output-renderer-interface/src'),
|
26 |
'Dhii\\Iterator\\' => array($vendorDir . '/dhii/iterator-helper-base/src'),
|
27 |
+
'Dhii\\I18n\\' => array($vendorDir . '/dhii/i18n-helper-base/src', $vendorDir . '/dhii/i18n-interface/src'),
|
28 |
'Dhii\\Factory\\' => array($vendorDir . '/dhii/factory-interface/src'),
|
29 |
+
'Dhii\\Exception\\' => array($vendorDir . '/dhii/exception/src', $vendorDir . '/dhii/exception-interface/src'),
|
30 |
+
'Dhii\\Di\\' => array($vendorDir . '/dhii/di/src', $vendorDir . '/dhii/di-abstract/src', $vendorDir . '/dhii/di-interface/src'),
|
31 |
'Dhii\\Data\\Container\\' => array($vendorDir . '/dhii/container-helper-base/src'),
|
32 |
+
'Dhii\\Collection\\' => array($vendorDir . '/dhii/collections-abstract/src', $vendorDir . '/dhii/collections-abstract-base/src', $vendorDir . '/dhii/collections-interface/src'),
|
33 |
'DI\\' => array($vendorDir . '/php-di/php-di/src/DI'),
|
34 |
);
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit1ed1f237c7c03e77bb8213b884aea306
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit1ed1f237c7c03e77bb8213b884aea306
|
|
48 |
$loader->register(true);
|
49 |
|
50 |
if ($useStaticLoader) {
|
51 |
-
$includeFiles = Composer\Autoload\
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
-
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
-
function
|
64 |
{
|
65 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60', 'loadClassLoader'));
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60::getInitializer($loader));
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
48 |
$loader->register(true);
|
49 |
|
50 |
if ($useStaticLoader) {
|
51 |
+
$includeFiles = Composer\Autoload\ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60::$files;
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequire46c8b76c439f86ad826af1a4d36b4e60($fileIdentifier, $file);
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
+
function composerRequire46c8b76c439f86ad826af1a4d36b4e60($fileIdentifier, $file)
|
64 |
{
|
65 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
require $file;
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
@@ -105,9 +105,9 @@ class ComposerStaticInit1ed1f237c7c03e77bb8213b884aea306
|
|
105 |
),
|
106 |
'Dhii\\Validation\\' =>
|
107 |
array (
|
108 |
-
0 => __DIR__ . '/..' . '/dhii/validation-
|
109 |
-
1 => __DIR__ . '/..' . '/dhii/validation-
|
110 |
-
2 => __DIR__ . '/..' . '/dhii/validation-
|
111 |
),
|
112 |
'Dhii\\Util\\String\\' =>
|
113 |
array (
|
@@ -123,14 +123,14 @@ class ComposerStaticInit1ed1f237c7c03e77bb8213b884aea306
|
|
123 |
),
|
124 |
'Dhii\\Stats\\' =>
|
125 |
array (
|
126 |
-
0 => __DIR__ . '/..' . '/dhii/stats-
|
127 |
-
1 => __DIR__ . '/..' . '/dhii/stats-
|
128 |
),
|
129 |
'Dhii\\Output\\' =>
|
130 |
array (
|
131 |
-
0 => __DIR__ . '/..' . '/dhii/output-renderer-
|
132 |
-
1 => __DIR__ . '/..' . '/dhii/output-renderer-
|
133 |
-
2 => __DIR__ . '/..' . '/dhii/output-renderer-
|
134 |
),
|
135 |
'Dhii\\Iterator\\' =>
|
136 |
array (
|
@@ -138,8 +138,8 @@ class ComposerStaticInit1ed1f237c7c03e77bb8213b884aea306
|
|
138 |
),
|
139 |
'Dhii\\I18n\\' =>
|
140 |
array (
|
141 |
-
0 => __DIR__ . '/..' . '/dhii/i18n-
|
142 |
-
1 => __DIR__ . '/..' . '/dhii/i18n-
|
143 |
),
|
144 |
'Dhii\\Factory\\' =>
|
145 |
array (
|
@@ -147,14 +147,14 @@ class ComposerStaticInit1ed1f237c7c03e77bb8213b884aea306
|
|
147 |
),
|
148 |
'Dhii\\Exception\\' =>
|
149 |
array (
|
150 |
-
0 => __DIR__ . '/..' . '/dhii/exception
|
151 |
-
1 => __DIR__ . '/..' . '/dhii/exception/src',
|
152 |
),
|
153 |
'Dhii\\Di\\' =>
|
154 |
array (
|
155 |
-
0 => __DIR__ . '/..' . '/dhii/di
|
156 |
1 => __DIR__ . '/..' . '/dhii/di-abstract/src',
|
157 |
-
2 => __DIR__ . '/..' . '/dhii/di/src',
|
158 |
),
|
159 |
'Dhii\\Data\\Container\\' =>
|
160 |
array (
|
@@ -162,9 +162,9 @@ class ComposerStaticInit1ed1f237c7c03e77bb8213b884aea306
|
|
162 |
),
|
163 |
'Dhii\\Collection\\' =>
|
164 |
array (
|
165 |
-
0 => __DIR__ . '/..' . '/dhii/collections-
|
166 |
1 => __DIR__ . '/..' . '/dhii/collections-abstract-base/src',
|
167 |
-
2 => __DIR__ . '/..' . '/dhii/collections-
|
168 |
),
|
169 |
'DI\\' =>
|
170 |
array (
|
@@ -727,6 +727,7 @@ class ComposerStaticInit1ed1f237c7c03e77bb8213b884aea306
|
|
727 |
'Twig\\Node\\EmbedNode' => __DIR__ . '/..' . '/twig/twig/src/Node/EmbedNode.php',
|
728 |
'Twig\\Node\\Expression\\AbstractExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/AbstractExpression.php',
|
729 |
'Twig\\Node\\Expression\\ArrayExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ArrayExpression.php',
|
|
|
730 |
'Twig\\Node\\Expression\\AssignNameExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/AssignNameExpression.php',
|
731 |
'Twig\\Node\\Expression\\Binary\\AbstractBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AbstractBinary.php',
|
732 |
'Twig\\Node\\Expression\\Binary\\AddBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AddBinary.php',
|
@@ -826,6 +827,7 @@ class ComposerStaticInit1ed1f237c7c03e77bb8213b884aea306
|
|
826 |
'Twig\\Test\\NodeTestCase' => __DIR__ . '/..' . '/twig/twig/src/Test/NodeTestCase.php',
|
827 |
'Twig\\Token' => __DIR__ . '/..' . '/twig/twig/src/Token.php',
|
828 |
'Twig\\TokenParser\\AbstractTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/AbstractTokenParser.php',
|
|
|
829 |
'Twig\\TokenParser\\AutoEscapeTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/AutoEscapeTokenParser.php',
|
830 |
'Twig\\TokenParser\\BlockTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/BlockTokenParser.php',
|
831 |
'Twig\\TokenParser\\DeprecatedTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/DeprecatedTokenParser.php',
|
@@ -1079,10 +1081,10 @@ class ComposerStaticInit1ed1f237c7c03e77bb8213b884aea306
|
|
1079 |
public static function getInitializer(ClassLoader $loader)
|
1080 |
{
|
1081 |
return \Closure::bind(function () use ($loader) {
|
1082 |
-
$loader->prefixLengthsPsr4 =
|
1083 |
-
$loader->prefixDirsPsr4 =
|
1084 |
-
$loader->prefixesPsr0 =
|
1085 |
-
$loader->classMap =
|
1086 |
|
1087 |
}, null, ClassLoader::class);
|
1088 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
105 |
),
|
106 |
'Dhii\\Validation\\' =>
|
107 |
array (
|
108 |
+
0 => __DIR__ . '/..' . '/dhii/validation-abstract/src',
|
109 |
+
1 => __DIR__ . '/..' . '/dhii/validation-base/src',
|
110 |
+
2 => __DIR__ . '/..' . '/dhii/validation-interface/src',
|
111 |
),
|
112 |
'Dhii\\Util\\String\\' =>
|
113 |
array (
|
123 |
),
|
124 |
'Dhii\\Stats\\' =>
|
125 |
array (
|
126 |
+
0 => __DIR__ . '/..' . '/dhii/stats-abstract/src',
|
127 |
+
1 => __DIR__ . '/..' . '/dhii/stats-interface/src',
|
128 |
),
|
129 |
'Dhii\\Output\\' =>
|
130 |
array (
|
131 |
+
0 => __DIR__ . '/..' . '/dhii/output-renderer-abstract/src',
|
132 |
+
1 => __DIR__ . '/..' . '/dhii/output-renderer-base/src',
|
133 |
+
2 => __DIR__ . '/..' . '/dhii/output-renderer-interface/src',
|
134 |
),
|
135 |
'Dhii\\Iterator\\' =>
|
136 |
array (
|
138 |
),
|
139 |
'Dhii\\I18n\\' =>
|
140 |
array (
|
141 |
+
0 => __DIR__ . '/..' . '/dhii/i18n-helper-base/src',
|
142 |
+
1 => __DIR__ . '/..' . '/dhii/i18n-interface/src',
|
143 |
),
|
144 |
'Dhii\\Factory\\' =>
|
145 |
array (
|
147 |
),
|
148 |
'Dhii\\Exception\\' =>
|
149 |
array (
|
150 |
+
0 => __DIR__ . '/..' . '/dhii/exception/src',
|
151 |
+
1 => __DIR__ . '/..' . '/dhii/exception-interface/src',
|
152 |
),
|
153 |
'Dhii\\Di\\' =>
|
154 |
array (
|
155 |
+
0 => __DIR__ . '/..' . '/dhii/di/src',
|
156 |
1 => __DIR__ . '/..' . '/dhii/di-abstract/src',
|
157 |
+
2 => __DIR__ . '/..' . '/dhii/di-interface/src',
|
158 |
),
|
159 |
'Dhii\\Data\\Container\\' =>
|
160 |
array (
|
162 |
),
|
163 |
'Dhii\\Collection\\' =>
|
164 |
array (
|
165 |
+
0 => __DIR__ . '/..' . '/dhii/collections-abstract/src',
|
166 |
1 => __DIR__ . '/..' . '/dhii/collections-abstract-base/src',
|
167 |
+
2 => __DIR__ . '/..' . '/dhii/collections-interface/src',
|
168 |
),
|
169 |
'DI\\' =>
|
170 |
array (
|
727 |
'Twig\\Node\\EmbedNode' => __DIR__ . '/..' . '/twig/twig/src/Node/EmbedNode.php',
|
728 |
'Twig\\Node\\Expression\\AbstractExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/AbstractExpression.php',
|
729 |
'Twig\\Node\\Expression\\ArrayExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ArrayExpression.php',
|
730 |
+
'Twig\\Node\\Expression\\ArrowFunctionExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/ArrowFunctionExpression.php',
|
731 |
'Twig\\Node\\Expression\\AssignNameExpression' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/AssignNameExpression.php',
|
732 |
'Twig\\Node\\Expression\\Binary\\AbstractBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AbstractBinary.php',
|
733 |
'Twig\\Node\\Expression\\Binary\\AddBinary' => __DIR__ . '/..' . '/twig/twig/src/Node/Expression/Binary/AddBinary.php',
|
827 |
'Twig\\Test\\NodeTestCase' => __DIR__ . '/..' . '/twig/twig/src/Test/NodeTestCase.php',
|
828 |
'Twig\\Token' => __DIR__ . '/..' . '/twig/twig/src/Token.php',
|
829 |
'Twig\\TokenParser\\AbstractTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/AbstractTokenParser.php',
|
830 |
+
'Twig\\TokenParser\\ApplyTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/ApplyTokenParser.php',
|
831 |
'Twig\\TokenParser\\AutoEscapeTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/AutoEscapeTokenParser.php',
|
832 |
'Twig\\TokenParser\\BlockTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/BlockTokenParser.php',
|
833 |
'Twig\\TokenParser\\DeprecatedTokenParser' => __DIR__ . '/..' . '/twig/twig/src/TokenParser/DeprecatedTokenParser.php',
|
1081 |
public static function getInitializer(ClassLoader $loader)
|
1082 |
{
|
1083 |
return \Closure::bind(function () use ($loader) {
|
1084 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60::$prefixLengthsPsr4;
|
1085 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60::$prefixDirsPsr4;
|
1086 |
+
$loader->prefixesPsr0 = ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60::$prefixesPsr0;
|
1087 |
+
$loader->classMap = ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60::$classMap;
|
1088 |
|
1089 |
}, null, ClassLoader::class);
|
1090 |
}
|
vendor/composer/installed.json
CHANGED
@@ -30,7 +30,8 @@
|
|
30 |
"MIT"
|
31 |
],
|
32 |
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
33 |
-
"homepage": "https://github.com/container-interop/container-interop"
|
|
|
34 |
},
|
35 |
{
|
36 |
"name": "container-interop/service-provider",
|
@@ -812,7 +813,8 @@
|
|
812 |
"email": "development@dhii.co"
|
813 |
}
|
814 |
],
|
815 |
-
"description": "Common abstract functionality for output renderers."
|
|
|
816 |
},
|
817 |
{
|
818 |
"name": "dhii/output-renderer-base",
|
@@ -868,21 +870,22 @@
|
|
868 |
"email": "development@dhii.co"
|
869 |
}
|
870 |
],
|
871 |
-
"description": "Base concrete functionality for output rendering."
|
|
|
872 |
},
|
873 |
{
|
874 |
"name": "dhii/output-renderer-interface",
|
875 |
-
"version": "v0.3
|
876 |
-
"version_normalized": "0.3.0.0
|
877 |
"source": {
|
878 |
"type": "git",
|
879 |
"url": "https://github.com/Dhii/output-renderer-interface.git",
|
880 |
-
"reference": "
|
881 |
},
|
882 |
"dist": {
|
883 |
"type": "zip",
|
884 |
-
"url": "https://api.github.com/repos/Dhii/output-renderer-interface/zipball/
|
885 |
-
"reference": "
|
886 |
"shasum": ""
|
887 |
},
|
888 |
"require": {
|
@@ -901,7 +904,7 @@
|
|
901 |
"suggest": {
|
902 |
"dhii/container-helper-base": "Useful for reading data from different context types uniformly"
|
903 |
},
|
904 |
-
"time": "
|
905 |
"type": "library",
|
906 |
"extra": {
|
907 |
"branch-alias": {
|
@@ -1273,17 +1276,17 @@
|
|
1273 |
},
|
1274 |
{
|
1275 |
"name": "erusev/parsedown",
|
1276 |
-
"version": "1.7.
|
1277 |
-
"version_normalized": "1.7.
|
1278 |
"source": {
|
1279 |
"type": "git",
|
1280 |
"url": "https://github.com/erusev/parsedown.git",
|
1281 |
-
"reference": "
|
1282 |
},
|
1283 |
"dist": {
|
1284 |
"type": "zip",
|
1285 |
-
"url": "https://api.github.com/repos/erusev/parsedown/zipball/
|
1286 |
-
"reference": "
|
1287 |
"shasum": ""
|
1288 |
},
|
1289 |
"require": {
|
@@ -1293,7 +1296,7 @@
|
|
1293 |
"require-dev": {
|
1294 |
"phpunit/phpunit": "^4.8.35"
|
1295 |
},
|
1296 |
-
"time": "2019-
|
1297 |
"type": "library",
|
1298 |
"installation-source": "dist",
|
1299 |
"autoload": {
|
@@ -1612,17 +1615,17 @@
|
|
1612 |
},
|
1613 |
{
|
1614 |
"name": "symfony/polyfill-ctype",
|
1615 |
-
"version": "v1.
|
1616 |
-
"version_normalized": "1.
|
1617 |
"source": {
|
1618 |
"type": "git",
|
1619 |
"url": "https://github.com/symfony/polyfill-ctype.git",
|
1620 |
-
"reference": "
|
1621 |
},
|
1622 |
"dist": {
|
1623 |
"type": "zip",
|
1624 |
-
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/
|
1625 |
-
"reference": "
|
1626 |
"shasum": ""
|
1627 |
},
|
1628 |
"require": {
|
@@ -1631,11 +1634,11 @@
|
|
1631 |
"suggest": {
|
1632 |
"ext-ctype": "For best performance"
|
1633 |
},
|
1634 |
-
"time": "2019-
|
1635 |
"type": "library",
|
1636 |
"extra": {
|
1637 |
"branch-alias": {
|
1638 |
-
"dev-master": "1.
|
1639 |
}
|
1640 |
},
|
1641 |
"installation-source": "dist",
|
@@ -1729,17 +1732,17 @@
|
|
1729 |
},
|
1730 |
{
|
1731 |
"name": "twig/twig",
|
1732 |
-
"version": "v1.
|
1733 |
-
"version_normalized": "1.
|
1734 |
"source": {
|
1735 |
"type": "git",
|
1736 |
"url": "https://github.com/twigphp/Twig.git",
|
1737 |
-
"reference": "
|
1738 |
},
|
1739 |
"dist": {
|
1740 |
"type": "zip",
|
1741 |
-
"url": "https://api.github.com/repos/twigphp/Twig/zipball/
|
1742 |
-
"reference": "
|
1743 |
"shasum": ""
|
1744 |
},
|
1745 |
"require": {
|
@@ -1751,11 +1754,11 @@
|
|
1751 |
"symfony/debug": "^2.7",
|
1752 |
"symfony/phpunit-bridge": "^3.4.19|^4.1.8"
|
1753 |
},
|
1754 |
-
"time": "2019-
|
1755 |
"type": "library",
|
1756 |
"extra": {
|
1757 |
"branch-alias": {
|
1758 |
-
"dev-master": "1.
|
1759 |
}
|
1760 |
},
|
1761 |
"installation-source": "dist",
|
30 |
"MIT"
|
31 |
],
|
32 |
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
33 |
+
"homepage": "https://github.com/container-interop/container-interop",
|
34 |
+
"abandoned": "psr/container"
|
35 |
},
|
36 |
{
|
37 |
"name": "container-interop/service-provider",
|
813 |
"email": "development@dhii.co"
|
814 |
}
|
815 |
],
|
816 |
+
"description": "Common abstract functionality for output renderers.",
|
817 |
+
"abandoned": true
|
818 |
},
|
819 |
{
|
820 |
"name": "dhii/output-renderer-base",
|
870 |
"email": "development@dhii.co"
|
871 |
}
|
872 |
],
|
873 |
+
"description": "Base concrete functionality for output rendering.",
|
874 |
+
"abandoned": true
|
875 |
},
|
876 |
{
|
877 |
"name": "dhii/output-renderer-interface",
|
878 |
+
"version": "v0.3",
|
879 |
+
"version_normalized": "0.3.0.0",
|
880 |
"source": {
|
881 |
"type": "git",
|
882 |
"url": "https://github.com/Dhii/output-renderer-interface.git",
|
883 |
+
"reference": "407014d7fd1af0427958f2acd61aff008ee9e032"
|
884 |
},
|
885 |
"dist": {
|
886 |
"type": "zip",
|
887 |
+
"url": "https://api.github.com/repos/Dhii/output-renderer-interface/zipball/407014d7fd1af0427958f2acd61aff008ee9e032",
|
888 |
+
"reference": "407014d7fd1af0427958f2acd61aff008ee9e032",
|
889 |
"shasum": ""
|
890 |
},
|
891 |
"require": {
|
904 |
"suggest": {
|
905 |
"dhii/container-helper-base": "Useful for reading data from different context types uniformly"
|
906 |
},
|
907 |
+
"time": "2019-11-14T11:20:00+00:00",
|
908 |
"type": "library",
|
909 |
"extra": {
|
910 |
"branch-alias": {
|
1276 |
},
|
1277 |
{
|
1278 |
"name": "erusev/parsedown",
|
1279 |
+
"version": "1.7.4",
|
1280 |
+
"version_normalized": "1.7.4.0",
|
1281 |
"source": {
|
1282 |
"type": "git",
|
1283 |
"url": "https://github.com/erusev/parsedown.git",
|
1284 |
+
"reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3"
|
1285 |
},
|
1286 |
"dist": {
|
1287 |
"type": "zip",
|
1288 |
+
"url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
|
1289 |
+
"reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
|
1290 |
"shasum": ""
|
1291 |
},
|
1292 |
"require": {
|
1296 |
"require-dev": {
|
1297 |
"phpunit/phpunit": "^4.8.35"
|
1298 |
},
|
1299 |
+
"time": "2019-12-30T22:54:17+00:00",
|
1300 |
"type": "library",
|
1301 |
"installation-source": "dist",
|
1302 |
"autoload": {
|
1615 |
},
|
1616 |
{
|
1617 |
"name": "symfony/polyfill-ctype",
|
1618 |
+
"version": "v1.13.1",
|
1619 |
+
"version_normalized": "1.13.1.0",
|
1620 |
"source": {
|
1621 |
"type": "git",
|
1622 |
"url": "https://github.com/symfony/polyfill-ctype.git",
|
1623 |
+
"reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3"
|
1624 |
},
|
1625 |
"dist": {
|
1626 |
"type": "zip",
|
1627 |
+
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
|
1628 |
+
"reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
|
1629 |
"shasum": ""
|
1630 |
},
|
1631 |
"require": {
|
1634 |
"suggest": {
|
1635 |
"ext-ctype": "For best performance"
|
1636 |
},
|
1637 |
+
"time": "2019-11-27T13:56:44+00:00",
|
1638 |
"type": "library",
|
1639 |
"extra": {
|
1640 |
"branch-alias": {
|
1641 |
+
"dev-master": "1.13-dev"
|
1642 |
}
|
1643 |
},
|
1644 |
"installation-source": "dist",
|
1732 |
},
|
1733 |
{
|
1734 |
"name": "twig/twig",
|
1735 |
+
"version": "v1.41.0",
|
1736 |
+
"version_normalized": "1.41.0.0",
|
1737 |
"source": {
|
1738 |
"type": "git",
|
1739 |
"url": "https://github.com/twigphp/Twig.git",
|
1740 |
+
"reference": "575cd5028362da591facde1ef5d7b94553c375c9"
|
1741 |
},
|
1742 |
"dist": {
|
1743 |
"type": "zip",
|
1744 |
+
"url": "https://api.github.com/repos/twigphp/Twig/zipball/575cd5028362da591facde1ef5d7b94553c375c9",
|
1745 |
+
"reference": "575cd5028362da591facde1ef5d7b94553c375c9",
|
1746 |
"shasum": ""
|
1747 |
},
|
1748 |
"require": {
|
1754 |
"symfony/debug": "^2.7",
|
1755 |
"symfony/phpunit-bridge": "^3.4.19|^4.1.8"
|
1756 |
},
|
1757 |
+
"time": "2019-05-14T11:59:08+00:00",
|
1758 |
"type": "library",
|
1759 |
"extra": {
|
1760 |
"branch-alias": {
|
1761 |
+
"dev-master": "1.41-dev"
|
1762 |
}
|
1763 |
},
|
1764 |
"installation-source": "dist",
|
vendor/dhii/output-renderer-interface/src/BlockFactoryInterface.php
CHANGED
@@ -7,21 +7,21 @@ use Dhii\Factory\FactoryInterface;
|
|
7 |
/**
|
8 |
* Something that can create blocks.
|
9 |
*
|
10 |
-
* @since
|
11 |
*/
|
12 |
interface BlockFactoryInterface extends FactoryInterface
|
13 |
{
|
14 |
/**
|
15 |
* The make config key that holds the content of the block.
|
16 |
*
|
17 |
-
* @since
|
18 |
*/
|
19 |
const K_CONTENT = 'content';
|
20 |
|
21 |
/**
|
22 |
* {@inheritdoc}
|
23 |
*
|
24 |
-
* @since
|
25 |
*
|
26 |
* @return BlockInterface The new block
|
27 |
*/
|
7 |
/**
|
8 |
* Something that can create blocks.
|
9 |
*
|
10 |
+
* @since 0.3
|
11 |
*/
|
12 |
interface BlockFactoryInterface extends FactoryInterface
|
13 |
{
|
14 |
/**
|
15 |
* The make config key that holds the content of the block.
|
16 |
*
|
17 |
+
* @since 0.3
|
18 |
*/
|
19 |
const K_CONTENT = 'content';
|
20 |
|
21 |
/**
|
22 |
* {@inheritdoc}
|
23 |
*
|
24 |
+
* @since 0.3
|
25 |
*
|
26 |
* @return BlockInterface The new block
|
27 |
*/
|
vendor/dhii/output-renderer-interface/src/TemplateFactoryInterface.php
CHANGED
@@ -7,21 +7,21 @@ use Dhii\Factory\FactoryInterface;
|
|
7 |
/**
|
8 |
* Something that can create templates.
|
9 |
*
|
10 |
-
* @since
|
11 |
*/
|
12 |
interface TemplateFactoryInterface extends FactoryInterface
|
13 |
{
|
14 |
/**
|
15 |
* The make config key that holds the template, which the new instance will represent.
|
16 |
*
|
17 |
-
* @since
|
18 |
*/
|
19 |
const K_TEMPLATE = 'template';
|
20 |
|
21 |
/**
|
22 |
* {@inheritdoc}
|
23 |
*
|
24 |
-
* @since
|
25 |
*
|
26 |
* @return TemplateInterface The new template.
|
27 |
*/
|
7 |
/**
|
8 |
* Something that can create templates.
|
9 |
*
|
10 |
+
* @since 0.3
|
11 |
*/
|
12 |
interface TemplateFactoryInterface extends FactoryInterface
|
13 |
{
|
14 |
/**
|
15 |
* The make config key that holds the template, which the new instance will represent.
|
16 |
*
|
17 |
+
* @since 0.3
|
18 |
*/
|
19 |
const K_TEMPLATE = 'template';
|
20 |
|
21 |
/**
|
22 |
* {@inheritdoc}
|
23 |
*
|
24 |
+
* @since 0.3
|
25 |
*
|
26 |
* @return TemplateInterface The new template.
|
27 |
*/
|
vendor/erusev/parsedown/Parsedown.php
CHANGED
@@ -17,7 +17,7 @@ class Parsedown
|
|
17 |
{
|
18 |
# ~
|
19 |
|
20 |
-
const version = '1.7.
|
21 |
|
22 |
# ~
|
23 |
|
@@ -1489,22 +1489,41 @@ class Parsedown
|
|
1489 |
}
|
1490 |
}
|
1491 |
|
|
|
|
|
1492 |
if (isset($Element['text']))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1493 |
{
|
1494 |
$markup .= '>';
|
1495 |
|
1496 |
-
if (!isset($Element['nonNestables']))
|
1497 |
{
|
1498 |
$Element['nonNestables'] = array();
|
1499 |
}
|
1500 |
|
1501 |
if (isset($Element['handler']))
|
1502 |
{
|
1503 |
-
$markup .= $this->{$Element['handler']}($
|
|
|
|
|
|
|
|
|
1504 |
}
|
1505 |
else
|
1506 |
{
|
1507 |
-
$markup .=
|
1508 |
}
|
1509 |
|
1510 |
$markup .= '</'.$Element['name'].'>';
|
17 |
{
|
18 |
# ~
|
19 |
|
20 |
+
const version = '1.7.4';
|
21 |
|
22 |
# ~
|
23 |
|
1489 |
}
|
1490 |
}
|
1491 |
|
1492 |
+
$permitRawHtml = false;
|
1493 |
+
|
1494 |
if (isset($Element['text']))
|
1495 |
+
{
|
1496 |
+
$text = $Element['text'];
|
1497 |
+
}
|
1498 |
+
// very strongly consider an alternative if you're writing an
|
1499 |
+
// extension
|
1500 |
+
elseif (isset($Element['rawHtml']))
|
1501 |
+
{
|
1502 |
+
$text = $Element['rawHtml'];
|
1503 |
+
$allowRawHtmlInSafeMode = isset($Element['allowRawHtmlInSafeMode']) && $Element['allowRawHtmlInSafeMode'];
|
1504 |
+
$permitRawHtml = !$this->safeMode || $allowRawHtmlInSafeMode;
|
1505 |
+
}
|
1506 |
+
|
1507 |
+
if (isset($text))
|
1508 |
{
|
1509 |
$markup .= '>';
|
1510 |
|
1511 |
+
if (!isset($Element['nonNestables']))
|
1512 |
{
|
1513 |
$Element['nonNestables'] = array();
|
1514 |
}
|
1515 |
|
1516 |
if (isset($Element['handler']))
|
1517 |
{
|
1518 |
+
$markup .= $this->{$Element['handler']}($text, $Element['nonNestables']);
|
1519 |
+
}
|
1520 |
+
elseif (!$permitRawHtml)
|
1521 |
+
{
|
1522 |
+
$markup .= self::escape($text, true);
|
1523 |
}
|
1524 |
else
|
1525 |
{
|
1526 |
+
$markup .= $text;
|
1527 |
}
|
1528 |
|
1529 |
$markup .= '</'.$Element['name'].'>';
|
vendor/symfony/polyfill-ctype/composer.json
CHANGED
@@ -28,7 +28,7 @@
|
|
28 |
"minimum-stability": "dev",
|
29 |
"extra": {
|
30 |
"branch-alias": {
|
31 |
-
"dev-master": "1.
|
32 |
}
|
33 |
}
|
34 |
}
|
28 |
"minimum-stability": "dev",
|
29 |
"extra": {
|
30 |
"branch-alias": {
|
31 |
+
"dev-master": "1.13-dev"
|
32 |
}
|
33 |
}
|
34 |
}
|
vendor/twig/twig/composer.json
CHANGED
@@ -42,7 +42,7 @@
|
|
42 |
},
|
43 |
"extra": {
|
44 |
"branch-alias": {
|
45 |
-
"dev-master": "1.
|
46 |
}
|
47 |
}
|
48 |
}
|
42 |
},
|
43 |
"extra": {
|
44 |
"branch-alias": {
|
45 |
+
"dev-master": "1.41-dev"
|
46 |
}
|
47 |
}
|
48 |
}
|
vendor/twig/twig/drupal_test.sh
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#!/bin/bash
|
2 |
+
|
3 |
+
set -x
|
4 |
+
set -e
|
5 |
+
|
6 |
+
REPO=`pwd`
|
7 |
+
cd /tmp
|
8 |
+
rm -rf drupal-twig-test
|
9 |
+
composer create-project --no-interaction drupal-composer/drupal-project:8.x-dev drupal-twig-test
|
10 |
+
cd drupal-twig-test
|
11 |
+
(cd vendor/twig && rm -rf twig && ln -sf $REPO twig)
|
12 |
+
echo '$config["system.logging"]["error_level"] = "verbose";' >> web/sites/default/settings.php
|
13 |
+
php ./web/core/scripts/drupal install --no-interaction demo_umami > output
|
14 |
+
perl -p -i -e 's/^([A-Za-z]+)\: (.+)$/export DRUPAL_\1=\2/' output
|
15 |
+
source output
|
16 |
+
|
17 |
+
wget https://get.symfony.com/cli/installer -O - | bash
|
18 |
+
export PATH="$HOME/.symfony/bin:$PATH"
|
19 |
+
symfony server:start -d --no-tls
|
20 |
+
ENDPOINT=`symfony server:status -no-ansi | sed -E 's/^.+ http/http/'`
|
21 |
+
|
22 |
+
curl -OLsS https://get.blackfire.io/blackfire-player.phar
|
23 |
+
chmod +x blackfire-player.phar
|
24 |
+
cat > drupal-tests.bkf <<EOF
|
25 |
+
name "Drupal tests"
|
26 |
+
|
27 |
+
scenario
|
28 |
+
name "homepage"
|
29 |
+
set name "admin"
|
30 |
+
set pass "pass"
|
31 |
+
|
32 |
+
visit url('/')
|
33 |
+
expect status_code() == 200
|
34 |
+
click link('Articles')
|
35 |
+
expect status_code() == 200
|
36 |
+
click link('Dairy-free and delicious milk chocolate')
|
37 |
+
expect body() matches "/Dairy\-free milk chocolate is made in largely the same way as regular chocolate/"
|
38 |
+
expect status_code() == 200
|
39 |
+
click link('Log in')
|
40 |
+
expect status_code() == 200
|
41 |
+
submit button("Log in")
|
42 |
+
param name name
|
43 |
+
param pass pass
|
44 |
+
expect status_code() == 303
|
45 |
+
follow
|
46 |
+
expect status_code() == 200
|
47 |
+
click link('Structure')
|
48 |
+
expect status_code() == 200
|
49 |
+
EOF
|
50 |
+
./blackfire-player.phar run drupal-tests.bkf --endpoint=$ENDPOINT --variable name=$DRUPAL_Username --variable pass=$DRUPAL_Password
|
51 |
+
symfony server:stop
|
vendor/twig/twig/src/Environment.php
CHANGED
@@ -41,10 +41,10 @@ use Twig\TokenParser\TokenParserInterface;
|
|
41 |
*/
|
42 |
class Environment
|
43 |
{
|
44 |
-
const VERSION = '1.
|
45 |
-
const VERSION_ID =
|
46 |
const MAJOR_VERSION = 1;
|
47 |
-
const MINOR_VERSION =
|
48 |
const RELEASE_VERSION = 0;
|
49 |
const EXTRA_VERSION = '';
|
50 |
|
@@ -470,6 +470,7 @@ class Environment
|
|
470 |
$this->cache->load($key);
|
471 |
}
|
472 |
|
|
|
473 |
if (!class_exists($cls, false)) {
|
474 |
$loader = $this->getLoader();
|
475 |
if (!$loader instanceof SourceContextLoaderInterface) {
|
41 |
*/
|
42 |
class Environment
|
43 |
{
|
44 |
+
const VERSION = '1.41.0';
|
45 |
+
const VERSION_ID = 14100;
|
46 |
const MAJOR_VERSION = 1;
|
47 |
+
const MINOR_VERSION = 41;
|
48 |
const RELEASE_VERSION = 0;
|
49 |
const EXTRA_VERSION = '';
|
50 |
|
470 |
$this->cache->load($key);
|
471 |
}
|
472 |
|
473 |
+
$source = null;
|
474 |
if (!class_exists($cls, false)) {
|
475 |
$loader = $this->getLoader();
|
476 |
if (!$loader instanceof SourceContextLoaderInterface) {
|
vendor/twig/twig/src/Error/Error.php
CHANGED
@@ -49,15 +49,9 @@ class Error extends \Exception
|
|
49 |
/**
|
50 |
* Constructor.
|
51 |
*
|
52 |
-
* Set both the line number and the name to false to
|
53 |
-
* disable automatic guessing of the original template name
|
54 |
-
* and line number.
|
55 |
-
*
|
56 |
* Set the line number to -1 to enable its automatic guessing.
|
57 |
* Set the name to null to enable its automatic guessing.
|
58 |
*
|
59 |
-
* By default, automatic guessing is enabled.
|
60 |
-
*
|
61 |
* @param string $message The error message
|
62 |
* @param int $lineno The template line where the error occurred
|
63 |
* @param Source|string|null $source The source context where the error occurred
|
49 |
/**
|
50 |
* Constructor.
|
51 |
*
|
|
|
|
|
|
|
|
|
52 |
* Set the line number to -1 to enable its automatic guessing.
|
53 |
* Set the name to null to enable its automatic guessing.
|
54 |
*
|
|
|
|
|
55 |
* @param string $message The error message
|
56 |
* @param int $lineno The template line where the error occurred
|
57 |
* @param Source|string|null $source The source context where the error occurred
|
vendor/twig/twig/src/ExpressionParser.php
CHANGED
@@ -14,6 +14,7 @@ namespace Twig;
|
|
14 |
|
15 |
use Twig\Error\SyntaxError;
|
16 |
use Twig\Node\Expression\ArrayExpression;
|
|
|
17 |
use Twig\Node\Expression\AssignNameExpression;
|
18 |
use Twig\Node\Expression\Binary\ConcatBinary;
|
19 |
use Twig\Node\Expression\BlockReferenceExpression;
|
@@ -68,8 +69,12 @@ class ExpressionParser
|
|
68 |
}
|
69 |
}
|
70 |
|
71 |
-
public function parseExpression($precedence = 0)
|
72 |
{
|
|
|
|
|
|
|
|
|
73 |
$expr = $this->getPrimary();
|
74 |
$token = $this->parser->getCurrentToken();
|
75 |
while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) {
|
@@ -98,6 +103,64 @@ class ExpressionParser
|
|
98 |
return $expr;
|
99 |
}
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
protected function getPrimary()
|
102 |
{
|
103 |
$token = $this->parser->getCurrentToken();
|
@@ -499,7 +562,7 @@ class ExpressionParser
|
|
499 |
if (!$this->parser->getStream()->test(Token::PUNCTUATION_TYPE, '(')) {
|
500 |
$arguments = new Node();
|
501 |
} else {
|
502 |
-
$arguments = $this->parseArguments(true);
|
503 |
}
|
504 |
|
505 |
$class = $this->getFilterNodeClass($name->getAttribute('value'), $token->getLine());
|
@@ -526,7 +589,7 @@ class ExpressionParser
|
|
526 |
*
|
527 |
* @throws SyntaxError
|
528 |
*/
|
529 |
-
public function parseArguments($namedArguments = false, $definition = false)
|
530 |
{
|
531 |
$args = [];
|
532 |
$stream = $this->parser->getStream();
|
@@ -541,7 +604,7 @@ class ExpressionParser
|
|
541 |
$token = $stream->expect(Token::NAME_TYPE, null, 'An argument must be a name');
|
542 |
$value = new NameExpression($token->getValue(), $this->parser->getCurrentToken()->getLine());
|
543 |
} else {
|
544 |
-
$value = $this->parseExpression();
|
545 |
}
|
546 |
|
547 |
$name = null;
|
@@ -558,7 +621,7 @@ class ExpressionParser
|
|
558 |
throw new SyntaxError(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $stream->getSourceContext());
|
559 |
}
|
560 |
} else {
|
561 |
-
$value = $this->parseExpression();
|
562 |
}
|
563 |
}
|
564 |
|
@@ -627,7 +690,7 @@ class ExpressionParser
|
|
627 |
$class = $this->getTestNodeClass($test);
|
628 |
$arguments = null;
|
629 |
if ($stream->test(Token::PUNCTUATION_TYPE, '(')) {
|
630 |
-
$arguments = $this->
|
631 |
}
|
632 |
|
633 |
return new $class($node, $name, $arguments, $this->parser->getCurrentToken()->getLine());
|
14 |
|
15 |
use Twig\Error\SyntaxError;
|
16 |
use Twig\Node\Expression\ArrayExpression;
|
17 |
+
use Twig\Node\Expression\ArrowFunctionExpression;
|
18 |
use Twig\Node\Expression\AssignNameExpression;
|
19 |
use Twig\Node\Expression\Binary\ConcatBinary;
|
20 |
use Twig\Node\Expression\BlockReferenceExpression;
|
69 |
}
|
70 |
}
|
71 |
|
72 |
+
public function parseExpression($precedence = 0, $allowArrow = false)
|
73 |
{
|
74 |
+
if ($allowArrow && $arrow = $this->parseArrow()) {
|
75 |
+
return $arrow;
|
76 |
+
}
|
77 |
+
|
78 |
$expr = $this->getPrimary();
|
79 |
$token = $this->parser->getCurrentToken();
|
80 |
while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) {
|
103 |
return $expr;
|
104 |
}
|
105 |
|
106 |
+
/**
|
107 |
+
* @return ArrowFunctionExpression|null
|
108 |
+
*/
|
109 |
+
private function parseArrow()
|
110 |
+
{
|
111 |
+
$stream = $this->parser->getStream();
|
112 |
+
|
113 |
+
// short array syntax (one argument, no parentheses)?
|
114 |
+
if ($stream->look(1)->test(Token::ARROW_TYPE)) {
|
115 |
+
$line = $stream->getCurrent()->getLine();
|
116 |
+
$token = $stream->expect(Token::NAME_TYPE);
|
117 |
+
$names = [new AssignNameExpression($token->getValue(), $token->getLine())];
|
118 |
+
$stream->expect(Token::ARROW_TYPE);
|
119 |
+
|
120 |
+
return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line);
|
121 |
+
}
|
122 |
+
|
123 |
+
// first, determine if we are parsing an arrow function by finding => (long form)
|
124 |
+
$i = 0;
|
125 |
+
if (!$stream->look($i)->test(Token::PUNCTUATION_TYPE, '(')) {
|
126 |
+
return null;
|
127 |
+
}
|
128 |
+
++$i;
|
129 |
+
while (true) {
|
130 |
+
// variable name
|
131 |
+
++$i;
|
132 |
+
if (!$stream->look($i)->test(Token::PUNCTUATION_TYPE, ',')) {
|
133 |
+
break;
|
134 |
+
}
|
135 |
+
++$i;
|
136 |
+
}
|
137 |
+
if (!$stream->look($i)->test(Token::PUNCTUATION_TYPE, ')')) {
|
138 |
+
return null;
|
139 |
+
}
|
140 |
+
++$i;
|
141 |
+
if (!$stream->look($i)->test(Token::ARROW_TYPE)) {
|
142 |
+
return null;
|
143 |
+
}
|
144 |
+
|
145 |
+
// yes, let's parse it properly
|
146 |
+
$token = $stream->expect(Token::PUNCTUATION_TYPE, '(');
|
147 |
+
$line = $token->getLine();
|
148 |
+
|
149 |
+
$names = [];
|
150 |
+
while (true) {
|
151 |
+
$token = $stream->expect(Token::NAME_TYPE);
|
152 |
+
$names[] = new AssignNameExpression($token->getValue(), $token->getLine());
|
153 |
+
|
154 |
+
if (!$stream->nextIf(Token::PUNCTUATION_TYPE, ',')) {
|
155 |
+
break;
|
156 |
+
}
|
157 |
+
}
|
158 |
+
$stream->expect(Token::PUNCTUATION_TYPE, ')');
|
159 |
+
$stream->expect(Token::ARROW_TYPE);
|
160 |
+
|
161 |
+
return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line);
|
162 |
+
}
|
163 |
+
|
164 |
protected function getPrimary()
|
165 |
{
|
166 |
$token = $this->parser->getCurrentToken();
|
562 |
if (!$this->parser->getStream()->test(Token::PUNCTUATION_TYPE, '(')) {
|
563 |
$arguments = new Node();
|
564 |
} else {
|
565 |
+
$arguments = $this->parseArguments(true, false, true);
|
566 |
}
|
567 |
|
568 |
$class = $this->getFilterNodeClass($name->getAttribute('value'), $token->getLine());
|
589 |
*
|
590 |
* @throws SyntaxError
|
591 |
*/
|
592 |
+
public function parseArguments($namedArguments = false, $definition = false, $allowArrow = false)
|
593 |
{
|
594 |
$args = [];
|
595 |
$stream = $this->parser->getStream();
|
604 |
$token = $stream->expect(Token::NAME_TYPE, null, 'An argument must be a name');
|
605 |
$value = new NameExpression($token->getValue(), $this->parser->getCurrentToken()->getLine());
|
606 |
} else {
|
607 |
+
$value = $this->parseExpression(0, $allowArrow);
|
608 |
}
|
609 |
|
610 |
$name = null;
|
621 |
throw new SyntaxError(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $stream->getSourceContext());
|
622 |
}
|
623 |
} else {
|
624 |
+
$value = $this->parseExpression(0, $allowArrow);
|
625 |
}
|
626 |
}
|
627 |
|
690 |
$class = $this->getTestNodeClass($test);
|
691 |
$arguments = null;
|
692 |
if ($stream->test(Token::PUNCTUATION_TYPE, '(')) {
|
693 |
+
$arguments = $this->parseArguments(true);
|
694 |
}
|
695 |
|
696 |
return new $class($node, $name, $arguments, $this->parser->getCurrentToken()->getLine());
|
vendor/twig/twig/src/Extension/CoreExtension.php
CHANGED
@@ -11,6 +11,7 @@
|
|
11 |
|
12 |
namespace Twig\Extension {
|
13 |
use Twig\ExpressionParser;
|
|
|
14 |
use Twig\TokenParser\BlockTokenParser;
|
15 |
use Twig\TokenParser\DeprecatedTokenParser;
|
16 |
use Twig\TokenParser\DoTokenParser;
|
@@ -139,6 +140,7 @@ class CoreExtension extends AbstractExtension
|
|
139 |
public function getTokenParsers()
|
140 |
{
|
141 |
return [
|
|
|
142 |
new ForTokenParser(),
|
143 |
new IfTokenParser(),
|
144 |
new ExtendsTokenParser(),
|
@@ -192,6 +194,9 @@ class CoreExtension extends AbstractExtension
|
|
192 |
new TwigFilter('sort', 'twig_sort_filter'),
|
193 |
new TwigFilter('merge', 'twig_array_merge'),
|
194 |
new TwigFilter('batch', 'twig_array_batch'),
|
|
|
|
|
|
|
195 |
|
196 |
// string/array filters
|
197 |
new TwigFilter('reverse', 'twig_reverse_filter', ['needs_environment' => true]),
|
@@ -935,6 +940,10 @@ function twig_sort_filter($array)
|
|
935 |
*/
|
936 |
function twig_in_filter($value, $compare)
|
937 |
{
|
|
|
|
|
|
|
|
|
938 |
if (\is_array($compare)) {
|
939 |
return \in_array($value, $compare, \is_object($value) || \is_resource($value));
|
940 |
} elseif (\is_string($compare) && (\is_string($value) || \is_int($value) || \is_float($value))) {
|
@@ -1658,7 +1667,7 @@ function twig_constant_is_defined($constant, $object = null)
|
|
1658 |
function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
|
1659 |
{
|
1660 |
if (!twig_test_iterable($items)) {
|
1661 |
-
throw new RuntimeError(sprintf('The "batch" filter expects an array or "Traversable", got "%s".', \is_object($
|
1662 |
}
|
1663 |
|
1664 |
$size = ceil($size);
|
@@ -1676,4 +1685,40 @@ function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
|
|
1676 |
|
1677 |
return $result;
|
1678 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1679 |
}
|
11 |
|
12 |
namespace Twig\Extension {
|
13 |
use Twig\ExpressionParser;
|
14 |
+
use Twig\TokenParser\ApplyTokenParser;
|
15 |
use Twig\TokenParser\BlockTokenParser;
|
16 |
use Twig\TokenParser\DeprecatedTokenParser;
|
17 |
use Twig\TokenParser\DoTokenParser;
|
140 |
public function getTokenParsers()
|
141 |
{
|
142 |
return [
|
143 |
+
new ApplyTokenParser(),
|
144 |
new ForTokenParser(),
|
145 |
new IfTokenParser(),
|
146 |
new ExtendsTokenParser(),
|
194 |
new TwigFilter('sort', 'twig_sort_filter'),
|
195 |
new TwigFilter('merge', 'twig_array_merge'),
|
196 |
new TwigFilter('batch', 'twig_array_batch'),
|
197 |
+
new TwigFilter('filter', 'twig_array_filter'),
|
198 |
+
new TwigFilter('map', 'twig_array_map'),
|
199 |
+
new TwigFilter('reduce', 'twig_array_reduce'),
|
200 |
|
201 |
// string/array filters
|
202 |
new TwigFilter('reverse', 'twig_reverse_filter', ['needs_environment' => true]),
|
940 |
*/
|
941 |
function twig_in_filter($value, $compare)
|
942 |
{
|
943 |
+
if ($value instanceof Markup) {
|
944 |
+
$value = (string) $value;
|
945 |
+
}
|
946 |
+
|
947 |
if (\is_array($compare)) {
|
948 |
return \in_array($value, $compare, \is_object($value) || \is_resource($value));
|
949 |
} elseif (\is_string($compare) && (\is_string($value) || \is_int($value) || \is_float($value))) {
|
1667 |
function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
|
1668 |
{
|
1669 |
if (!twig_test_iterable($items)) {
|
1670 |
+
throw new RuntimeError(sprintf('The "batch" filter expects an array or "Traversable", got "%s".', \is_object($items) ? \get_class($items) : \gettype($items)));
|
1671 |
}
|
1672 |
|
1673 |
$size = ceil($size);
|
1685 |
|
1686 |
return $result;
|
1687 |
}
|
1688 |
+
|
1689 |
+
function twig_array_filter($array, $arrow)
|
1690 |
+
{
|
1691 |
+
if (\is_array($array)) {
|
1692 |
+
if (\PHP_VERSION_ID >= 50600) {
|
1693 |
+
return array_filter($array, $arrow, \ARRAY_FILTER_USE_BOTH);
|
1694 |
+
}
|
1695 |
+
|
1696 |
+
return array_filter($array, $arrow);
|
1697 |
+
}
|
1698 |
+
|
1699 |
+
while ($array instanceof \IteratorAggregate) {
|
1700 |
+
$array = $array->getIterator();
|
1701 |
+
}
|
1702 |
+
|
1703 |
+
return new \CallbackFilterIterator($array, $arrow);
|
1704 |
+
}
|
1705 |
+
|
1706 |
+
function twig_array_map($array, $arrow)
|
1707 |
+
{
|
1708 |
+
$r = [];
|
1709 |
+
foreach ($array as $k => $v) {
|
1710 |
+
$r[$k] = $arrow($v, $k);
|
1711 |
+
}
|
1712 |
+
|
1713 |
+
return $r;
|
1714 |
+
}
|
1715 |
+
|
1716 |
+
function twig_array_reduce($array, $arrow, $initial = null)
|
1717 |
+
{
|
1718 |
+
if (!\is_array($array)) {
|
1719 |
+
$array = iterator_to_array($array);
|
1720 |
+
}
|
1721 |
+
|
1722 |
+
return array_reduce($array, $arrow, $initial);
|
1723 |
+
}
|
1724 |
}
|
vendor/twig/twig/src/Extension/DebugExtension.php
CHANGED
@@ -54,7 +54,7 @@ function twig_var_dump(Environment $env, $context, array $vars = [])
|
|
54 |
return;
|
55 |
}
|
56 |
|
57 |
-
ob_start();
|
58 |
|
59 |
if (!$vars) {
|
60 |
$vars = [];
|
54 |
return;
|
55 |
}
|
56 |
|
57 |
+
ob_start(function () { return ''; });
|
58 |
|
59 |
if (!$vars) {
|
60 |
$vars = [];
|
vendor/twig/twig/src/Extension/StringLoaderExtension.php
CHANGED
@@ -35,7 +35,7 @@ class_alias('Twig\Extension\StringLoaderExtension', 'Twig_Extension_StringLoader
|
|
35 |
|
36 |
namespace {
|
37 |
use Twig\Environment;
|
38 |
-
use Twig\
|
39 |
|
40 |
/**
|
41 |
* Loads a template from a string.
|
@@ -43,9 +43,9 @@ use Twig\Template;
|
|
43 |
* {{ include(template_from_string("Hello {{ name }}")) }}
|
44 |
*
|
45 |
* @param string $template A template as a string or object implementing __toString()
|
46 |
-
* @param string $name
|
47 |
*
|
48 |
-
* @return
|
49 |
*/
|
50 |
function twig_template_from_string(Environment $env, $template, $name = null)
|
51 |
{
|
35 |
|
36 |
namespace {
|
37 |
use Twig\Environment;
|
38 |
+
use Twig\TemplateWrapper;
|
39 |
|
40 |
/**
|
41 |
* Loads a template from a string.
|
43 |
* {{ include(template_from_string("Hello {{ name }}")) }}
|
44 |
*
|
45 |
* @param string $template A template as a string or object implementing __toString()
|
46 |
+
* @param string $name An optional name of the template to be used in error messages
|
47 |
*
|
48 |
+
* @return TemplateWrapper
|
49 |
*/
|
50 |
function twig_template_from_string(Environment $env, $template, $name = null)
|
51 |
{
|
vendor/twig/twig/src/Lexer.php
CHANGED
@@ -67,16 +67,17 @@ class Lexer implements \Twig_LexerInterface
|
|
67 |
'interpolation' => ['#{', '}'],
|
68 |
], $options);
|
69 |
|
|
|
70 |
$this->regexes = [
|
71 |
// }}
|
72 |
'lex_var' => '{
|
73 |
\s*
|
74 |
(?:'.
|
75 |
-
preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1]).'\s*'. // -}}\s*
|
76 |
'|'.
|
77 |
-
preg_quote($this->options['whitespace_line_trim'].$this->options['tag_variable'][1]).'['.$this->options['whitespace_line_chars'].']*'. // ~}}[ \t\0\x0B]*
|
78 |
'|'.
|
79 |
-
preg_quote($this->options['tag_variable'][1]). // }}
|
80 |
')
|
81 |
}Ax',
|
82 |
|
@@ -84,17 +85,17 @@ class Lexer implements \Twig_LexerInterface
|
|
84 |
'lex_block' => '{
|
85 |
\s*
|
86 |
(?:'.
|
87 |
-
preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1]).'\s*\n?'. // -%}\s*\n?
|
88 |
'|'.
|
89 |
-
preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1]).'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]*
|
90 |
'|'.
|
91 |
-
preg_quote($this->options['tag_block'][1]).'\n?'. // %}\n?
|
92 |
')
|
93 |
}Ax',
|
94 |
|
95 |
// {% endverbatim %}
|
96 |
'lex_raw_data' => '{'.
|
97 |
-
preg_quote($this->options['tag_block'][0]). // {%
|
98 |
'('.
|
99 |
$this->options['whitespace_trim']. // -
|
100 |
'|'.
|
@@ -103,11 +104,11 @@ class Lexer implements \Twig_LexerInterface
|
|
103 |
'(?:end%s)'. // endraw or endverbatim
|
104 |
'\s*'.
|
105 |
'(?:'.
|
106 |
-
preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1]).'\s*'. // -%}
|
107 |
'|'.
|
108 |
-
preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1]).'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]*
|
109 |
'|'.
|
110 |
-
preg_quote($this->options['tag_block'][1]). // %}
|
111 |
')
|
112 |
}sx',
|
113 |
|
@@ -130,32 +131,32 @@ class Lexer implements \Twig_LexerInterface
|
|
130 |
(raw|verbatim)
|
131 |
\s*
|
132 |
(?:'.
|
133 |
-
preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1]).'\s*'. // -%}\s*
|
134 |
'|'.
|
135 |
-
preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1]).'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]*
|
136 |
'|'.
|
137 |
-
preg_quote($this->options['tag_block'][1]). // %}
|
138 |
')
|
139 |
}Asx',
|
140 |
|
141 |
-
'lex_block_line' => '{\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1]).'}As',
|
142 |
|
143 |
// {{ or {% or {#
|
144 |
'lex_tokens_start' => '{
|
145 |
('.
|
146 |
-
preg_quote($this->options['tag_variable'][0]). // {{
|
147 |
'|'.
|
148 |
-
preg_quote($this->options['tag_block'][0]). // {%
|
149 |
'|'.
|
150 |
preg_quote($this->options['tag_comment'][0], '#'). // {#
|
151 |
')('.
|
152 |
-
preg_quote($this->options['whitespace_trim']). // -
|
153 |
'|'.
|
154 |
-
preg_quote($this->options['whitespace_line_trim']). // ~
|
155 |
')?
|
156 |
}sx',
|
157 |
-
'interpolation_start' => '{'.preg_quote($this->options['interpolation'][0]).'\s*}A',
|
158 |
-
'interpolation_end' => '{\s*'.preg_quote($this->options['interpolation'][1]).'}A',
|
159 |
];
|
160 |
}
|
161 |
|
@@ -261,7 +262,7 @@ class Lexer implements \Twig_LexerInterface
|
|
261 |
if ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0]) {
|
262 |
// whitespace_trim detected ({%-, {{- or {#-)
|
263 |
$text = rtrim($text);
|
264 |
-
}
|
265 |
// whitespace_line_trim detected ({%~, {{~ or {#~)
|
266 |
// don't trim \r and \n
|
267 |
$text = rtrim($text, " \t\0\x0B");
|
@@ -277,11 +278,11 @@ class Lexer implements \Twig_LexerInterface
|
|
277 |
|
278 |
case $this->options['tag_block'][0]:
|
279 |
// raw data?
|
280 |
-
if (preg_match($this->regexes['lex_block_raw'], $this->code, $match,
|
281 |
$this->moveCursor($match[0]);
|
282 |
$this->lexRawData($match[1]);
|
283 |
// {% line \d+ %}
|
284 |
-
} elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match,
|
285 |
$this->moveCursor($match[0]);
|
286 |
$this->lineno = (int) $match[1];
|
287 |
} else {
|
@@ -301,7 +302,7 @@ class Lexer implements \Twig_LexerInterface
|
|
301 |
|
302 |
protected function lexBlock()
|
303 |
{
|
304 |
-
if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match,
|
305 |
$this->pushToken(Token::BLOCK_END_TYPE);
|
306 |
$this->moveCursor($match[0]);
|
307 |
$this->popState();
|
@@ -312,7 +313,7 @@ class Lexer implements \Twig_LexerInterface
|
|
312 |
|
313 |
protected function lexVar()
|
314 |
{
|
315 |
-
if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match,
|
316 |
$this->pushToken(Token::VAR_END_TYPE);
|
317 |
$this->moveCursor($match[0]);
|
318 |
$this->popState();
|
@@ -324,7 +325,7 @@ class Lexer implements \Twig_LexerInterface
|
|
324 |
protected function lexExpression()
|
325 |
{
|
326 |
// whitespace
|
327 |
-
if (preg_match('/\s+/A', $this->code, $match,
|
328 |
$this->moveCursor($match[0]);
|
329 |
|
330 |
if ($this->cursor >= $this->end) {
|
@@ -332,18 +333,23 @@ class Lexer implements \Twig_LexerInterface
|
|
332 |
}
|
333 |
}
|
334 |
|
|
|
|
|
|
|
|
|
|
|
335 |
// operators
|
336 |
-
|
337 |
$this->pushToken(Token::OPERATOR_TYPE, preg_replace('/\s+/', ' ', $match[0]));
|
338 |
$this->moveCursor($match[0]);
|
339 |
}
|
340 |
// names
|
341 |
-
elseif (preg_match(self::REGEX_NAME, $this->code, $match,
|
342 |
$this->pushToken(Token::NAME_TYPE, $match[0]);
|
343 |
$this->moveCursor($match[0]);
|
344 |
}
|
345 |
// numbers
|
346 |
-
elseif (preg_match(self::REGEX_NUMBER, $this->code, $match,
|
347 |
$number = (float) $match[0]; // floats
|
348 |
if (ctype_digit($match[0]) && $number <= PHP_INT_MAX) {
|
349 |
$number = (int) $match[0]; // integers lower than the maximum
|
@@ -373,12 +379,12 @@ class Lexer implements \Twig_LexerInterface
|
|
373 |
++$this->cursor;
|
374 |
}
|
375 |
// strings
|
376 |
-
elseif (preg_match(self::REGEX_STRING, $this->code, $match,
|
377 |
$this->pushToken(Token::STRING_TYPE, stripcslashes(substr($match[0], 1, -1)));
|
378 |
$this->moveCursor($match[0]);
|
379 |
}
|
380 |
// opening double quoted string
|
381 |
-
elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match,
|
382 |
$this->brackets[] = ['"', $this->lineno];
|
383 |
$this->pushState(self::STATE_STRING);
|
384 |
$this->moveCursor($match[0]);
|
@@ -428,15 +434,15 @@ class Lexer implements \Twig_LexerInterface
|
|
428 |
|
429 |
protected function lexString()
|
430 |
{
|
431 |
-
if (preg_match($this->regexes['interpolation_start'], $this->code, $match,
|
432 |
$this->brackets[] = [$this->options['interpolation'][0], $this->lineno];
|
433 |
$this->pushToken(Token::INTERPOLATION_START_TYPE);
|
434 |
$this->moveCursor($match[0]);
|
435 |
$this->pushState(self::STATE_INTERPOLATION);
|
436 |
-
} elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match,
|
437 |
$this->pushToken(Token::STRING_TYPE, stripcslashes($match[0]));
|
438 |
$this->moveCursor($match[0]);
|
439 |
-
} elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match,
|
440 |
list($expect, $lineno) = array_pop($this->brackets);
|
441 |
if ('"' != $this->code[$this->cursor]) {
|
442 |
throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source);
|
@@ -453,7 +459,7 @@ class Lexer implements \Twig_LexerInterface
|
|
453 |
protected function lexInterpolation()
|
454 |
{
|
455 |
$bracket = end($this->brackets);
|
456 |
-
if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match,
|
457 |
array_pop($this->brackets);
|
458 |
$this->pushToken(Token::INTERPOLATION_END_TYPE);
|
459 |
$this->moveCursor($match[0]);
|
67 |
'interpolation' => ['#{', '}'],
|
68 |
], $options);
|
69 |
|
70 |
+
// when PHP 7.3 is the min version, we will be able to remove the '#' part in preg_quote as it's part of the default
|
71 |
$this->regexes = [
|
72 |
// }}
|
73 |
'lex_var' => '{
|
74 |
\s*
|
75 |
(?:'.
|
76 |
+
preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1], '#').'\s*'. // -}}\s*
|
77 |
'|'.
|
78 |
+
preg_quote($this->options['whitespace_line_trim'].$this->options['tag_variable'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~}}[ \t\0\x0B]*
|
79 |
'|'.
|
80 |
+
preg_quote($this->options['tag_variable'][1], '#'). // }}
|
81 |
')
|
82 |
}Ax',
|
83 |
|
85 |
'lex_block' => '{
|
86 |
\s*
|
87 |
(?:'.
|
88 |
+
preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*\n?'. // -%}\s*\n?
|
89 |
'|'.
|
90 |
+
preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]*
|
91 |
'|'.
|
92 |
+
preg_quote($this->options['tag_block'][1], '#').'\n?'. // %}\n?
|
93 |
')
|
94 |
}Ax',
|
95 |
|
96 |
// {% endverbatim %}
|
97 |
'lex_raw_data' => '{'.
|
98 |
+
preg_quote($this->options['tag_block'][0], '#'). // {%
|
99 |
'('.
|
100 |
$this->options['whitespace_trim']. // -
|
101 |
'|'.
|
104 |
'(?:end%s)'. // endraw or endverbatim
|
105 |
'\s*'.
|
106 |
'(?:'.
|
107 |
+
preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*'. // -%}
|
108 |
'|'.
|
109 |
+
preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]*
|
110 |
'|'.
|
111 |
+
preg_quote($this->options['tag_block'][1], '#'). // %}
|
112 |
')
|
113 |
}sx',
|
114 |
|
131 |
(raw|verbatim)
|
132 |
\s*
|
133 |
(?:'.
|
134 |
+
preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*'. // -%}\s*
|
135 |
'|'.
|
136 |
+
preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]*
|
137 |
'|'.
|
138 |
+
preg_quote($this->options['tag_block'][1], '#'). // %}
|
139 |
')
|
140 |
}Asx',
|
141 |
|
142 |
+
'lex_block_line' => '{\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1], '#').'}As',
|
143 |
|
144 |
// {{ or {% or {#
|
145 |
'lex_tokens_start' => '{
|
146 |
('.
|
147 |
+
preg_quote($this->options['tag_variable'][0], '#'). // {{
|
148 |
'|'.
|
149 |
+
preg_quote($this->options['tag_block'][0], '#'). // {%
|
150 |
'|'.
|
151 |
preg_quote($this->options['tag_comment'][0], '#'). // {#
|
152 |
')('.
|
153 |
+
preg_quote($this->options['whitespace_trim'], '#'). // -
|
154 |
'|'.
|
155 |
+
preg_quote($this->options['whitespace_line_trim'], '#'). // ~
|
156 |
')?
|
157 |
}sx',
|
158 |
+
'interpolation_start' => '{'.preg_quote($this->options['interpolation'][0], '#').'\s*}A',
|
159 |
+
'interpolation_end' => '{\s*'.preg_quote($this->options['interpolation'][1], '#').'}A',
|
160 |
];
|
161 |
}
|
162 |
|
262 |
if ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0]) {
|
263 |
// whitespace_trim detected ({%-, {{- or {#-)
|
264 |
$text = rtrim($text);
|
265 |
+
} elseif ($this->options['whitespace_line_trim'] === $this->positions[2][$this->position][0]) {
|
266 |
// whitespace_line_trim detected ({%~, {{~ or {#~)
|
267 |
// don't trim \r and \n
|
268 |
$text = rtrim($text, " \t\0\x0B");
|
278 |
|
279 |
case $this->options['tag_block'][0]:
|
280 |
// raw data?
|
281 |
+
if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, 0, $this->cursor)) {
|
282 |
$this->moveCursor($match[0]);
|
283 |
$this->lexRawData($match[1]);
|
284 |
// {% line \d+ %}
|
285 |
+
} elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, 0, $this->cursor)) {
|
286 |
$this->moveCursor($match[0]);
|
287 |
$this->lineno = (int) $match[1];
|
288 |
} else {
|
302 |
|
303 |
protected function lexBlock()
|
304 |
{
|
305 |
+
if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, 0, $this->cursor)) {
|
306 |
$this->pushToken(Token::BLOCK_END_TYPE);
|
307 |
$this->moveCursor($match[0]);
|
308 |
$this->popState();
|
313 |
|
314 |
protected function lexVar()
|
315 |
{
|
316 |
+
if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, 0, $this->cursor)) {
|
317 |
$this->pushToken(Token::VAR_END_TYPE);
|
318 |
$this->moveCursor($match[0]);
|
319 |
$this->popState();
|
325 |
protected function lexExpression()
|
326 |
{
|
327 |
// whitespace
|
328 |
+
if (preg_match('/\s+/A', $this->code, $match, 0, $this->cursor)) {
|
329 |
$this->moveCursor($match[0]);
|
330 |
|
331 |
if ($this->cursor >= $this->end) {
|
333 |
}
|
334 |
}
|
335 |
|
336 |
+
// arrow function
|
337 |
+
if ('=' === $this->code[$this->cursor] && '>' === $this->code[$this->cursor + 1]) {
|
338 |
+
$this->pushToken(Token::ARROW_TYPE, '=>');
|
339 |
+
$this->moveCursor('=>');
|
340 |
+
}
|
341 |
// operators
|
342 |
+
elseif (preg_match($this->regexes['operator'], $this->code, $match, 0, $this->cursor)) {
|
343 |
$this->pushToken(Token::OPERATOR_TYPE, preg_replace('/\s+/', ' ', $match[0]));
|
344 |
$this->moveCursor($match[0]);
|
345 |
}
|
346 |
// names
|
347 |
+
elseif (preg_match(self::REGEX_NAME, $this->code, $match, 0, $this->cursor)) {
|
348 |
$this->pushToken(Token::NAME_TYPE, $match[0]);
|
349 |
$this->moveCursor($match[0]);
|
350 |
}
|
351 |
// numbers
|
352 |
+
elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, 0, $this->cursor)) {
|
353 |
$number = (float) $match[0]; // floats
|
354 |
if (ctype_digit($match[0]) && $number <= PHP_INT_MAX) {
|
355 |
$number = (int) $match[0]; // integers lower than the maximum
|
379 |
++$this->cursor;
|
380 |
}
|
381 |
// strings
|
382 |
+
elseif (preg_match(self::REGEX_STRING, $this->code, $match, 0, $this->cursor)) {
|
383 |
$this->pushToken(Token::STRING_TYPE, stripcslashes(substr($match[0], 1, -1)));
|
384 |
$this->moveCursor($match[0]);
|
385 |
}
|
386 |
// opening double quoted string
|
387 |
+
elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) {
|
388 |
$this->brackets[] = ['"', $this->lineno];
|
389 |
$this->pushState(self::STATE_STRING);
|
390 |
$this->moveCursor($match[0]);
|
434 |
|
435 |
protected function lexString()
|
436 |
{
|
437 |
+
if (preg_match($this->regexes['interpolation_start'], $this->code, $match, 0, $this->cursor)) {
|
438 |
$this->brackets[] = [$this->options['interpolation'][0], $this->lineno];
|
439 |
$this->pushToken(Token::INTERPOLATION_START_TYPE);
|
440 |
$this->moveCursor($match[0]);
|
441 |
$this->pushState(self::STATE_INTERPOLATION);
|
442 |
+
} elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, 0, $this->cursor) && \strlen($match[0]) > 0) {
|
443 |
$this->pushToken(Token::STRING_TYPE, stripcslashes($match[0]));
|
444 |
$this->moveCursor($match[0]);
|
445 |
+
} elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) {
|
446 |
list($expect, $lineno) = array_pop($this->brackets);
|
447 |
if ('"' != $this->code[$this->cursor]) {
|
448 |
throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source);
|
459 |
protected function lexInterpolation()
|
460 |
{
|
461 |
$bracket = end($this->brackets);
|
462 |
+
if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, 0, $this->cursor)) {
|
463 |
array_pop($this->brackets);
|
464 |
$this->pushToken(Token::INTERPOLATION_END_TYPE);
|
465 |
$this->moveCursor($match[0]);
|
vendor/twig/twig/src/Loader/FilesystemLoader.php
CHANGED
@@ -140,19 +140,27 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source
|
|
140 |
{
|
141 |
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED);
|
142 |
|
143 |
-
|
|
|
|
|
|
|
|
|
144 |
}
|
145 |
|
146 |
public function getSourceContext($name)
|
147 |
{
|
148 |
-
$path = $this->findTemplate($name)
|
|
|
|
|
149 |
|
150 |
return new Source(file_get_contents($path), $name, $path);
|
151 |
}
|
152 |
|
153 |
public function getCacheKey($name)
|
154 |
{
|
155 |
-
$path = $this->findTemplate($name)
|
|
|
|
|
156 |
$len = \strlen($this->rootPath);
|
157 |
if (0 === strncmp($this->rootPath, $path, $len)) {
|
158 |
return substr($path, $len);
|
@@ -170,7 +178,7 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source
|
|
170 |
}
|
171 |
|
172 |
try {
|
173 |
-
return
|
174 |
} catch (LoaderError $e) {
|
175 |
@trigger_error(sprintf('In %s::findTemplate(), you must accept a second argument that when set to "false" returns "false" instead of throwing an exception. Not supporting this argument is deprecated since version 1.27.', \get_class($this)), E_USER_DEPRECATED);
|
176 |
|
@@ -180,9 +188,22 @@ class FilesystemLoader implements LoaderInterface, ExistsLoaderInterface, Source
|
|
180 |
|
181 |
public function isFresh($name, $time)
|
182 |
{
|
183 |
-
|
|
|
|
|
|
|
|
|
|
|
184 |
}
|
185 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
protected function findTemplate($name)
|
187 |
{
|
188 |
$throw = \func_num_args() > 1 ? func_get_arg(1) : true;
|
140 |
{
|
141 |
@trigger_error(sprintf('Calling "getSource" on "%s" is deprecated since 1.27. Use getSourceContext() instead.', \get_class($this)), E_USER_DEPRECATED);
|
142 |
|
143 |
+
if (null === ($path = $this->findTemplate($name)) || false === $path) {
|
144 |
+
return '';
|
145 |
+
}
|
146 |
+
|
147 |
+
return file_get_contents($path);
|
148 |
}
|
149 |
|
150 |
public function getSourceContext($name)
|
151 |
{
|
152 |
+
if (null === ($path = $this->findTemplate($name)) || false === $path) {
|
153 |
+
return new Source('', $name, '');
|
154 |
+
}
|
155 |
|
156 |
return new Source(file_get_contents($path), $name, $path);
|
157 |
}
|
158 |
|
159 |
public function getCacheKey($name)
|
160 |
{
|
161 |
+
if (null === ($path = $this->findTemplate($name)) || false === $path) {
|
162 |
+
return '';
|
163 |
+
}
|
164 |
$len = \strlen($this->rootPath);
|
165 |
if (0 === strncmp($this->rootPath, $path, $len)) {
|
166 |
return substr($path, $len);
|
178 |
}
|
179 |
|
180 |
try {
|
181 |
+
return null !== ($path = $this->findTemplate($name, false)) && false !== $path;
|
182 |
} catch (LoaderError $e) {
|
183 |
@trigger_error(sprintf('In %s::findTemplate(), you must accept a second argument that when set to "false" returns "false" instead of throwing an exception. Not supporting this argument is deprecated since version 1.27.', \get_class($this)), E_USER_DEPRECATED);
|
184 |
|
188 |
|
189 |
public function isFresh($name, $time)
|
190 |
{
|
191 |
+
// false support to be removed in 3.0
|
192 |
+
if (null === ($path = $this->findTemplate($name)) || false === $path) {
|
193 |
+
return false;
|
194 |
+
}
|
195 |
+
|
196 |
+
return filemtime($path) < $time;
|
197 |
}
|
198 |
|
199 |
+
/**
|
200 |
+
* Checks if the template can be found.
|
201 |
+
*
|
202 |
+
* @param string $name The template name
|
203 |
+
*
|
204 |
+
* @return string|false The template name or false
|
205 |
+
* @return string|false|null The template name or false/null
|
206 |
+
*/
|
207 |
protected function findTemplate($name)
|
208 |
{
|
209 |
$throw = \func_num_args() > 1 ? func_get_arg(1) : true;
|
vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Twig.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Twig\Node\Expression;
|
13 |
+
|
14 |
+
use Twig\Compiler;
|
15 |
+
use Twig\Node\Node;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Represents an arrow function.
|
19 |
+
*
|
20 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
21 |
+
*/
|
22 |
+
class ArrowFunctionExpression extends AbstractExpression
|
23 |
+
{
|
24 |
+
public function __construct(AbstractExpression $expr, Node $names, $lineno, $tag = null)
|
25 |
+
{
|
26 |
+
parent::__construct(['expr' => $expr, 'names' => $names], [], $lineno, $tag);
|
27 |
+
}
|
28 |
+
|
29 |
+
public function compile(Compiler $compiler)
|
30 |
+
{
|
31 |
+
$compiler
|
32 |
+
->addDebugInfo($this)
|
33 |
+
->raw('function (')
|
34 |
+
;
|
35 |
+
foreach ($this->getNode('names') as $i => $name) {
|
36 |
+
if ($i) {
|
37 |
+
$compiler->raw(', ');
|
38 |
+
}
|
39 |
+
|
40 |
+
$compiler
|
41 |
+
->raw('$__')
|
42 |
+
->raw($name->getAttribute('name'))
|
43 |
+
->raw('__')
|
44 |
+
;
|
45 |
+
}
|
46 |
+
$compiler
|
47 |
+
->raw(') use ($context) { ')
|
48 |
+
;
|
49 |
+
foreach ($this->getNode('names') as $name) {
|
50 |
+
$compiler
|
51 |
+
->raw('$context["')
|
52 |
+
->raw($name->getAttribute('name'))
|
53 |
+
->raw('"] = $__')
|
54 |
+
->raw($name->getAttribute('name'))
|
55 |
+
->raw('__; ')
|
56 |
+
;
|
57 |
+
}
|
58 |
+
$compiler
|
59 |
+
->raw('return ')
|
60 |
+
->subcompile($this->getNode('expr'))
|
61 |
+
->raw('; }')
|
62 |
+
;
|
63 |
+
}
|
64 |
+
}
|
vendor/twig/twig/src/Node/Expression/NameExpression.php
CHANGED
@@ -36,13 +36,20 @@ class NameExpression extends AbstractExpression
|
|
36 |
if ($this->getAttribute('is_defined_test')) {
|
37 |
if ($this->isSpecial()) {
|
38 |
$compiler->repr(true);
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
} else {
|
40 |
$compiler
|
41 |
->raw('(isset($context[')
|
42 |
->string($name)
|
43 |
->raw(']) || array_key_exists(')
|
44 |
->string($name)
|
45 |
-
->raw(', $context))')
|
|
|
46 |
}
|
47 |
} elseif ($this->isSpecial()) {
|
48 |
$compiler->raw($this->specialVars[$name]);
|
36 |
if ($this->getAttribute('is_defined_test')) {
|
37 |
if ($this->isSpecial()) {
|
38 |
$compiler->repr(true);
|
39 |
+
} elseif (\PHP_VERSION_ID >= 700400) {
|
40 |
+
$compiler
|
41 |
+
->raw('array_key_exists(')
|
42 |
+
->string($name)
|
43 |
+
->raw(', $context)')
|
44 |
+
;
|
45 |
} else {
|
46 |
$compiler
|
47 |
->raw('(isset($context[')
|
48 |
->string($name)
|
49 |
->raw(']) || array_key_exists(')
|
50 |
->string($name)
|
51 |
+
->raw(', $context))')
|
52 |
+
;
|
53 |
}
|
54 |
} elseif ($this->isSpecial()) {
|
55 |
$compiler->raw($this->specialVars[$name]);
|
vendor/twig/twig/src/Node/ImportNode.php
CHANGED
@@ -46,7 +46,7 @@ class ImportNode extends Node
|
|
46 |
->repr($this->getTemplateName())
|
47 |
->raw(', ')
|
48 |
->repr($this->getTemplateLine())
|
49 |
-
->raw(')')
|
50 |
;
|
51 |
}
|
52 |
|
46 |
->repr($this->getTemplateName())
|
47 |
->raw(', ')
|
48 |
->repr($this->getTemplateLine())
|
49 |
+
->raw(')->unwrap()')
|
50 |
;
|
51 |
}
|
52 |
|
vendor/twig/twig/src/Node/MacroNode.php
CHANGED
@@ -104,7 +104,7 @@ class MacroNode extends Node
|
|
104 |
->outdent()
|
105 |
->write("]);\n\n")
|
106 |
->write("\$blocks = [];\n\n")
|
107 |
-
->write("ob_start();\n")
|
108 |
->write("try {\n")
|
109 |
->indent()
|
110 |
->subcompile($this->getNode('body'))
|
104 |
->outdent()
|
105 |
->write("]);\n\n")
|
106 |
->write("\$blocks = [];\n\n")
|
107 |
+
->write("ob_start(function () { return ''; });\n")
|
108 |
->write("try {\n")
|
109 |
->indent()
|
110 |
->subcompile($this->getNode('body'))
|
vendor/twig/twig/src/Node/Node.php
CHANGED
@@ -40,7 +40,7 @@ class Node implements \Twig_NodeInterface
|
|
40 |
{
|
41 |
foreach ($nodes as $name => $node) {
|
42 |
if (!$node instanceof \Twig_NodeInterface) {
|
43 |
-
@trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : null === $node ? 'null' : \gettype($node), $name, \get_class($this)), E_USER_DEPRECATED);
|
44 |
}
|
45 |
}
|
46 |
$this->nodes = $nodes;
|
@@ -196,7 +196,7 @@ class Node implements \Twig_NodeInterface
|
|
196 |
public function setNode($name, $node = null)
|
197 |
{
|
198 |
if (!$node instanceof \Twig_NodeInterface) {
|
199 |
-
@trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : null === $node ? 'null' : \gettype($node), $name, \get_class($this)), E_USER_DEPRECATED);
|
200 |
}
|
201 |
|
202 |
$this->nodes[$name] = $node;
|
40 |
{
|
41 |
foreach ($nodes as $name => $node) {
|
42 |
if (!$node instanceof \Twig_NodeInterface) {
|
43 |
+
@trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, \get_class($this)), E_USER_DEPRECATED);
|
44 |
}
|
45 |
}
|
46 |
$this->nodes = $nodes;
|
196 |
public function setNode($name, $node = null)
|
197 |
{
|
198 |
if (!$node instanceof \Twig_NodeInterface) {
|
199 |
+
@trigger_error(sprintf('Using "%s" for the value of node "%s" of "%s" is deprecated since version 1.25 and will be removed in 2.0.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, \get_class($this)), E_USER_DEPRECATED);
|
200 |
}
|
201 |
|
202 |
$this->nodes[$name] = $node;
|
vendor/twig/twig/src/Node/SetNode.php
CHANGED
@@ -58,7 +58,7 @@ class SetNode extends Node implements NodeCaptureInterface
|
|
58 |
} else {
|
59 |
if ($this->getAttribute('capture')) {
|
60 |
$compiler
|
61 |
-
->write("ob_start();\n")
|
62 |
->subcompile($this->getNode('values'))
|
63 |
;
|
64 |
}
|
58 |
} else {
|
59 |
if ($this->getAttribute('capture')) {
|
60 |
$compiler
|
61 |
+
->write("ob_start(function () { return ''; });\n")
|
62 |
->subcompile($this->getNode('values'))
|
63 |
;
|
64 |
}
|
vendor/twig/twig/src/Node/SpacelessNode.php
CHANGED
@@ -31,7 +31,7 @@ class SpacelessNode extends Node
|
|
31 |
{
|
32 |
$compiler
|
33 |
->addDebugInfo($this)
|
34 |
-
->write("ob_start();\n")
|
35 |
->subcompile($this->getNode('body'))
|
36 |
->write("echo trim(preg_replace('/>\s+</', '><', ob_get_clean()));\n")
|
37 |
;
|
31 |
{
|
32 |
$compiler
|
33 |
->addDebugInfo($this)
|
34 |
+
->write("ob_start(function () { return ''; });\n")
|
35 |
->subcompile($this->getNode('body'))
|
36 |
->write("echo trim(preg_replace('/>\s+</', '><', ob_get_clean()));\n")
|
37 |
;
|
vendor/twig/twig/src/NodeTraverser.php
CHANGED
@@ -69,7 +69,11 @@ class NodeTraverser
|
|
69 |
$node = $visitor->enterNode($node, $this->env);
|
70 |
|
71 |
foreach ($node as $k => $n) {
|
72 |
-
if (
|
|
|
|
|
|
|
|
|
73 |
if ($m !== $n) {
|
74 |
$node->setNode($k, $m);
|
75 |
}
|
69 |
$node = $visitor->enterNode($node, $this->env);
|
70 |
|
71 |
foreach ($node as $k => $n) {
|
72 |
+
if (null === $n) {
|
73 |
+
continue;
|
74 |
+
}
|
75 |
+
|
76 |
+
if (false !== ($m = $this->traverseForVisitor($visitor, $n)) && null !== $m) {
|
77 |
if ($m !== $n) {
|
78 |
$node->setNode($k, $m);
|
79 |
}
|
vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php
CHANGED
@@ -17,6 +17,8 @@ use Twig\Node\Node;
|
|
17 |
/**
|
18 |
* Used to make node visitors compatible with Twig 1.x and 2.x.
|
19 |
*
|
|
|
|
|
20 |
* @author Fabien Potencier <fabien@symfony.com>
|
21 |
*/
|
22 |
abstract class AbstractNodeVisitor implements NodeVisitorInterface
|
@@ -49,7 +51,7 @@ abstract class AbstractNodeVisitor implements NodeVisitorInterface
|
|
49 |
/**
|
50 |
* Called after child nodes are visited.
|
51 |
*
|
52 |
-
* @return Node|false The modified node or
|
53 |
*/
|
54 |
abstract protected function doLeaveNode(Node $node, Environment $env);
|
55 |
}
|
17 |
/**
|
18 |
* Used to make node visitors compatible with Twig 1.x and 2.x.
|
19 |
*
|
20 |
+
* To be removed in Twig 3.1.
|
21 |
+
*
|
22 |
* @author Fabien Potencier <fabien@symfony.com>
|
23 |
*/
|
24 |
abstract class AbstractNodeVisitor implements NodeVisitorInterface
|
51 |
/**
|
52 |
* Called after child nodes are visited.
|
53 |
*
|
54 |
+
* @return Node|false|null The modified node or null if the node must be removed
|
55 |
*/
|
56 |
abstract protected function doLeaveNode(Node $node, Environment $env);
|
57 |
}
|
vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php
CHANGED
@@ -108,7 +108,7 @@ class EscaperNodeVisitor extends AbstractNodeVisitor
|
|
108 |
$expr2 = $this->escapeInlinePrintNode(new InlinePrint($expr2, $expr2->getTemplateLine()), $env, $type);
|
109 |
}
|
110 |
$expr3 = $expression->getNode('expr3');
|
111 |
-
if ($expr3 instanceof ConditionalExpression && $this->shouldUnwrapConditional($
|
112 |
$expr3 = $this->unwrapConditional($expr3, $env, $type);
|
113 |
} else {
|
114 |
$expr3 = $this->escapeInlinePrintNode(new InlinePrint($expr3, $expr3->getTemplateLine()), $env, $type);
|
108 |
$expr2 = $this->escapeInlinePrintNode(new InlinePrint($expr2, $expr2->getTemplateLine()), $env, $type);
|
109 |
}
|
110 |
$expr3 = $expression->getNode('expr3');
|
111 |
+
if ($expr3 instanceof ConditionalExpression && $this->shouldUnwrapConditional($expr3, $env, $type)) {
|
112 |
$expr3 = $this->unwrapConditional($expr3, $env, $type);
|
113 |
} else {
|
114 |
$expr3 = $this->escapeInlinePrintNode(new InlinePrint($expr3, $expr3->getTemplateLine()), $env, $type);
|
vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php
CHANGED
@@ -30,7 +30,7 @@ interface NodeVisitorInterface
|
|
30 |
/**
|
31 |
* Called after child nodes are visited.
|
32 |
*
|
33 |
-
* @return \Twig_NodeInterface|false The modified node or
|
34 |
*/
|
35 |
public function leaveNode(\Twig_NodeInterface $node, Environment $env);
|
36 |
|
30 |
/**
|
31 |
* Called after child nodes are visited.
|
32 |
*
|
33 |
+
* @return \Twig_NodeInterface|false|null The modified node or null if the node must be removed
|
34 |
*/
|
35 |
public function leaveNode(\Twig_NodeInterface $node, Environment $env);
|
36 |
|
vendor/twig/twig/src/Profiler/Profile.php
CHANGED
@@ -86,7 +86,7 @@ class Profile implements \IteratorAggregate, \Serializable
|
|
86 |
/**
|
87 |
* Returns the duration in microseconds.
|
88 |
*
|
89 |
-
* @return
|
90 |
*/
|
91 |
public function getDuration()
|
92 |
{
|
86 |
/**
|
87 |
* Returns the duration in microseconds.
|
88 |
*
|
89 |
+
* @return float
|
90 |
*/
|
91 |
public function getDuration()
|
92 |
{
|
vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php
CHANGED
@@ -12,7 +12,7 @@
|
|
12 |
namespace Twig\Sandbox;
|
13 |
|
14 |
/**
|
15 |
-
*
|
16 |
*
|
17 |
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
*/
|
12 |
namespace Twig\Sandbox;
|
13 |
|
14 |
/**
|
15 |
+
* Interface that all security policy classes must implements.
|
16 |
*
|
17 |
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
*/
|
vendor/twig/twig/src/Template.php
CHANGED
@@ -253,7 +253,7 @@ abstract class Template implements \Twig_TemplateInterface
|
|
253 |
*/
|
254 |
public function renderParentBlock($name, array $context, array $blocks = [])
|
255 |
{
|
256 |
-
ob_start();
|
257 |
$this->displayParentBlock($name, $context, $blocks);
|
258 |
|
259 |
return ob_get_clean();
|
@@ -274,7 +274,7 @@ abstract class Template implements \Twig_TemplateInterface
|
|
274 |
*/
|
275 |
public function renderBlock($name, array $context, array $blocks = [], $useBlocks = true)
|
276 |
{
|
277 |
-
ob_start();
|
278 |
$this->displayBlock($name, $context, $blocks, $useBlocks);
|
279 |
|
280 |
return ob_get_clean();
|
@@ -343,6 +343,9 @@ abstract class Template implements \Twig_TemplateInterface
|
|
343 |
return array_unique($names);
|
344 |
}
|
345 |
|
|
|
|
|
|
|
346 |
protected function loadTemplate($template, $templateName = null, $line = null, $index = null)
|
347 |
{
|
348 |
try {
|
@@ -383,6 +386,16 @@ abstract class Template implements \Twig_TemplateInterface
|
|
383 |
}
|
384 |
}
|
385 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
386 |
/**
|
387 |
* Returns all blocks.
|
388 |
*
|
@@ -404,7 +417,7 @@ abstract class Template implements \Twig_TemplateInterface
|
|
404 |
public function render(array $context)
|
405 |
{
|
406 |
$level = ob_get_level();
|
407 |
-
ob_start();
|
408 |
try {
|
409 |
$this->display($context);
|
410 |
} catch (\Exception $e) {
|
253 |
*/
|
254 |
public function renderParentBlock($name, array $context, array $blocks = [])
|
255 |
{
|
256 |
+
ob_start(function () { return ''; });
|
257 |
$this->displayParentBlock($name, $context, $blocks);
|
258 |
|
259 |
return ob_get_clean();
|
274 |
*/
|
275 |
public function renderBlock($name, array $context, array $blocks = [], $useBlocks = true)
|
276 |
{
|
277 |
+
ob_start(function () { return ''; });
|
278 |
$this->displayBlock($name, $context, $blocks, $useBlocks);
|
279 |
|
280 |
return ob_get_clean();
|
343 |
return array_unique($names);
|
344 |
}
|
345 |
|
346 |
+
/**
|
347 |
+
* @return Template|TemplateWrapper
|
348 |
+
*/
|
349 |
protected function loadTemplate($template, $templateName = null, $line = null, $index = null)
|
350 |
{
|
351 |
try {
|
386 |
}
|
387 |
}
|
388 |
|
389 |
+
/**
|
390 |
+
* @internal
|
391 |
+
*
|
392 |
+
* @return Template
|
393 |
+
*/
|
394 |
+
protected function unwrap()
|
395 |
+
{
|
396 |
+
return $this;
|
397 |
+
}
|
398 |
+
|
399 |
/**
|
400 |
* Returns all blocks.
|
401 |
*
|
417 |
public function render(array $context)
|
418 |
{
|
419 |
$level = ob_get_level();
|
420 |
+
ob_start(function () { return ''; });
|
421 |
try {
|
422 |
$this->display($context);
|
423 |
} catch (\Exception $e) {
|
vendor/twig/twig/src/TemplateWrapper.php
CHANGED
@@ -96,7 +96,7 @@ final class TemplateWrapper
|
|
96 |
{
|
97 |
$context = $this->env->mergeGlobals($context);
|
98 |
$level = ob_get_level();
|
99 |
-
ob_start();
|
100 |
try {
|
101 |
$this->template->displayBlock($name, $context);
|
102 |
} catch (\Exception $e) {
|
@@ -138,10 +138,20 @@ final class TemplateWrapper
|
|
138 |
/**
|
139 |
* @return string
|
140 |
*/
|
141 |
-
public function
|
142 |
{
|
143 |
return $this->template->getTemplateName();
|
144 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
}
|
146 |
|
147 |
class_alias('Twig\TemplateWrapper', 'Twig_TemplateWrapper');
|
96 |
{
|
97 |
$context = $this->env->mergeGlobals($context);
|
98 |
$level = ob_get_level();
|
99 |
+
ob_start(function () { return ''; });
|
100 |
try {
|
101 |
$this->template->displayBlock($name, $context);
|
102 |
} catch (\Exception $e) {
|
138 |
/**
|
139 |
* @return string
|
140 |
*/
|
141 |
+
public function getTemplateName()
|
142 |
{
|
143 |
return $this->template->getTemplateName();
|
144 |
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* @internal
|
148 |
+
*
|
149 |
+
* @return Template
|
150 |
+
*/
|
151 |
+
public function unwrap()
|
152 |
+
{
|
153 |
+
return $this->template;
|
154 |
+
}
|
155 |
}
|
156 |
|
157 |
class_alias('Twig\TemplateWrapper', 'Twig_TemplateWrapper');
|
vendor/twig/twig/src/Test/IntegrationTestCase.php
CHANGED
@@ -194,7 +194,7 @@ abstract class IntegrationTestCase extends TestCase
|
|
194 |
$message = $e->getMessage();
|
195 |
$this->assertSame(trim($exception), trim(sprintf('%s: %s', \get_class($e), $message)));
|
196 |
$last = substr($message, \strlen($message) - 1);
|
197 |
-
$this->assertTrue('.' === $last || '?' === $last,
|
198 |
|
199 |
return;
|
200 |
}
|
194 |
$message = $e->getMessage();
|
195 |
$this->assertSame(trim($exception), trim(sprintf('%s: %s', \get_class($e), $message)));
|
196 |
$last = substr($message, \strlen($message) - 1);
|
197 |
+
$this->assertTrue('.' === $last || '?' === $last, 'Exception message must end with a dot or a question mark.');
|
198 |
|
199 |
return;
|
200 |
}
|
vendor/twig/twig/src/Test/NodeTestCase.php
CHANGED
@@ -56,7 +56,7 @@ abstract class NodeTestCase extends TestCase
|
|
56 |
$line = $line > 0 ? "// line {$line}\n" : '';
|
57 |
|
58 |
if (\PHP_VERSION_ID >= 70000) {
|
59 |
-
return sprintf('%s($context["%s"] ?? null)', $line, $name
|
60 |
}
|
61 |
|
62 |
if (\PHP_VERSION_ID >= 50400) {
|
56 |
$line = $line > 0 ? "// line {$line}\n" : '';
|
57 |
|
58 |
if (\PHP_VERSION_ID >= 70000) {
|
59 |
+
return sprintf('%s($context["%s"] ?? null)', $line, $name);
|
60 |
}
|
61 |
|
62 |
if (\PHP_VERSION_ID >= 50400) {
|
vendor/twig/twig/src/Token.php
CHANGED
@@ -38,6 +38,7 @@ class Token
|
|
38 |
const PUNCTUATION_TYPE = 9;
|
39 |
const INTERPOLATION_START_TYPE = 10;
|
40 |
const INTERPOLATION_END_TYPE = 11;
|
|
|
41 |
|
42 |
/**
|
43 |
* @param int $type The type of the token
|
@@ -157,6 +158,9 @@ class Token
|
|
157 |
case self::INTERPOLATION_END_TYPE:
|
158 |
$name = 'INTERPOLATION_END_TYPE';
|
159 |
break;
|
|
|
|
|
|
|
160 |
default:
|
161 |
throw new \LogicException(sprintf('Token of type "%s" does not exist.', $type));
|
162 |
}
|
@@ -200,6 +204,8 @@ class Token
|
|
200 |
return 'begin of string interpolation';
|
201 |
case self::INTERPOLATION_END_TYPE:
|
202 |
return 'end of string interpolation';
|
|
|
|
|
203 |
default:
|
204 |
throw new \LogicException(sprintf('Token of type "%s" does not exist.', $type));
|
205 |
}
|
38 |
const PUNCTUATION_TYPE = 9;
|
39 |
const INTERPOLATION_START_TYPE = 10;
|
40 |
const INTERPOLATION_END_TYPE = 11;
|
41 |
+
const ARROW_TYPE = 12;
|
42 |
|
43 |
/**
|
44 |
* @param int $type The type of the token
|
158 |
case self::INTERPOLATION_END_TYPE:
|
159 |
$name = 'INTERPOLATION_END_TYPE';
|
160 |
break;
|
161 |
+
case self::ARROW_TYPE:
|
162 |
+
$name = 'ARROW_TYPE';
|
163 |
+
break;
|
164 |
default:
|
165 |
throw new \LogicException(sprintf('Token of type "%s" does not exist.', $type));
|
166 |
}
|
204 |
return 'begin of string interpolation';
|
205 |
case self::INTERPOLATION_END_TYPE:
|
206 |
return 'end of string interpolation';
|
207 |
+
case self::ARROW_TYPE:
|
208 |
+
return 'arrow function';
|
209 |
default:
|
210 |
throw new \LogicException(sprintf('Token of type "%s" does not exist.', $type));
|
211 |
}
|
vendor/twig/twig/src/TokenParser/AbstractTokenParser.php
CHANGED
@@ -20,6 +20,9 @@ use Twig\Parser;
|
|
20 |
*/
|
21 |
abstract class AbstractTokenParser implements TokenParserInterface
|
22 |
{
|
|
|
|
|
|
|
23 |
protected $parser;
|
24 |
|
25 |
public function setParser(Parser $parser)
|
20 |
*/
|
21 |
abstract class AbstractTokenParser implements TokenParserInterface
|
22 |
{
|
23 |
+
/**
|
24 |
+
* @var Parser
|
25 |
+
*/
|
26 |
protected $parser;
|
27 |
|
28 |
public function setParser(Parser $parser)
|
vendor/twig/twig/src/TokenParser/ApplyTokenParser.php
ADDED
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Twig.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Twig\TokenParser;
|
13 |
+
|
14 |
+
use Twig\Node\Expression\TempNameExpression;
|
15 |
+
use Twig\Node\Node;
|
16 |
+
use Twig\Node\PrintNode;
|
17 |
+
use Twig\Node\SetNode;
|
18 |
+
use Twig\Token;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Applies filters on a section of a template.
|
22 |
+
*
|
23 |
+
* {% apply upper %}
|
24 |
+
* This text becomes uppercase
|
25 |
+
* {% endapplys %}
|
26 |
+
*/
|
27 |
+
final class ApplyTokenParser extends AbstractTokenParser
|
28 |
+
{
|
29 |
+
public function parse(Token $token)
|
30 |
+
{
|
31 |
+
$lineno = $token->getLine();
|
32 |
+
$name = $this->parser->getVarName();
|
33 |
+
|
34 |
+
$ref = new TempNameExpression($name, $lineno);
|
35 |
+
$ref->setAttribute('always_defined', true);
|
36 |
+
|
37 |
+
$filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag());
|
38 |
+
|
39 |
+
$this->parser->getStream()->expect(Token::BLOCK_END_TYPE);
|
40 |
+
$body = $this->parser->subparse([$this, 'decideApplyEnd'], true);
|
41 |
+
$this->parser->getStream()->expect(Token::BLOCK_END_TYPE);
|
42 |
+
|
43 |
+
return new Node([
|
44 |
+
new SetNode(true, $ref, $body, $lineno, $this->getTag()),
|
45 |
+
new PrintNode($filter, $lineno, $this->getTag()),
|
46 |
+
]);
|
47 |
+
}
|
48 |
+
|
49 |
+
public function decideApplyEnd(Token $token)
|
50 |
+
{
|
51 |
+
return $token->test('endapply');
|
52 |
+
}
|
53 |
+
|
54 |
+
public function getTag()
|
55 |
+
{
|
56 |
+
return 'apply';
|
57 |
+
}
|
58 |
+
}
|
vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php
CHANGED
@@ -13,6 +13,7 @@
|
|
13 |
namespace Twig\TokenParser;
|
14 |
|
15 |
use Twig\Error\SyntaxError;
|
|
|
16 |
use Twig\Token;
|
17 |
|
18 |
/**
|
@@ -38,6 +39,8 @@ class ExtendsTokenParser extends AbstractTokenParser
|
|
38 |
$this->parser->setParent($this->parser->getExpressionParser()->parseExpression());
|
39 |
|
40 |
$stream->expect(Token::BLOCK_END_TYPE);
|
|
|
|
|
41 |
}
|
42 |
|
43 |
public function getTag()
|
13 |
namespace Twig\TokenParser;
|
14 |
|
15 |
use Twig\Error\SyntaxError;
|
16 |
+
use Twig\Node\Node;
|
17 |
use Twig\Token;
|
18 |
|
19 |
/**
|
39 |
$this->parser->setParent($this->parser->getExpressionParser()->parseExpression());
|
40 |
|
41 |
$stream->expect(Token::BLOCK_END_TYPE);
|
42 |
+
|
43 |
+
return new Node();
|
44 |
}
|
45 |
|
46 |
public function getTag()
|
vendor/twig/twig/src/TokenParser/MacroTokenParser.php
CHANGED
@@ -14,6 +14,7 @@ namespace Twig\TokenParser;
|
|
14 |
use Twig\Error\SyntaxError;
|
15 |
use Twig\Node\BodyNode;
|
16 |
use Twig\Node\MacroNode;
|
|
|
17 |
use Twig\Token;
|
18 |
|
19 |
/**
|
@@ -49,6 +50,8 @@ class MacroTokenParser extends AbstractTokenParser
|
|
49 |
$stream->expect(Token::BLOCK_END_TYPE);
|
50 |
|
51 |
$this->parser->setMacro($name, new MacroNode($name, new BodyNode([$body]), $arguments, $lineno, $this->getTag()));
|
|
|
|
|
52 |
}
|
53 |
|
54 |
public function decideBlockEnd(Token $token)
|
14 |
use Twig\Error\SyntaxError;
|
15 |
use Twig\Node\BodyNode;
|
16 |
use Twig\Node\MacroNode;
|
17 |
+
use Twig\Node\Node;
|
18 |
use Twig\Token;
|
19 |
|
20 |
/**
|
50 |
$stream->expect(Token::BLOCK_END_TYPE);
|
51 |
|
52 |
$this->parser->setMacro($name, new MacroNode($name, new BodyNode([$body]), $arguments, $lineno, $this->getTag()));
|
53 |
+
|
54 |
+
return new Node();
|
55 |
}
|
56 |
|
57 |
public function decideBlockEnd(Token $token)
|
webpack/webpack.react.js
DELETED
@@ -1,145 +0,0 @@
|
|
1 |
-
var debug = process.env.NODE_ENV !== 'production'
|
2 |
-
var webpack = require('webpack')
|
3 |
-
var path = require('path')
|
4 |
-
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
|
5 |
-
var ExtractTextPlugin = require('extract-text-webpack-plugin')
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Internal dependencies
|
9 |
-
*/
|
10 |
-
const camelCaseDash = (string) => {
|
11 |
-
return string.replace(
|
12 |
-
/-([a-z])/g,
|
13 |
-
(match, letter) => letter.toUpperCase()
|
14 |
-
)
|
15 |
-
}
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Converts @wordpress/* string request into request object.
|
19 |
-
*
|
20 |
-
* Note this isn't the same as camel case because of the
|
21 |
-
* way that numbers don't trigger the capitalized next letter.
|
22 |
-
*
|
23 |
-
* @example
|
24 |
-
* formatRequest( '@wordpress/api-fetch' );
|
25 |
-
* // { this: [ 'wp', 'apiFetch' ] }
|
26 |
-
* formatRequest( '@wordpress/i18n' );
|
27 |
-
* // { this: [ 'wp', 'i18n' ] }
|
28 |
-
*
|
29 |
-
* @param {string} request Request name from import statement.
|
30 |
-
* @return {Object} Request object formatted for further processing.
|
31 |
-
*/
|
32 |
-
const formatRequest = (request) => {
|
33 |
-
// '@wordpress/api-fetch' -> [ '@wordpress', 'api-fetch' ]
|
34 |
-
const [, name] = request.split('/')
|
35 |
-
|
36 |
-
// { this: [ 'wp', 'apiFetch' ] }
|
37 |
-
return {
|
38 |
-
this: ['wp', camelCaseDash(name)],
|
39 |
-
}
|
40 |
-
}
|
41 |
-
|
42 |
-
const wordpressExternals = (context, request, callback) => {
|
43 |
-
if (/^@wordpress\//.test(request)) {
|
44 |
-
callback(null, formatRequest(request), 'this')
|
45 |
-
} else {
|
46 |
-
callback()
|
47 |
-
}
|
48 |
-
}
|
49 |
-
|
50 |
-
const externals = [
|
51 |
-
{
|
52 |
-
react: 'React',
|
53 |
-
'react-dom': 'ReactDOM',
|
54 |
-
moment: 'moment',
|
55 |
-
jquery: 'jQuery',
|
56 |
-
lodash: 'lodash',
|
57 |
-
'lodash-es': 'lodash',
|
58 |
-
|
59 |
-
// Distributed NPM packages may depend on Babel's runtime regenerator.
|
60 |
-
// In a WordPress context, the regenerator is assigned to the global
|
61 |
-
// scope via the `wp-polyfill` script. It is reassigned here as an
|
62 |
-
// externals to reduce the size of generated bundles.
|
63 |
-
//
|
64 |
-
// See: https://github.com/WordPress/gutenberg/issues/13890
|
65 |
-
'@babel/runtime/regenerator': 'regeneratorRuntime',
|
66 |
-
},
|
67 |
-
wordpressExternals,
|
68 |
-
]
|
69 |
-
|
70 |
-
const dir = __dirname + '/../'
|
71 |
-
|
72 |
-
let config = {
|
73 |
-
context: dir,
|
74 |
-
entry: {
|
75 |
-
'gutenberg-block': './js/src/modules/gutenberg-block/index.js',
|
76 |
-
},
|
77 |
-
output: {
|
78 |
-
path: dir + 'js/build',
|
79 |
-
filename: '[name].min.js',
|
80 |
-
},
|
81 |
-
devtool: debug ? 'inline-sourcemap' : false,
|
82 |
-
module: {
|
83 |
-
rules: [
|
84 |
-
{
|
85 |
-
test: /\.(scss|sass)$/,
|
86 |
-
use: ExtractTextPlugin.extract({
|
87 |
-
fallback: 'style-loader',
|
88 |
-
use: [
|
89 |
-
{loader: 'css-loader', options: {minimize: true}},
|
90 |
-
'fast-sass-loader'
|
91 |
-
]
|
92 |
-
})
|
93 |
-
},
|
94 |
-
{
|
95 |
-
test: /\.js$/,
|
96 |
-
loader: 'babel-loader',
|
97 |
-
exclude: /(node_modules|bower_components)/,
|
98 |
-
options: {
|
99 |
-
babelrc: false,
|
100 |
-
"plugins": [
|
101 |
-
["transform-react-jsx", {
|
102 |
-
pragma: "wp.element.createElement"
|
103 |
-
}]
|
104 |
-
],
|
105 |
-
"presets": [
|
106 |
-
["env", {"loose": true, "modules": false}],
|
107 |
-
["es2015", {"loose": true, "modules": false}],
|
108 |
-
"stage-2"
|
109 |
-
],
|
110 |
-
}
|
111 |
-
}
|
112 |
-
]
|
113 |
-
},
|
114 |
-
resolve: {
|
115 |
-
alias: {
|
116 |
-
'@rebelcode/std-lib': '@rebelcode/std-lib/dist/std-lib.umd.js',
|
117 |
-
'lodash-es': 'lodash',
|
118 |
-
app: path.resolve(dir, 'js/src'),
|
119 |
-
css: path.resolve(dir, 'css'),
|
120 |
-
},
|
121 |
-
extensions: ['*', '.js', '.json']
|
122 |
-
},
|
123 |
-
externals,
|
124 |
-
plugins: [
|
125 |
-
new ExtractTextPlugin(debug ? './../../css/build/[name].min.css' : { // define where to save the file
|
126 |
-
filename: './../../css/build/[name].min.css',
|
127 |
-
allChunks: true
|
128 |
-
}),
|
129 |
-
new webpack.optimize.ModuleConcatenationPlugin(),
|
130 |
-
!debug && new webpack.optimize.UglifyJsPlugin({
|
131 |
-
sourcemap: false,
|
132 |
-
compress: {
|
133 |
-
warnings: false,
|
134 |
-
pure_funcs: [
|
135 |
-
'console.log', 'console.info', 'console.warn'
|
136 |
-
]
|
137 |
-
},
|
138 |
-
}),
|
139 |
-
!debug && new webpack.LoaderOptionsPlugin({
|
140 |
-
minimize: true
|
141 |
-
})
|
142 |
-
].filter( Boolean )
|
143 |
-
}
|
144 |
-
|
145 |
-
module.exports = config
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
webpack/webpack.vue.js
DELETED
@@ -1,109 +0,0 @@
|
|
1 |
-
var debug = process.env.NODE_ENV !== 'production'
|
2 |
-
var webpack = require('webpack')
|
3 |
-
var path = require('path')
|
4 |
-
var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
|
5 |
-
var ExtractTextPlugin = require('extract-text-webpack-plugin')
|
6 |
-
var VueLoaderPlugin = require('vue-loader/lib/plugin')
|
7 |
-
|
8 |
-
const dir = __dirname + '/../'
|
9 |
-
|
10 |
-
function makePlugins (plugins) {
|
11 |
-
let base = [
|
12 |
-
new webpack.optimize.CommonsChunkPlugin({
|
13 |
-
name: 'wpra-vendor',
|
14 |
-
filename: 'wpra-vendor.min.js',
|
15 |
-
minChunks: function(module){
|
16 |
-
return module.context && module.context.includes('node_modules');
|
17 |
-
}
|
18 |
-
}),
|
19 |
-
new webpack.optimize.CommonsChunkPlugin({
|
20 |
-
name: 'wpra-manifest',
|
21 |
-
filename: 'wpra-manifest.min.js',
|
22 |
-
minChunks: Infinity
|
23 |
-
}),
|
24 |
-
]
|
25 |
-
return base.concat(plugins)
|
26 |
-
}
|
27 |
-
|
28 |
-
let config = {
|
29 |
-
context: dir,
|
30 |
-
entry: {
|
31 |
-
intro: './js/src/modules/intro/index.js',
|
32 |
-
plugins: './js/src/modules/plugins/index.js',
|
33 |
-
templates: './js/src/modules/templates/index.js',
|
34 |
-
pagination: './js/src/modules/pagination/index.js',
|
35 |
-
common: './css/src/common/index.scss',
|
36 |
-
update: './css/src/update/index.scss',
|
37 |
-
},
|
38 |
-
output: {
|
39 |
-
path: dir + 'js/build',
|
40 |
-
filename: '[name].min.js',
|
41 |
-
library: 'WPRA',
|
42 |
-
libraryTarget: 'umd'
|
43 |
-
},
|
44 |
-
devtool: debug ? 'inline-sourcemap' : false,
|
45 |
-
module: {
|
46 |
-
rules: [
|
47 |
-
{
|
48 |
-
test: /\.(scss|sass)$/,
|
49 |
-
use: ExtractTextPlugin.extract({
|
50 |
-
fallback: 'style-loader',
|
51 |
-
use: [
|
52 |
-
{loader: 'css-loader', options: {minimize: true}},
|
53 |
-
'fast-sass-loader'
|
54 |
-
]
|
55 |
-
})
|
56 |
-
},
|
57 |
-
{
|
58 |
-
test: /\.vue$/,
|
59 |
-
loader: 'vue-loader',
|
60 |
-
},
|
61 |
-
{
|
62 |
-
test: /\.html$/,
|
63 |
-
loader: 'vue-template-compiler-loader'
|
64 |
-
},
|
65 |
-
{
|
66 |
-
test: /\.js$/,
|
67 |
-
loader: 'babel-loader',
|
68 |
-
exclude: /(node_modules|bower_components)/,
|
69 |
-
}
|
70 |
-
]
|
71 |
-
},
|
72 |
-
resolve: {
|
73 |
-
alias: {
|
74 |
-
'vue$': 'vue/dist/vue.esm.js',
|
75 |
-
'@rebelcode/std-lib': '@rebelcode/std-lib/dist/std-lib.umd.js',
|
76 |
-
app: path.resolve(dir, 'js/src'),
|
77 |
-
css: path.resolve(dir, 'css'),
|
78 |
-
},
|
79 |
-
extensions: ['*', '.js', '.vue', '.json']
|
80 |
-
},
|
81 |
-
plugins: debug ? makePlugins([
|
82 |
-
new ExtractTextPlugin('./../../css/build/[name].min.css'),
|
83 |
-
new VueLoaderPlugin(),
|
84 |
-
]) : makePlugins([
|
85 |
-
new ExtractTextPlugin({ // define where to save the file
|
86 |
-
filename: './../../css/build/[name].min.css',
|
87 |
-
allChunks: true
|
88 |
-
}),
|
89 |
-
new VueLoaderPlugin(),
|
90 |
-
new webpack.optimize.ModuleConcatenationPlugin(),
|
91 |
-
// new webpack.optimize.OccurrenceOrderPlugin(),
|
92 |
-
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
93 |
-
// new BundleAnalyzerPlugin(),
|
94 |
-
new webpack.optimize.UglifyJsPlugin({
|
95 |
-
sourcemap: false,
|
96 |
-
compress: {
|
97 |
-
warnings: false,
|
98 |
-
pure_funcs: [
|
99 |
-
'console.log', 'console.info', 'console.warn'
|
100 |
-
]
|
101 |
-
},
|
102 |
-
}),
|
103 |
-
new webpack.LoaderOptionsPlugin({
|
104 |
-
minimize: true
|
105 |
-
})
|
106 |
-
])
|
107 |
-
}
|
108 |
-
|
109 |
-
module.exports = config
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wp-rss-aggregator.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin Name: WP RSS Aggregator
|
5 |
* Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
|
6 |
* Description: Imports and aggregates multiple RSS Feeds.
|
7 |
-
* Version: 4.17.
|
8 |
* Author: RebelCode
|
9 |
* Author URI: https://www.wprssaggregator.com
|
10 |
* Text Domain: wprss
|
@@ -78,7 +78,7 @@ use RebelCode\Wpra\Core\Plugin;
|
|
78 |
|
79 |
// Set the version number of the plugin.
|
80 |
if( !defined( 'WPRSS_VERSION' ) )
|
81 |
-
define( 'WPRSS_VERSION', '4.17.
|
82 |
|
83 |
if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
|
84 |
define( 'WPRSS_WP_MIN_VERSION', '4.8' );
|
@@ -248,7 +248,7 @@ require_once ( WPRSS_INC . 'admin-options.php' );
|
|
248 |
/* Load the legacy admin options functions file. */
|
249 |
require_once ( WPRSS_INC . 'admin-options-legacy.php' );
|
250 |
|
251 |
-
/* Load the
|
252 |
require_once ( WPRSS_INC . 'system-info.php' );
|
253 |
|
254 |
/* Load the miscellaneous functions file */
|
4 |
* Plugin Name: WP RSS Aggregator
|
5 |
* Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
|
6 |
* Description: Imports and aggregates multiple RSS Feeds.
|
7 |
+
* Version: 4.17.3
|
8 |
* Author: RebelCode
|
9 |
* Author URI: https://www.wprssaggregator.com
|
10 |
* Text Domain: wprss
|
78 |
|
79 |
// Set the version number of the plugin.
|
80 |
if( !defined( 'WPRSS_VERSION' ) )
|
81 |
+
define( 'WPRSS_VERSION', '4.17.3' );
|
82 |
|
83 |
if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
|
84 |
define( 'WPRSS_WP_MIN_VERSION', '4.8' );
|
248 |
/* Load the legacy admin options functions file. */
|
249 |
require_once ( WPRSS_INC . 'admin-options-legacy.php' );
|
250 |
|
251 |
+
/* Load the system info file */
|
252 |
require_once ( WPRSS_INC . 'system-info.php' );
|
253 |
|
254 |
/* Load the miscellaneous functions file */
|