Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
adff971d62 | ||
|
|
23b22f71b8 | ||
|
|
fee3671e32 | ||
|
|
26c6be7268 | ||
|
|
01c5bcf2be | ||
|
|
1ab8a5ab98 | ||
|
|
b54aaca28a | ||
|
|
86a29ae000 | ||
|
|
a5dbee93ff | ||
|
|
e0465e6e10 | ||
|
|
7da48b9dd1 | ||
|
|
a64895c3a6 | ||
|
|
21f1a5d4c4 | ||
|
|
d60f79ca33 | ||
|
|
2d5cea5033 | ||
|
|
b0615215fe | ||
|
|
7a0f98b2cb | ||
|
|
cdc1dab4a6 | ||
|
|
431739ab19 | ||
|
|
1780399050 | ||
|
|
eb75d38716 | ||
|
|
06f82d78f4 | ||
|
|
dee4da1c0e | ||
|
|
e341ec7c60 | ||
|
|
9146609e4a | ||
|
|
f90615ca41 | ||
|
|
8a2a6a05ff | ||
|
|
5a787f8ed5 | ||
|
|
a904053002 | ||
|
|
70ecd30dcc | ||
|
|
b0976d7e47 | ||
|
|
bb5e55016c |
10
LICENSE
10
LICENSE
@@ -6,9 +6,9 @@ Cases that include commercialization of WPScan require a commercial, non-free li
|
||||
|
||||
1. Definitions
|
||||
|
||||
1.1 “License” means this document.
|
||||
1.2 “Contributor” means each individual or legal entity that creates, contributes to the creation of, or owns WPScan.
|
||||
1.3 “WPScan Team” means WPScan’s core developers.
|
||||
1.1 "License" means this document.
|
||||
1.2 "Contributor" means each individual or legal entity that creates, contributes to the creation of, or owns WPScan.
|
||||
1.3 "WPScan Team" means WPScan’s core developers.
|
||||
|
||||
2. Commercialization
|
||||
|
||||
@@ -29,6 +29,8 @@ Example cases which do not require a commercial license, and thus fall under the
|
||||
|
||||
If you need to purchase a commercial license or are unsure whether you need to purchase a commercial license contact us - team@wpscan.org.
|
||||
|
||||
We may grant commercial licenses at no monetary cost at our own discretion if the commercial usage is deemed by the WPScan Team to significantly benefit WPScan.
|
||||
|
||||
Free-use Terms and Conditions;
|
||||
|
||||
3. Redistribution
|
||||
@@ -57,7 +59,7 @@ WPScan is provided under an AS-IS basis and without any support, updates or main
|
||||
|
||||
8. Disclaimer of Warranty
|
||||
|
||||
WPScan is provided under this License on an “as is” basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the WPScan is free of defects, merchantable, fit for a particular purpose or non-infringing.
|
||||
WPScan is provided under this License on an "as is" basis, without warranty of any kind, either expressed, implied, or statutory, including, without limitation, warranties that the WPScan is free of defects, merchantable, fit for a particular purpose or non-infringing.
|
||||
|
||||
9. Limitation of Liability
|
||||
|
||||
|
||||
73
README.md
73
README.md
@@ -7,23 +7,28 @@
|
||||
|
||||
# INSTALL
|
||||
|
||||
## Prerequisites:
|
||||
## Prerequisites
|
||||
|
||||
- (Optional but highly recommended: [RVM](https://rvm.io/rvm/install))
|
||||
- Ruby >= 2.3 - Recommended: latest
|
||||
- Curl >= 7.21 - Recommended: latest - FYI the 7.29 has a segfault
|
||||
- Ruby 2.5.0 to 2.5.3 can cause an 'undefined symbol: rmpd_util_str_to_d' error in some systems, see [#1283](https://github.com/wpscanteam/wpscan/issues/1283)
|
||||
- Curl >= 7.21 - Recommended: latest
|
||||
- The 7.29 has a segfault
|
||||
- RubyGems - Recommended: latest
|
||||
|
||||
### From RubyGems:
|
||||
### From RubyGems (Recommended)
|
||||
|
||||
```
|
||||
```shell
|
||||
gem install wpscan
|
||||
```
|
||||
|
||||
### From sources:
|
||||
On MacOSX, if a ```Gem::FilePermissionError``` is raised due to the Apple's System Integrity Protection (SIP), either install RVM and install wpscan again, or run ```sudo gem install -n /usr/local/bin wpscan``` (see [#1286](https://github.com/wpscanteam/wpscan/issues/1286))
|
||||
|
||||
### From sources (NOT Recommended)
|
||||
|
||||
Prerequisites: Git
|
||||
|
||||
```
|
||||
```shell
|
||||
git clone https://github.com/wpscanteam/wpscan
|
||||
|
||||
cd wpscan/
|
||||
@@ -31,19 +36,28 @@ cd wpscan/
|
||||
bundle install && rake install
|
||||
```
|
||||
|
||||
# Updating
|
||||
|
||||
You can update the local database by using ```wpscan --update```
|
||||
|
||||
Updating WPScan itself is either done via ```gem update wpscan``` or the packages manager (this is quite important for distributions such as in Kali Linux: ```apt-get update && apt-get upgrade```) depending how WPScan was (pre)installed
|
||||
|
||||
# Docker
|
||||
|
||||
Pull the repo with ```docker pull wpscanteam/wpscan```
|
||||
|
||||
Enumerating usernames
|
||||
```
|
||||
|
||||
```shell
|
||||
docker run -it --rm wpscanteam/wpscan --url https://target.tld/ --enumerate u
|
||||
```
|
||||
|
||||
Enumerating a range of usernames
|
||||
```
|
||||
|
||||
```shell
|
||||
docker run -it --rm wpscanteam/wpscan --url https://target.tld/ --enumerate u1-100
|
||||
```
|
||||
|
||||
** replace u1-100 with a range of your choice.
|
||||
|
||||
# Usage
|
||||
@@ -57,41 +71,44 @@ The DB is located at ~/.wpscan/db
|
||||
|
||||
WPScan can load all options (including the --url) from configuration files, the following locations are checked (order: first to last):
|
||||
|
||||
* ~/.wpscan/cli_options.json
|
||||
* ~/.wpscan/cli_options.yml
|
||||
* pwd/.wpscan/cli_options.json
|
||||
* pwd/.wpscan/cli_options.yml
|
||||
- ~/.wpscan/cli_options.json
|
||||
- ~/.wpscan/cli_options.yml
|
||||
- pwd/.wpscan/cli_options.json
|
||||
- pwd/.wpscan/cli_options.yml
|
||||
|
||||
If those files exist, options from them will be loaded and overridden if found twice.
|
||||
|
||||
e.g:
|
||||
|
||||
~/.wpscan/cli_options.yml:
|
||||
```
|
||||
|
||||
```yml
|
||||
proxy: 'http://127.0.0.1:8080'
|
||||
verbose: true
|
||||
```
|
||||
|
||||
pwd/.wpscan/cli_options.yml:
|
||||
```
|
||||
|
||||
```yml
|
||||
proxy: 'socks5://127.0.0.1:9090'
|
||||
url: 'http://target.tld'
|
||||
```
|
||||
|
||||
Running ```wpscan``` in the current directory (pwd), is the same as ```wpscan -v --proxy socks5://127.0.0.1:9090 --url http://target.tld```
|
||||
|
||||
|
||||
Enumerating usernames
|
||||
```
|
||||
|
||||
```shell
|
||||
wpscan --url https://target.tld/ --enumerate u
|
||||
```
|
||||
|
||||
Enumerating a range of usernames
|
||||
```
|
||||
|
||||
```shell
|
||||
wpscan --url https://target.tld/ --enumerate u1-100
|
||||
```
|
||||
** replace u1-100 with a range of your choice.
|
||||
|
||||
** replace u1-100 with a range of your choice.
|
||||
|
||||
# PROJECT HOME
|
||||
|
||||
@@ -123,16 +140,16 @@ A commercial use is one intended for commercial advantage or monetary compensati
|
||||
|
||||
Example cases of commercialization are:
|
||||
|
||||
- Using WPScan to provide commercial managed/Software-as-a-Service services.
|
||||
- Distributing WPScan as a commercial product or as part of one.
|
||||
- Using WPScan as a value added service/product.
|
||||
- Using WPScan to provide commercial managed/Software-as-a-Service services.
|
||||
- Distributing WPScan as a commercial product or as part of one.
|
||||
- Using WPScan as a value added service/product.
|
||||
|
||||
Example cases which do not require a commercial license, and thus fall under the terms set out below, include (but are not limited to):
|
||||
|
||||
- Penetration testers (or penetration testing organizations) using WPScan as part of their assessment toolkit.
|
||||
- Penetration Testing Linux Distributions including but not limited to Kali Linux, SamuraiWTF, BackBox Linux.
|
||||
- Using WPScan to test your own systems.
|
||||
- Any non-commercial use of WPScan.
|
||||
- Penetration testers (or penetration testing organizations) using WPScan as part of their assessment toolkit.
|
||||
- Penetration Testing Linux Distributions including but not limited to Kali Linux, SamuraiWTF, BackBox Linux.
|
||||
- Using WPScan to test your own systems.
|
||||
- Any non-commercial use of WPScan.
|
||||
|
||||
If you need to purchase a commercial license or are unsure whether you need to purchase a commercial license contact us - team@wpscan.org.
|
||||
|
||||
@@ -142,9 +159,9 @@ Free-use Terms and Conditions;
|
||||
|
||||
Redistribution is permitted under the following conditions:
|
||||
|
||||
- Unmodified License is provided with WPScan.
|
||||
- Unmodified Copyright notices are provided with WPScan.
|
||||
- Does not conflict with the commercialization clause.
|
||||
- Unmodified License is provided with WPScan.
|
||||
- Unmodified Copyright notices are provided with WPScan.
|
||||
- Does not conflict with the commercialization clause.
|
||||
|
||||
### 4. Copying
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ module WPScan
|
||||
exit(WPScan::ExitCode::VULNERABLE)
|
||||
end
|
||||
|
||||
raise NotWordPressError unless target.wordpress? || parsed_options[:force]
|
||||
raise NotWordPressError unless target.wordpress?(parsed_options[:detection_mode]) || parsed_options[:force]
|
||||
end
|
||||
|
||||
# Loads the related server module in the target
|
||||
|
||||
@@ -98,7 +98,7 @@ module WPScan
|
||||
[
|
||||
OptFilePath.new(
|
||||
['--timthumbs-list FILE-PATH', 'List of timthumbs\' location to use'],
|
||||
exists: true, default: File.join(DB_DIR, 'timthumbs-v3.txt'), advanced: true
|
||||
exists: true, default: DB_DIR.join('timthumbs-v3.txt').to_s, advanced: true
|
||||
),
|
||||
OptChoice.new(
|
||||
['--timthumbs-detection MODE',
|
||||
@@ -113,7 +113,7 @@ module WPScan
|
||||
[
|
||||
OptFilePath.new(
|
||||
['--config-backups-list FILE-PATH', 'List of config backups\' filenames to use'],
|
||||
exists: true, default: File.join(DB_DIR, 'config_backups.txt'), advanced: true
|
||||
exists: true, default: DB_DIR.join('config_backups.txt').to_s, advanced: true
|
||||
),
|
||||
OptChoice.new(
|
||||
['--config-backups-detection MODE',
|
||||
@@ -128,7 +128,7 @@ module WPScan
|
||||
[
|
||||
OptFilePath.new(
|
||||
['--db-exports-list FILE-PATH', 'List of DB exports\' paths to use'],
|
||||
exists: true, default: File.join(DB_DIR, 'db_exports.txt'), advanced: true
|
||||
exists: true, default: DB_DIR.join('db_exports.txt').to_s, advanced: true
|
||||
),
|
||||
OptChoice.new(
|
||||
['--db-exports-detection MODE',
|
||||
|
||||
@@ -3,9 +3,10 @@ module WPScan
|
||||
# Enumeration Methods
|
||||
class Enumeration < CMSScanner::Controller::Base
|
||||
# @param [ String ] type (plugins or themes)
|
||||
# @param [ Symbol ] detection_mode
|
||||
#
|
||||
# @return [ String ] The related enumration message depending on the parsed_options and type supplied
|
||||
def enum_message(type)
|
||||
def enum_message(type, detection_mode)
|
||||
return unless %w[plugins themes].include?(type)
|
||||
|
||||
details = if parsed_options[:enumerate][:"vulnerable_#{type}"]
|
||||
@@ -16,7 +17,20 @@ module WPScan
|
||||
'Most Popular'
|
||||
end
|
||||
|
||||
"Enumerating #{details} #{type.capitalize}"
|
||||
"Enumerating #{details} #{type.capitalize} #{enum_detection_message(detection_mode)}"
|
||||
end
|
||||
|
||||
# @param [ Symbol ] detection_mode
|
||||
#
|
||||
# @return [ String ]
|
||||
def enum_detection_message(detection_mode)
|
||||
detection_method = if detection_mode == :mixed
|
||||
'Passive and Aggressive'
|
||||
else
|
||||
detection_mode.to_s.capitalize
|
||||
end
|
||||
|
||||
"(via #{detection_method} Methods)"
|
||||
end
|
||||
|
||||
# @param [ String ] type (plugins, themes etc)
|
||||
@@ -49,12 +63,15 @@ module WPScan
|
||||
sort: true
|
||||
)
|
||||
|
||||
output('@info', msg: enum_message('plugins')) if user_interaction?
|
||||
output('@info', msg: enum_message('plugins', opts[:mode])) if user_interaction?
|
||||
# Enumerate the plugins & find their versions to avoid doing that when #version
|
||||
# is called in the view
|
||||
plugins = target.plugins(opts)
|
||||
|
||||
output('@info', msg: 'Checking Plugin Versions') if user_interaction? && !plugins.empty?
|
||||
if user_interaction? && !plugins.empty?
|
||||
output('@info',
|
||||
msg: "Checking Plugin Versions #{enum_detection_message(opts[:version_detection][:mode])}")
|
||||
end
|
||||
|
||||
plugins.each(&:version)
|
||||
|
||||
@@ -92,12 +109,15 @@ module WPScan
|
||||
sort: true
|
||||
)
|
||||
|
||||
output('@info', msg: enum_message('themes')) if user_interaction?
|
||||
output('@info', msg: enum_message('themes', opts[:mode])) if user_interaction?
|
||||
# Enumerate the themes & find their versions to avoid doing that when #version
|
||||
# is called in the view
|
||||
themes = target.themes(opts)
|
||||
|
||||
output('@info', msg: 'Checking Theme Versions') if user_interaction? && !themes.empty?
|
||||
if user_interaction? && !themes.empty?
|
||||
output('@info',
|
||||
msg: "Checking Theme Versions #{enum_detection_message(opts[:version_detection][:mode])}")
|
||||
end
|
||||
|
||||
themes.each(&:version)
|
||||
|
||||
@@ -125,21 +145,21 @@ module WPScan
|
||||
def enum_timthumbs
|
||||
opts = default_opts('timthumbs').merge(list: parsed_options[:timthumbs_list])
|
||||
|
||||
output('@info', msg: 'Enumerating Timthumbs') if user_interaction?
|
||||
output('@info', msg: "Enumerating Timthumbs #{enum_detection_message(opts[:mode])}") if user_interaction?
|
||||
output('timthumbs', timthumbs: target.timthumbs(opts))
|
||||
end
|
||||
|
||||
def enum_config_backups
|
||||
opts = default_opts('config_backups').merge(list: parsed_options[:config_backups_list])
|
||||
|
||||
output('@info', msg: 'Enumerating Config Backups') if user_interaction?
|
||||
output('@info', msg: "Enumerating Config Backups #{enum_detection_message(opts[:mode])}") if user_interaction?
|
||||
output('config_backups', config_backups: target.config_backups(opts))
|
||||
end
|
||||
|
||||
def enum_db_exports
|
||||
opts = default_opts('db_exports').merge(list: parsed_options[:db_exports_list])
|
||||
|
||||
output('@info', msg: 'Enumerating DB Exports') if user_interaction?
|
||||
output('@info', msg: "Enumerating DB Exports #{enum_detection_message(opts[:mode])}") if user_interaction?
|
||||
output('db_exports', db_exports: target.db_exports(opts))
|
||||
end
|
||||
|
||||
@@ -147,7 +167,9 @@ module WPScan
|
||||
opts = default_opts('medias').merge(range: parsed_options[:enumerate][:medias])
|
||||
|
||||
if user_interaction?
|
||||
output('@info', msg: 'Enumerating Medias (Permalink setting must be set to "Plain" for those to be detected)')
|
||||
output('@info',
|
||||
msg: "Enumerating Medias #{enum_detection_message(opts[:mode])} "\
|
||||
'(Permalink setting must be set to "Plain" for those to be detected)')
|
||||
end
|
||||
|
||||
output('medias', medias: target.medias(opts))
|
||||
@@ -166,7 +188,7 @@ module WPScan
|
||||
list: parsed_options[:users_list]
|
||||
)
|
||||
|
||||
output('@info', msg: 'Enumerating Users') if user_interaction?
|
||||
output('@info', msg: "Enumerating Users #{enum_detection_message(opts[:mode])}") if user_interaction?
|
||||
output('users', users: target.users(opts))
|
||||
end
|
||||
|
||||
|
||||
@@ -65,8 +65,12 @@ module WPScan
|
||||
when :wp_login
|
||||
WPScan::Finders::Passwords::WpLogin.new(target)
|
||||
when :xmlrpc
|
||||
raise XMLRPCNotDetected unless xmlrpc
|
||||
|
||||
WPScan::Finders::Passwords::XMLRPC.new(xmlrpc)
|
||||
when :xmlrpc_multicall
|
||||
raise XMLRPCNotDetected unless xmlrpc
|
||||
|
||||
WPScan::Finders::Passwords::XMLRPCMulticall.new(xmlrpc)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
require_relative 'interesting_findings/readme'
|
||||
require_relative 'interesting_findings/wp_cron'
|
||||
require_relative 'interesting_findings/multisite'
|
||||
require_relative 'interesting_findings/debug_log'
|
||||
require_relative 'interesting_findings/backup_db'
|
||||
@@ -23,7 +24,7 @@ module WPScan
|
||||
%w[
|
||||
Readme DebugLog FullPathDisclosure BackupDB DuplicatorInstallerLog
|
||||
Multisite MuPlugins Registration UploadDirectoryListing TmmDbMigrate
|
||||
UploadSQLDump EmergencyPwdResetScript
|
||||
UploadSQLDump EmergencyPwdResetScript WPCron
|
||||
].each do |f|
|
||||
finders << InterestingFindings.const_get(f).new(target)
|
||||
end
|
||||
|
||||
31
app/finders/interesting_findings/wp_cron.rb
Normal file
31
app/finders/interesting_findings/wp_cron.rb
Normal file
@@ -0,0 +1,31 @@
|
||||
module WPScan
|
||||
module Finders
|
||||
module InterestingFindings
|
||||
# wp-cron.php finder
|
||||
class WPCron < CMSScanner::Finders::Finder
|
||||
# @return [ InterestingFinding ]
|
||||
def aggressive(_opts = {})
|
||||
res = Browser.get(wp_cron_url)
|
||||
|
||||
return unless res.code == 200
|
||||
|
||||
WPScan::WPCron.new(
|
||||
wp_cron_url,
|
||||
confidence: 60,
|
||||
found_by: DIRECT_ACCESS,
|
||||
references: {
|
||||
url: [
|
||||
'https://www.iplocation.net/defend-wordpress-from-ddos',
|
||||
'https://github.com/wpscanteam/wpscan/issues/1299'
|
||||
]
|
||||
}
|
||||
)
|
||||
end
|
||||
|
||||
def wp_cron_url
|
||||
@wp_cron_url ||= target.url('wp-cron.php')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -4,20 +4,29 @@ module WPScan
|
||||
# WP JSON API
|
||||
#
|
||||
# Since 4.7 - Need more investigation as it seems WP 4.7.1 reduces the exposure, see https://github.com/wpscanteam/wpscan/issues/1038)
|
||||
# For the pagination, see https://github.com/wpscanteam/wpscan/issues/1285
|
||||
#
|
||||
class WpJsonApi < CMSScanner::Finders::Finder
|
||||
MAX_PER_PAGE = 100 # See https://developer.wordpress.org/rest-api/using-the-rest-api/pagination/
|
||||
|
||||
# @param [ Hash ] opts
|
||||
#
|
||||
# @return [ Array<User> ]
|
||||
def aggressive(_opts = {})
|
||||
found = []
|
||||
current_page = 0
|
||||
|
||||
JSON.parse(Browser.get(api_url).body)&.each do |user|
|
||||
found << CMSScanner::User.new(user['slug'],
|
||||
id: user['id'],
|
||||
found_by: found_by,
|
||||
confidence: 100,
|
||||
interesting_entries: [api_url])
|
||||
loop do
|
||||
current_page += 1
|
||||
|
||||
res = Typhoeus.get(api_url, params: { per_page: MAX_PER_PAGE, page: current_page })
|
||||
|
||||
total_pages ||= res.headers['X-WP-TotalPages'].to_i
|
||||
|
||||
users_in_page = users_from_response(res)
|
||||
found += users_in_page
|
||||
|
||||
break if current_page >= total_pages || users_in_page.empty?
|
||||
end
|
||||
|
||||
found
|
||||
@@ -25,6 +34,23 @@ module WPScan
|
||||
found
|
||||
end
|
||||
|
||||
# @param [ Typhoeus::Response ] response
|
||||
#
|
||||
# @return [ Array<User> ] The users from the response
|
||||
def users_from_response(response)
|
||||
found = []
|
||||
|
||||
JSON.parse(response.body)&.each do |user|
|
||||
found << CMSScanner::User.new(user['slug'],
|
||||
id: user['id'],
|
||||
found_by: found_by,
|
||||
confidence: 100,
|
||||
interesting_entries: [response.effective_url])
|
||||
end
|
||||
|
||||
found
|
||||
end
|
||||
|
||||
# @return [ String ] The URL of the API listing the Users
|
||||
def api_url
|
||||
@api_url ||= target.url('wp-json/wp/v2/users/')
|
||||
|
||||
@@ -42,4 +42,7 @@ module WPScan
|
||||
|
||||
class UploadSQLDump < InterestingFinding
|
||||
end
|
||||
|
||||
class WPCron < InterestingFinding
|
||||
end
|
||||
end
|
||||
|
||||
@@ -33,7 +33,7 @@ module WPScan
|
||||
include CMSScanner
|
||||
|
||||
APP_DIR = Pathname.new(__FILE__).dirname.join('..', 'app').expand_path
|
||||
DB_DIR = File.join(Dir.home, '.wpscan', 'db')
|
||||
DB_DIR = Pathname.new(Dir.home).join('.wpscan', 'db')
|
||||
|
||||
# Override, otherwise it would be returned as 'wp_scan'
|
||||
#
|
||||
|
||||
@@ -5,7 +5,7 @@ module WPScan
|
||||
|
||||
# @return [ String ] The path to the user agents list
|
||||
def user_agents_list
|
||||
@user_agents_list ||= File.join(DB_DIR, 'user-agents.txt')
|
||||
@user_agents_list ||= DB_DIR.join('user-agents.txt').to_s
|
||||
end
|
||||
|
||||
# @return [ String ]
|
||||
|
||||
@@ -4,7 +4,7 @@ module WPScan
|
||||
class Base
|
||||
# @return [ String ]
|
||||
def self.db_file
|
||||
@db_file ||= File.join(DB_DIR, 'dynamic_finders.yml')
|
||||
@db_file ||= DB_DIR.join('dynamic_finders.yml').to_s
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
|
||||
@@ -33,7 +33,7 @@ module WPScan
|
||||
|
||||
# @return [ String ]
|
||||
def self.wp_fingerprints_path
|
||||
@wp_fingerprints_path ||= File.join(DB_DIR, 'wp_fingerprints.json')
|
||||
@wp_fingerprints_path ||= DB_DIR.join('wp_fingerprints.json').to_s
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
|
||||
@@ -4,7 +4,7 @@ module WPScan
|
||||
class Plugin < WpItem
|
||||
# @return [ String ]
|
||||
def self.db_file
|
||||
@db_file ||= File.join(DB_DIR, 'plugins.json')
|
||||
@db_file ||= DB_DIR.join('plugins.json').to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,7 +4,7 @@ module WPScan
|
||||
class Theme < WpItem
|
||||
# @return [ String ]
|
||||
def self.db_file
|
||||
@db_file ||= File.join(DB_DIR, 'themes.json')
|
||||
@db_file ||= DB_DIR.join('themes.json').to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -15,11 +15,11 @@ module WPScan
|
||||
attr_reader :repo_directory
|
||||
|
||||
def initialize(repo_directory)
|
||||
@repo_directory = repo_directory
|
||||
@repo_directory = Pathname.new(repo_directory).expand_path
|
||||
|
||||
FileUtils.mkdir_p(repo_directory) unless Dir.exist?(repo_directory)
|
||||
FileUtils.mkdir_p(repo_directory.to_s) unless Dir.exist?(repo_directory.to_s)
|
||||
|
||||
raise "#{repo_directory} is not writable" unless Pathname.new(repo_directory).writable?
|
||||
raise "#{repo_directory} is not writable" unless repo_directory.writable?
|
||||
|
||||
delete_old_files
|
||||
end
|
||||
@@ -41,7 +41,7 @@ module WPScan
|
||||
|
||||
# @return [ String ]
|
||||
def last_update_file
|
||||
@last_update_file ||= File.join(repo_directory, '.last_update')
|
||||
@last_update_file ||= repo_directory.join('.last_update').to_s
|
||||
end
|
||||
|
||||
# @return [ Boolean ]
|
||||
@@ -54,7 +54,7 @@ module WPScan
|
||||
# @return [ Boolean ]
|
||||
def missing_files?
|
||||
FILES.each do |file|
|
||||
return true unless File.exist?(File.join(repo_directory, file))
|
||||
return true unless File.exist?(repo_directory.join(file))
|
||||
end
|
||||
false
|
||||
end
|
||||
@@ -85,16 +85,18 @@ module WPScan
|
||||
res.body.chomp
|
||||
end
|
||||
|
||||
# @return [ String ]
|
||||
def local_file_path(filename)
|
||||
File.join(repo_directory, filename.to_s)
|
||||
repo_directory.join(filename.to_s).to_s
|
||||
end
|
||||
|
||||
def local_file_checksum(filename)
|
||||
Digest::SHA512.file(local_file_path(filename)).hexdigest
|
||||
end
|
||||
|
||||
# @return [ String ]
|
||||
def backup_file_path(filename)
|
||||
File.join(repo_directory, "#{filename}.back")
|
||||
repo_directory.join("#{filename}.back").to_s
|
||||
end
|
||||
|
||||
def create_backup(filename)
|
||||
|
||||
@@ -4,7 +4,7 @@ module WPScan
|
||||
class Version < WpItem
|
||||
# @return [ String ]
|
||||
def self.db_file
|
||||
@db_file ||= File.join(DB_DIR, 'wordpresses.json')
|
||||
@db_file ||= DB_DIR.join('wordpresses.json').to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,3 +6,4 @@ end
|
||||
require_relative 'errors/http'
|
||||
require_relative 'errors/update'
|
||||
require_relative 'errors/wordpress'
|
||||
require_relative 'errors/xmlrpc'
|
||||
|
||||
8
lib/wpscan/errors/xmlrpc.rb
Normal file
8
lib/wpscan/errors/xmlrpc.rb
Normal file
@@ -0,0 +1,8 @@
|
||||
module WPScan
|
||||
# XML-RPC Not Detected
|
||||
class XMLRPCNotDetected < Error
|
||||
def to_s
|
||||
'The XML-RPC Interface was not detected.'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -18,10 +18,10 @@ module WPScan
|
||||
alias registration_enabled? registration_enabled
|
||||
alias mu_plugins? mu_plugins
|
||||
|
||||
# @param [ Symbol ] detection_mode
|
||||
#
|
||||
# @return [ Boolean ]
|
||||
def wordpress?
|
||||
# res = Browser.get(url)
|
||||
|
||||
def wordpress?(detection_mode)
|
||||
in_scope_urls(homepage_res) do |url|
|
||||
return true if Addressable::URI.parse(url).path.match(WORDPRESS_PATTERN)
|
||||
end
|
||||
@@ -32,6 +32,14 @@ module WPScan
|
||||
|
||||
return true unless comments_from_page(/wordpress/i, homepage_res).empty?
|
||||
|
||||
if %i[mixed aggressive].include?(detection_mode)
|
||||
%w[wp-admin/install.php wp-login.php].each do |path|
|
||||
in_scope_urls(Browser.get_and_follow_location(url(path))).each do |url|
|
||||
return true if Addressable::URI.parse(url).path.match(WORDPRESS_PATTERN)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Version
|
||||
module WPScan
|
||||
VERSION = '3.4.3'.freeze
|
||||
VERSION = '3.4.5'.freeze
|
||||
end
|
||||
|
||||
@@ -165,7 +165,7 @@ describe WPScan::Controller::Core do
|
||||
|
||||
before do
|
||||
expect(core).to receive(:load_server_module)
|
||||
expect(core.target).to receive(:wordpress?).and_return(true)
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true)
|
||||
end
|
||||
|
||||
it 'calls the formatter when started and finished to update the db' do
|
||||
@@ -208,7 +208,7 @@ describe WPScan::Controller::Core do
|
||||
|
||||
context 'when wordpress' do
|
||||
it 'does not raise an error' do
|
||||
expect(core.target).to receive(:wordpress?).and_return(true)
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true)
|
||||
|
||||
expect { core.before_scan }.to_not raise_error
|
||||
end
|
||||
@@ -216,7 +216,7 @@ describe WPScan::Controller::Core do
|
||||
|
||||
context 'when not wordpress' do
|
||||
it 'raises an error' do
|
||||
expect(core.target).to receive(:wordpress?).and_return(false)
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(false)
|
||||
|
||||
expect { core.before_scan }.to raise_error(WPScan::NotWordPressError)
|
||||
end
|
||||
@@ -237,7 +237,7 @@ describe WPScan::Controller::Core do
|
||||
context 'when wordpress' do
|
||||
before do
|
||||
expect(core).to receive(:load_server_module)
|
||||
expect(core.target).to receive(:wordpress?).and_return(true)
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true)
|
||||
end
|
||||
|
||||
it 'does not raise any error' do
|
||||
@@ -248,7 +248,7 @@ describe WPScan::Controller::Core do
|
||||
context 'when not wordpress' do
|
||||
before do
|
||||
expect(core).to receive(:load_server_module)
|
||||
expect(core.target).to receive(:wordpress?).and_return(false)
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(false)
|
||||
end
|
||||
|
||||
context 'when no --force' do
|
||||
|
||||
@@ -14,10 +14,11 @@ describe WPScan::Controller::Enumeration do
|
||||
end
|
||||
|
||||
describe '#enum_message' do
|
||||
after { expect(controller.enum_message(type)).to eql @expected }
|
||||
after { expect(controller.enum_message(type, detection_mode)).to eql @expected }
|
||||
|
||||
context 'when type argument is incorrect' do
|
||||
let(:type) { 'spec' }
|
||||
let(:detection_mode) { :mixed }
|
||||
|
||||
it 'returns nil' do
|
||||
@expected = nil
|
||||
@@ -27,28 +28,31 @@ describe WPScan::Controller::Enumeration do
|
||||
%w[plugins themes].each do |t|
|
||||
context "type = #{t}" do
|
||||
let(:type) { t }
|
||||
let(:detection_mode) { :mixed }
|
||||
|
||||
context 'when vulnerable' do
|
||||
let(:cli_args) { "#{super()} -e v#{type[0]}" }
|
||||
|
||||
it 'returns the expected string' do
|
||||
@expected = "Enumerating Vulnerable #{type.capitalize}"
|
||||
@expected = "Enumerating Vulnerable #{type.capitalize} (via Passive and Aggressive Methods)"
|
||||
end
|
||||
end
|
||||
|
||||
context 'when all' do
|
||||
let(:cli_args) { "#{super()} -e a#{type[0]}" }
|
||||
let(:detection_mode) { :passive }
|
||||
|
||||
it 'returns the expected string' do
|
||||
@expected = "Enumerating All #{type.capitalize}"
|
||||
@expected = "Enumerating All #{type.capitalize} (via Passive Methods)"
|
||||
end
|
||||
end
|
||||
|
||||
context 'when most popular' do
|
||||
let(:cli_args) { "#{super()} -e #{type[0]}" }
|
||||
let(:detection_mode) { :aggressive }
|
||||
|
||||
it 'returns the expected string' do
|
||||
@expected = "Enumerating Most Popular #{type.capitalize}"
|
||||
@expected = "Enumerating Most Popular #{type.capitalize} (via Aggressive Methods)"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -66,6 +66,29 @@ describe WPScan::Controller::PasswordAttack do
|
||||
end
|
||||
|
||||
context 'when xmlrpc' do
|
||||
context 'when xmlrpc not detected on target' do
|
||||
before do
|
||||
expect(controller.target).to receive(:xmlrpc).and_return(nil)
|
||||
end
|
||||
|
||||
context 'when single xmlrpc' do
|
||||
let(:attack) { 'xmlrpc' }
|
||||
|
||||
it 'raises an error' do
|
||||
expect { controller.attacker }.to raise_error(WPScan::XMLRPCNotDetected)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when xmlrpc-multicall' do
|
||||
let(:attack) { 'xmlrpc-multicall' }
|
||||
|
||||
it 'raises an error' do
|
||||
expect { controller.attacker }.to raise_error(WPScan::XMLRPCNotDetected)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when xmlrpc detected on target' do
|
||||
before do
|
||||
expect(controller.target).to receive(:xmlrpc).and_return(WPScan::XMLRPC.new("#{target_url}/xmlrpc.php"))
|
||||
end
|
||||
@@ -89,6 +112,7 @@ describe WPScan::Controller::PasswordAttack do
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when automatic detection' do
|
||||
before { expect(controller.target).to receive(:xmlrpc).and_return(xmlrpc) }
|
||||
|
||||
@@ -2,8 +2,8 @@ describe WPScan::Finders::ConfigBackups::KnownFilenames do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'config_backups') }
|
||||
let(:opts) { { list: File.join(WPScan::DB_DIR, 'config_backups.txt') } }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('config_backups') }
|
||||
let(:opts) { { list: WPScan::DB_DIR.join('config_backups.txt').to_s } }
|
||||
|
||||
describe '#aggressive' do
|
||||
before do
|
||||
@@ -23,7 +23,7 @@ describe WPScan::Finders::ConfigBackups::KnownFilenames do
|
||||
|
||||
context 'when some files exist' do
|
||||
let(:files) { ['%23wp-config.php%23', 'wp-config.bak'] }
|
||||
let(:config_backup) { File.read(File.join(fixtures, 'wp-config.php')) }
|
||||
let(:config_backup) { File.read(fixtures.join('wp-config.php')) }
|
||||
|
||||
before do
|
||||
files.each do |file|
|
||||
|
||||
@@ -2,8 +2,8 @@ describe WPScan::Finders::DbExports::KnownLocations do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/aa/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'db_exports') }
|
||||
let(:opts) { { list: File.join(WPScan::DB_DIR, 'db_exports.txt') } }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('db_exports') }
|
||||
let(:opts) { { list: WPScan::DB_DIR.join('db_exports.txt').to_s } }
|
||||
|
||||
describe '#potential_urls' do
|
||||
before do
|
||||
@@ -40,7 +40,7 @@ describe WPScan::Finders::DbExports::KnownLocations do
|
||||
|
||||
context 'when some files exist' do
|
||||
let(:files) { %w[ex.sql backups/db_backup.sql] }
|
||||
let(:db_export) { File.read(File.join(fixtures, 'dump.sql')) }
|
||||
let(:db_export) { File.read(fixtures.join('dump.sql')) }
|
||||
|
||||
before do
|
||||
files.each do |file|
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::BackupDB do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'backup_db') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'backup_db') }
|
||||
let(:wp_content) { 'wp-content' }
|
||||
let(:dir_url) { target.url("#{wp_content}/backup-db/") }
|
||||
|
||||
@@ -51,7 +51,7 @@ describe WPScan::Finders::InterestingFindings::BackupDB do
|
||||
end
|
||||
|
||||
context 'when directory listing enabled' do
|
||||
let(:body) { File.read(File.join(fixtures, 'dir_listing.html')) }
|
||||
let(:body) { File.read(fixtures.join('dir_listing.html')) }
|
||||
|
||||
it 'returns the expected interesting_findings attribute' do
|
||||
@expected_entries = %w[sqldump.sql test.txt]
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::DebugLog do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'debug_log') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'debug_log') }
|
||||
let(:wp_content) { 'wp-content' }
|
||||
let(:log_url) { target.url("#{wp_content}/debug.log") }
|
||||
|
||||
@@ -18,7 +18,7 @@ describe WPScan::Finders::InterestingFindings::DebugLog do
|
||||
end
|
||||
|
||||
context 'when a log file' do
|
||||
let(:body) { File.read(File.join(fixtures, 'debug.log')) }
|
||||
let(:body) { File.read(fixtures.join('debug.log')) }
|
||||
|
||||
it 'returns the InterestingFinding' do
|
||||
expect(finder.aggressive).to eql WPScan::DebugLog.new(
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::DuplicatorInstallerLog do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'duplicator_installer_log') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'duplicator_installer_log') }
|
||||
let(:filename) { 'installer-log.txt' }
|
||||
let(:log_url) { target.url(filename) }
|
||||
|
||||
@@ -19,7 +19,7 @@ describe WPScan::Finders::InterestingFindings::DuplicatorInstallerLog do
|
||||
end
|
||||
|
||||
context 'when the body matches' do
|
||||
let(:body) { File.read(File.join(fixtures, filename)) }
|
||||
let(:body) { File.read(fixtures.join(filename)) }
|
||||
|
||||
it 'returns the InterestingFinding' do
|
||||
expect(finder.aggressive).to eql WPScan::DuplicatorInstallerLog.new(
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::EmergencyPwdResetScript do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'emergency_pwd_reset_script') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'emergency_pwd_reset_script') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::FullPathDisclosure do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'fpd') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'fpd') }
|
||||
let(:file_url) { target.url('wp-includes/rss-functions.php') }
|
||||
|
||||
describe '#aggressive' do
|
||||
@@ -18,7 +18,7 @@ describe WPScan::Finders::InterestingFindings::FullPathDisclosure do
|
||||
end
|
||||
|
||||
context 'when a log file' do
|
||||
let(:body) { File.read(File.join(fixtures, 'rss_functions.php')) }
|
||||
let(:body) { File.read(fixtures.join('rss_functions.php')) }
|
||||
|
||||
it 'returns the InterestingFinding' do
|
||||
found = finder.aggressive
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::MuPlugins do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'mu_plugins') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'mu_plugins') }
|
||||
|
||||
describe '#passive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::Multisite do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'multisite') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'multisite') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::Readme do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'readme') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'readme') }
|
||||
|
||||
describe '#aggressive' do
|
||||
before do
|
||||
@@ -20,7 +20,7 @@ describe WPScan::Finders::InterestingFindings::Readme do
|
||||
# TODO: case when multiple files are present ? (should return only the first one found)
|
||||
context 'when a file exists' do
|
||||
let(:file) { finder.potential_files.sample }
|
||||
let(:readme) { File.read(File.join(fixtures, 'readme-3.9.2.html')) }
|
||||
let(:readme) { File.read(fixtures.join('readme-3.9.2.html')) }
|
||||
|
||||
before { stub_request(:get, target.url(file)).to_return(body: readme) }
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::Registration do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'registration') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'registration') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::TmmDbMigrate do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'tmm_db_migrate') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'tmm_db_migrate') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::UploadDirectoryListing do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'upload_directory_listing') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'upload_directory_listing') }
|
||||
let(:wp_content) { 'wp-content' }
|
||||
|
||||
describe '#aggressive' do
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::InterestingFindings::UploadSQLDump do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'interesting_findings', 'upload_sql_dump') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('interesting_findings', 'upload_sql_dump') }
|
||||
let(:wp_content) { 'wp-content' }
|
||||
|
||||
describe '#aggressive' do
|
||||
@@ -21,7 +21,7 @@ describe WPScan::Finders::InterestingFindings::UploadSQLDump do
|
||||
context 'when a 200' do
|
||||
before do
|
||||
stub_request(:get, finder.dump_url)
|
||||
.to_return(status: 200, body: File.read(File.join(fixtures, fixture)))
|
||||
.to_return(status: 200, body: File.read(fixtures.join(fixture)))
|
||||
end
|
||||
|
||||
context 'when the body does not match a SQL dump' do
|
||||
|
||||
30
spec/app/finders/interesting_findings/wp_cron_spec.rb
Normal file
30
spec/app/finders/interesting_findings/wp_cron_spec.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
describe WPScan::Finders::InterestingFindings::WPCron do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:wp_content) { 'wp-content' }
|
||||
|
||||
before { expect(target).to receive(:sub_dir).at_least(1).and_return(false) }
|
||||
|
||||
describe '#aggressive' do
|
||||
before { stub_request(:get, finder.wp_cron_url).to_return(status: status) }
|
||||
|
||||
context 'when 200' do
|
||||
let(:status) { 200 }
|
||||
|
||||
it 'returns the InterestingFinding' do
|
||||
expect(finder.aggressive).to eql WPScan::WPCron.new(
|
||||
finder.wp_cron_url,
|
||||
confidence: 60,
|
||||
found_by: described_class::DIRECT_ACCESS
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
context 'otherwise' do
|
||||
let(:status) { 403 }
|
||||
|
||||
its(:aggressive) { should be_nil }
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -2,11 +2,11 @@ describe WPScan::Finders::MainTheme::CssStyle do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'main_theme', 'css_style') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('main_theme', 'css_style') }
|
||||
|
||||
describe '#passive' do
|
||||
after do
|
||||
stub_request(:get, url).to_return(body: File.read(File.join(fixtures, fixture)))
|
||||
stub_request(:get, url).to_return(body: File.read(fixtures.join(fixture)))
|
||||
expect(finder.passive).to eql @expected
|
||||
end
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::MainTheme::UrlsInHomepage do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'main_theme', 'urls_in_homepage') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('main_theme', 'urls_in_homepage') }
|
||||
|
||||
it_behaves_like 'App::Finders::WpItems::URLsInHomepage' do
|
||||
let(:type) { 'themes' }
|
||||
@@ -15,7 +15,7 @@ describe WPScan::Finders::MainTheme::UrlsInHomepage do
|
||||
describe '#passive' do
|
||||
before do
|
||||
stub_request(:get, /.*.css/)
|
||||
stub_request(:get, target.url).to_return(body: File.read(File.join(fixtures, 'found.html')))
|
||||
stub_request(:get, target.url).to_return(body: File.read(fixtures.join('found.html')))
|
||||
end
|
||||
|
||||
it 'returns the expected Themes' do
|
||||
|
||||
@@ -2,11 +2,11 @@ describe WPScan::Finders::MainTheme::WooFrameworkMetaGenerator do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'main_theme', 'woo_framework_meta_generator') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('main_theme', 'woo_framework_meta_generator') }
|
||||
|
||||
describe '#passive' do
|
||||
after do
|
||||
stub_request(:get, url).to_return(body: File.read(File.join(fixtures, @file)))
|
||||
stub_request(:get, url).to_return(body: File.read(fixtures.join(@file)))
|
||||
|
||||
expect(finder.passive).to eql @expected
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Medias::AttachmentBruteForcing do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'medias', 'attachment_brute_forcing') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('medias', 'attachment_brute_forcing') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::PluginVersion::Readme do
|
||||
subject(:finder) { described_class.new(plugin) }
|
||||
let(:plugin) { WPScan::Plugin.new('spec', target) }
|
||||
let(:target) { WPScan::Target.new('http://wp.lab/') }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'plugin_version', 'readme') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('plugin_version', 'readme') }
|
||||
|
||||
def version(number, found_by, confidence)
|
||||
WPScan::Version.new(
|
||||
@@ -26,7 +26,7 @@ describe WPScan::Finders::PluginVersion::Readme do
|
||||
|
||||
after do
|
||||
stub_request(:get, /.*/).to_return(status: 404)
|
||||
stub_request(:get, readme_url).to_return(body: File.read(File.join(fixtures, @file)))
|
||||
stub_request(:get, readme_url).to_return(body: File.read(fixtures.join(@file)))
|
||||
|
||||
expect(finder.aggressive).to eql @expected
|
||||
end
|
||||
|
||||
@@ -3,7 +3,7 @@ describe WPScan::Finders::Plugins::BodyPattern do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(DYNAMIC_FINDERS_FIXTURES, 'plugin_version') }
|
||||
let(:fixtures) { DYNAMIC_FINDERS_FIXTURES.join('plugin_version') }
|
||||
|
||||
let(:expected_all) { df_expected_all['plugins'] }
|
||||
let(:item_class) { WPScan::Plugin }
|
||||
|
||||
@@ -3,7 +3,7 @@ describe WPScan::Finders::Plugins::Comment do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(DYNAMIC_FINDERS_FIXTURES, 'plugin_version') }
|
||||
let(:fixtures) { DYNAMIC_FINDERS_FIXTURES.join('plugin_version') }
|
||||
|
||||
let(:expected_all) { df_expected_all['plugins'] }
|
||||
let(:item_class) { WPScan::Plugin }
|
||||
|
||||
@@ -5,7 +5,7 @@ describe WPScan::Finders::Plugins::ConfigParser do
|
||||
# subject(:finder) { described_class.new(target) }
|
||||
# let(:target) { WPScan::Target.new(url) }
|
||||
# let(:url) { 'http://wp.lab/' }
|
||||
# let(:fixtures) { File.join(DYNAMIC_FINDERS_FIXTURES, 'plugin_version') }
|
||||
# let(:fixtures) { DYNAMIC_FINDERS_FIXTURES.join('plugin_version') }
|
||||
#
|
||||
# let(:expected_all) { df_expected_all['plugins'] }
|
||||
# let(:item_class) { WPScan::Plugin }
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Plugins::HeaderPattern do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(DYNAMIC_FINDERS_FIXTURES, 'plugin_version') }
|
||||
let(:fixtures) { DYNAMIC_FINDERS_FIXTURES.join('plugin_version') }
|
||||
|
||||
def plugin(slug)
|
||||
WPScan::Plugin.new(slug, target)
|
||||
@@ -29,7 +29,7 @@ describe WPScan::Finders::Plugins::HeaderPattern do
|
||||
context 'when headers' do
|
||||
before { expect(target).to receive(:content_dir).and_return('wp-content') }
|
||||
|
||||
let(:headers) { JSON.parse(File.read(File.join(fixtures, 'header_pattern_passive_all.html'))) }
|
||||
let(:headers) { JSON.parse(File.read(fixtures.join('header_pattern_passive_all.html'))) }
|
||||
|
||||
it 'returns the expected plugins' do
|
||||
@expected = []
|
||||
|
||||
@@ -3,7 +3,7 @@ describe WPScan::Finders::Plugins::JavascriptVar do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(DYNAMIC_FINDERS_FIXTURES, 'plugin_version') }
|
||||
let(:fixtures) { DYNAMIC_FINDERS_FIXTURES.join('plugin_version') }
|
||||
|
||||
let(:expected_all) { df_expected_all['plugins'] }
|
||||
let(:item_class) { WPScan::Plugin }
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Plugins::KnownLocations do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'plugins', 'known_locations') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('plugins', 'known_locations') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Plugins::QueryParameter do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(DYNAMIC_FINDERS_FIXTURES, 'plugin_version') }
|
||||
let(:fixtures) { DYNAMIC_FINDERS_FIXTURES.join('plugin_version') }
|
||||
|
||||
describe '#passive' do
|
||||
its(:passive) { should be nil }
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Plugins::UrlsInHomepage do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'plugins', 'urls_in_homepage') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('plugins', 'urls_in_homepage') }
|
||||
|
||||
it_behaves_like 'App::Finders::WpItems::URLsInHomepage' do
|
||||
let(:type) { 'plugins' }
|
||||
@@ -15,7 +15,7 @@ describe WPScan::Finders::Plugins::UrlsInHomepage do
|
||||
describe '#passive' do
|
||||
before do
|
||||
stub_request(:get, finder.target.url)
|
||||
.to_return(body: File.read(File.join(fixtures, 'found.html')))
|
||||
.to_return(body: File.read(fixtures.join('found.html')))
|
||||
|
||||
expect(finder.target).to receive(:content_dir).at_least(1).and_return('wp-content')
|
||||
end
|
||||
|
||||
@@ -3,7 +3,7 @@ describe WPScan::Finders::Plugins::Xpath do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(DYNAMIC_FINDERS_FIXTURES, 'plugin_version') }
|
||||
let(:fixtures) { DYNAMIC_FINDERS_FIXTURES.join('plugin_version') }
|
||||
|
||||
let(:expected_all) { df_expected_all['plugins'] }
|
||||
let(:item_class) { WPScan::Plugin }
|
||||
|
||||
@@ -2,10 +2,10 @@ describe WPScan::Finders::ThemeVersion::Style do
|
||||
subject(:finder) { described_class.new(theme) }
|
||||
let(:theme) { WPScan::Theme.new('spec', target) }
|
||||
let(:target) { WPScan::Target.new('http://wp.lab/') }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'theme_version', 'style') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('theme_version', 'style') }
|
||||
|
||||
before :all do
|
||||
Typhoeus::Config.cache = WPScan::Cache::Typhoeus.new(File.join(SPECS, 'cache'))
|
||||
Typhoeus::Config.cache = WPScan::Cache::Typhoeus.new(SPECS.join('cache'))
|
||||
end
|
||||
|
||||
before do
|
||||
@@ -77,7 +77,7 @@ describe WPScan::Finders::ThemeVersion::Style do
|
||||
'no_version' => nil
|
||||
}.each do |file, expected_version|
|
||||
context "when #{file}" do
|
||||
let(:style_body) { File.new(File.join(fixtures, "#{file}.css")) }
|
||||
let(:style_body) { File.new(fixtures.join("#{file}.css")) }
|
||||
|
||||
it 'returns the expected version' do
|
||||
expected = if expected_version
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::ThemeVersion::WooFrameworkMetaGenerator do
|
||||
subject(:finder) { described_class.new(theme) }
|
||||
let(:theme) { WPScan::Theme.new(slug, target) }
|
||||
let(:target) { WPScan::Target.new('http://wp.lab/') }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'theme_version', 'woo_framework_meta_generator') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('theme_version', 'woo_framework_meta_generator') }
|
||||
|
||||
before do
|
||||
expect(target).to receive(:content_dir).and_return('wp-content')
|
||||
@@ -11,7 +11,7 @@ describe WPScan::Finders::ThemeVersion::WooFrameworkMetaGenerator do
|
||||
|
||||
describe '#passive' do
|
||||
after do
|
||||
stub_request(:get, target.url).to_return(body: File.read(File.join(fixtures, 'editorial-1.3.5.html')))
|
||||
stub_request(:get, target.url).to_return(body: File.read(fixtures.join('editorial-1.3.5.html')))
|
||||
|
||||
expect(finder.passive).to eql @expected
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Themes::KnownLocations do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'themes', 'known_locations') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('themes', 'known_locations') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Themes::UrlsInHomepage do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'themes', 'urls_in_homepage') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('themes', 'urls_in_homepage') }
|
||||
|
||||
it_behaves_like 'App::Finders::WpItems::URLsInHomepage' do
|
||||
let(:type) { 'themes' }
|
||||
|
||||
@@ -2,10 +2,10 @@ describe WPScan::Finders::TimthumbVersion::BadRequest do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Timthumb.new(url) }
|
||||
let(:url) { 'http://ex.lo/timthumb.php' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'timthumb_version', 'bad_request') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('timthumb_version', 'bad_request') }
|
||||
|
||||
describe '#aggressive' do
|
||||
before { stub_request(:get, url).to_return(body: File.read(File.join(fixtures, file))) }
|
||||
before { stub_request(:get, url).to_return(body: File.read(fixtures.join(file))) }
|
||||
after { expect(finder.aggressive).to eql @expected }
|
||||
|
||||
context 'when no version' do
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Timthumbs::KnownLocations do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'timthumbs', 'known_locations') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('timthumbs', 'known_locations') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Users::AuthorIdBruteForcing do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'users', 'author_id_brute_forcing') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('users', 'author_id_brute_forcing') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
@@ -24,7 +24,7 @@ describe WPScan::Finders::Users::AuthorIdBruteForcing do
|
||||
'2.9.2', '2.9.2-permalink'
|
||||
].each do |file|
|
||||
it "returns 'admin' from #{file}.html" do
|
||||
body = File.read(File.join(fixtures, "#{file}.html"))
|
||||
body = File.read(fixtures.join("#{file}.html"))
|
||||
res = Typhoeus::Response.new(body: body)
|
||||
|
||||
expect(finder.username_from_response(res)).to eql 'admin'
|
||||
@@ -40,7 +40,7 @@ describe WPScan::Finders::Users::AuthorIdBruteForcing do
|
||||
'2.9.2', '2.9.2-permalink'
|
||||
].each do |file|
|
||||
it "returns 'admin display_name' from #{file}.html" do
|
||||
body = File.read(File.join(fixtures, "#{file}.html"))
|
||||
body = File.read(fixtures.join("#{file}.html"))
|
||||
|
||||
expect(finder.display_name_from_body(body)).to eql 'admin display_name'
|
||||
end
|
||||
@@ -50,7 +50,7 @@ describe WPScan::Finders::Users::AuthorIdBruteForcing do
|
||||
context 'when no display_name' do
|
||||
['4.1.1', '3.0', '2.9.2'].each do |file|
|
||||
it "returns nil for #{file}-empty.html" do
|
||||
body = File.read(File.join(fixtures, "#{file}-empty.html"))
|
||||
body = File.read(fixtures.join("#{file}-empty.html"))
|
||||
|
||||
expect(finder.display_name_from_body(body)).to eql nil
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Users::AuthorPosts do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'users', 'author_posts') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('users', 'author_posts') }
|
||||
|
||||
describe '#passive' do
|
||||
xit
|
||||
@@ -10,7 +10,7 @@ describe WPScan::Finders::Users::AuthorPosts do
|
||||
|
||||
describe '#potential_usernames' do
|
||||
it 'returns the expected usernames' do
|
||||
res = Typhoeus::Response.new(body: File.read(File.join(fixtures, 'potential_usernames.html')))
|
||||
res = Typhoeus::Response.new(body: File.read(fixtures.join('potential_usernames.html')))
|
||||
|
||||
results = finder.potential_usernames(res)
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Users::LoginErrorMessages do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'users', 'login_error_messages') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('users', 'login_error_messages') }
|
||||
|
||||
describe '#aggressive' do
|
||||
xit
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Users::OembedApi do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'users', 'oembed_api') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('users', 'oembed_api') }
|
||||
|
||||
describe '#aggressive' do
|
||||
before do
|
||||
@@ -18,14 +18,14 @@ describe WPScan::Finders::Users::OembedApi do
|
||||
|
||||
context 'when a JSON response' do
|
||||
context 'when 404' do
|
||||
let(:body) { File.read(File.join(fixtures, '404.json')) }
|
||||
let(:body) { File.read(fixtures.join('404.json')) }
|
||||
|
||||
its(:aggressive) { should eql([]) }
|
||||
end
|
||||
|
||||
context 'when 200' do
|
||||
context 'when author_url present' do
|
||||
let(:body) { File.read(File.join(fixtures, '200_author_url.json')) }
|
||||
let(:body) { File.read(fixtures.join('200_author_url.json')) }
|
||||
|
||||
it 'returns the expected array of users' do
|
||||
users = finder.aggressive
|
||||
@@ -42,7 +42,7 @@ describe WPScan::Finders::Users::OembedApi do
|
||||
end
|
||||
|
||||
context 'when author_url not present but author_name' do
|
||||
let(:body) { File.read(File.join(fixtures, '200_author_name.json')) }
|
||||
let(:body) { File.read(fixtures.join('200_author_name.json')) }
|
||||
|
||||
it 'returns the expected array of users' do
|
||||
users = finder.aggressive
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::Users::RSSGenerator do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { Pathname.new(FINDERS_FIXTURES).join('users', 'rss_generator') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('users', 'rss_generator') }
|
||||
let(:rss_fixture) { File.read(fixtures.join('feed.xml')) }
|
||||
|
||||
describe '#passive, #aggressive' do
|
||||
@@ -39,7 +39,7 @@ describe WPScan::Finders::Users::RSSGenerator do
|
||||
end
|
||||
|
||||
context 'when RSS link in homepage' do
|
||||
let(:homepage_fixture) { File.join(fixtures, 'homepage_links.html') }
|
||||
let(:homepage_fixture) { fixtures.join('homepage_links.html') }
|
||||
|
||||
it 'returns the expected from #passive' do
|
||||
stub_request(:get, target.url('feed/')).to_return(body: rss_fixture)
|
||||
|
||||
@@ -2,12 +2,16 @@ describe WPScan::Finders::Users::WpJsonApi do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'users', 'wp_json_api') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('users', 'wp_json_api') }
|
||||
|
||||
describe '#aggressive' do
|
||||
before { allow(target).to receive(:sub_dir).and_return(false) }
|
||||
|
||||
context 'when only one page of results' do
|
||||
before do
|
||||
allow(target).to receive(:sub_dir).and_return(false)
|
||||
stub_request(:get, finder.api_url).to_return(body: body)
|
||||
stub_request(:get, finder.api_url)
|
||||
.with(query: { page: 1, per_page: 100 })
|
||||
.to_return(body: body, headers: {})
|
||||
end
|
||||
|
||||
context 'when not a JSON response' do
|
||||
@@ -18,13 +22,13 @@ describe WPScan::Finders::Users::WpJsonApi do
|
||||
|
||||
context 'when a JSON response' do
|
||||
context 'when unauthorised' do
|
||||
let(:body) { File.read(File.join(fixtures, '401.json')) }
|
||||
let(:body) { File.read(fixtures.join('401.json')) }
|
||||
|
||||
its(:aggressive) { should eql([]) }
|
||||
end
|
||||
|
||||
context 'when limited exposure (WP >= 4.7.1)' do
|
||||
let(:body) { File.read(File.join(fixtures, '4.7.2.json')) }
|
||||
let(:body) { File.read(fixtures.join('4.7.2.json')) }
|
||||
|
||||
it 'returns the expected array of users' do
|
||||
users = finder.aggressive
|
||||
@@ -36,9 +40,42 @@ describe WPScan::Finders::Users::WpJsonApi do
|
||||
expect(user.id).to eql 1
|
||||
expect(user.username).to eql 'admin'
|
||||
expect(user.confidence).to eql 100
|
||||
expect(user.interesting_entries).to eql ['http://wp.lab/wp-json/wp/v2/users/']
|
||||
expect(user.interesting_entries).to eql ['http://wp.lab/wp-json/wp/v2/users/?page=1&per_page=100']
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when multiple pages of results' do
|
||||
before do
|
||||
stub_request(:get, finder.api_url)
|
||||
.with(query: { page: 1, per_page: 100 })
|
||||
.to_return(body: File.read(fixtures.join('4.7.2.json')), headers: { 'X-WP-TotalPages' => 2 })
|
||||
|
||||
stub_request(:get, finder.api_url)
|
||||
.with(query: { page: 2, per_page: 100 })
|
||||
.to_return(body: File.read(fixtures.join('4.7.2-2.json')), headers: { 'X-WP-TotalPages' => 2 })
|
||||
end
|
||||
|
||||
it 'returns the expected array of users' do
|
||||
users = finder.aggressive
|
||||
|
||||
expect(users.size).to eql 2
|
||||
|
||||
user = users.first
|
||||
|
||||
expect(user.id).to eql 1
|
||||
expect(user.username).to eql 'admin'
|
||||
expect(user.confidence).to eql 100
|
||||
expect(user.interesting_entries).to eql ['http://wp.lab/wp-json/wp/v2/users/?page=1&per_page=100']
|
||||
|
||||
user = users.second
|
||||
|
||||
expect(user.id).to eql 20
|
||||
expect(user.username).to eql 'user'
|
||||
expect(user.confidence).to eql 100
|
||||
expect(user.interesting_entries).to eql ['http://wp.lab/wp-json/wp/v2/users/?page=2&per_page=100']
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::WpVersion::AtomGenerator do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { Pathname.new(FINDERS_FIXTURES).join('wp_version', 'atom_generator') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('wp_version', 'atom_generator') }
|
||||
let(:atom_fixture) { File.read(fixtures.join('feed', 'atom')) }
|
||||
|
||||
describe '#passive, #aggressive' do
|
||||
@@ -36,7 +36,7 @@ describe WPScan::Finders::WpVersion::AtomGenerator do
|
||||
end
|
||||
|
||||
context 'when atom links in homepage' do
|
||||
let(:homepage_fixture) { File.join(fixtures, 'links.html') }
|
||||
let(:homepage_fixture) { fixtures.join('links.html') }
|
||||
|
||||
it 'returns the expected from #passive' do
|
||||
stub_request(:get, target.url('?feed=atom')).to_return(body: atom_fixture)
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::WpVersion::RDFGenerator do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'wp_version', 'rdf_generator') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('wp_version', 'rdf_generator') }
|
||||
|
||||
xit
|
||||
end
|
||||
|
||||
@@ -2,11 +2,11 @@ describe WPScan::Finders::WpVersion::Readme do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'wp_version', 'readme') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('wp_version', 'readme') }
|
||||
let(:readme_url) { url + 'readme.html' }
|
||||
|
||||
describe '#aggressive' do
|
||||
before { stub_request(:get, readme_url).to_return(body: File.read(File.join(fixtures, file))) }
|
||||
before { stub_request(:get, readme_url).to_return(body: File.read(fixtures.join(file))) }
|
||||
|
||||
after do
|
||||
expect(target).to receive(:sub_dir).and_return(false)
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::WpVersion::RSSGenerator do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'wp_version', 'rss_generator') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('wp_version', 'rss_generator') }
|
||||
|
||||
xit
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ describe WPScan::Finders::WpVersion::UniqueFingerprinting do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url).extend(CMSScanner::Target::Server::Apache) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
let(:fixtures) { File.join(FINDERS_FIXTURES, 'wp_version', 'unique_fingerprinting') }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('wp_version', 'unique_fingerprinting') }
|
||||
|
||||
xit
|
||||
end
|
||||
|
||||
@@ -3,14 +3,14 @@ describe WPScan::Theme do
|
||||
let(:slug) { 'spec' }
|
||||
let(:blog) { WPScan::Target.new('http://wp.lab/') }
|
||||
let(:opts) { {} }
|
||||
let(:fixtures) { File.join(FIXTURES, 'models', 'theme') }
|
||||
let(:fixtures) { FIXTURES.join('models', 'theme') }
|
||||
|
||||
before { expect(blog).to receive(:content_dir).at_least(1).and_return('wp-content') }
|
||||
|
||||
describe '#new' do
|
||||
before do
|
||||
stub_request(:get, /.*\.css\z/)
|
||||
.to_return(body: File.read(File.join(fixtures, 'style.css')))
|
||||
.to_return(body: File.read(fixtures.join('style.css')))
|
||||
end
|
||||
|
||||
its(:url) { should eql 'http://wp.lab/wp-content/themes/spec/' }
|
||||
@@ -37,7 +37,7 @@ describe WPScan::Theme do
|
||||
describe '#version' do
|
||||
after do
|
||||
stub_request(:get, /.*\.css\z/)
|
||||
.to_return(body: File.read(File.join(fixtures, 'style.css')))
|
||||
.to_return(body: File.read(fixtures.join('style.css')))
|
||||
|
||||
expect(WPScan::Finders::ThemeVersion::Base).to receive(:find).with(theme, @expected_opts)
|
||||
theme.version(version_opts)
|
||||
@@ -91,7 +91,7 @@ describe WPScan::Theme do
|
||||
describe '#parent_theme' do
|
||||
before do
|
||||
stub_request(:get, blog.url('wp-content/themes/spec/style.css'))
|
||||
.to_return(body: File.read(File.join(fixtures, main_theme)))
|
||||
.to_return(body: File.read(fixtures.join(main_theme)))
|
||||
end
|
||||
|
||||
context 'when no template' do
|
||||
@@ -108,7 +108,7 @@ describe WPScan::Theme do
|
||||
|
||||
before do
|
||||
stub_request(:get, parent_url)
|
||||
.to_return(body: File.read(File.join(fixtures, 'style.css')))
|
||||
.to_return(body: File.read(fixtures.join('style.css')))
|
||||
end
|
||||
|
||||
%w[child_style windows_line_endings].each do |fixture|
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
describe WPScan::Timthumb do
|
||||
subject(:timthumb) { described_class.new(url, opts) }
|
||||
let(:url) { 'http://wp.lab/wp-content/timthumb.php' }
|
||||
let(:fixtures) { File.join(FIXTURES, 'models', 'timthumb') }
|
||||
let(:fixtures) { FIXTURES.join('models', 'timthumb') }
|
||||
let(:opts) { {} }
|
||||
|
||||
describe '#new' do
|
||||
@@ -59,7 +59,7 @@ describe WPScan::Timthumb do
|
||||
describe '#webshot_enabled?' do
|
||||
before do
|
||||
stub_request(:get, /#{timthumb.url}\?src=.*&webshot=1/i)
|
||||
.to_return(body: File.read(File.join(fixtures, fixture)))
|
||||
.to_return(body: File.read(fixtures.join(fixture)))
|
||||
end
|
||||
|
||||
context 'when enabled' do
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
describe 'App::Views' do
|
||||
let(:target_url) { 'http://ex.lo/' }
|
||||
let(:target) { WPScan::Target.new(target_url) }
|
||||
let(:fixtures) { File.join(SPECS, 'output') }
|
||||
let(:fixtures) { SPECS.join('output') }
|
||||
|
||||
# CliNoColour is used to test the CLI output to avoid the painful colours
|
||||
# in the expected output.
|
||||
@@ -23,7 +23,7 @@ describe 'App::Views' do
|
||||
view_filename = defined?(expected_view) ? expected_view : view
|
||||
view_filename = "#{view_filename}.#{formatter.to_s.underscore.downcase}"
|
||||
controller_dir = controller.class.to_s.demodulize.underscore.downcase
|
||||
expected_output = File.read(File.join(fixtures, controller_dir, view_filename))
|
||||
expected_output = File.read(fixtures.join(controller_dir, view_filename))
|
||||
|
||||
expect($stdout).to receive(:puts).with(expected_output)
|
||||
|
||||
|
||||
973
spec/fixtures/db/dynamic_finders.yml
vendored
973
spec/fixtures/db/dynamic_finders.yml
vendored
File diff suppressed because it is too large
Load Diff
1203
spec/fixtures/dynamic_finders/expected.yml
vendored
1203
spec/fixtures/dynamic_finders/expected.yml
vendored
File diff suppressed because it is too large
Load Diff
412
spec/fixtures/dynamic_finders/plugin_version/ad-blocks/translation_file/languages/ad-blocks.pot
vendored
Normal file
412
spec/fixtures/dynamic_finders/plugin_version/ad-blocks/translation_file/languages/ad-blocks.pot
vendored
Normal file
@@ -0,0 +1,412 @@
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Ad Blocks 1.0.0\n"
|
||||
"POT-Creation-Date: 2019-01-29 02:40+0200\n"
|
||||
"PO-Revision-Date: 2016-07-05 22:59+0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Sergey Kravchenko\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"X-Poedit-Basepath: ..\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"Language: ru\n"
|
||||
"X-Poedit-KeywordsList: __;_e;esc_attr_e;_x;_n\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
"X-Poedit-SearchPathExcluded-0: includes/plugins/cmb2\n"
|
||||
|
||||
#: includes/class-calendar-functions.php:49
|
||||
#: includes/class-calendar-functions.php:63
|
||||
msgid "Sun"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:50
|
||||
#: includes/class-calendar-functions.php:57
|
||||
msgid "Mon"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:51
|
||||
#: includes/class-calendar-functions.php:58
|
||||
msgid "Tue"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:52
|
||||
#: includes/class-calendar-functions.php:59
|
||||
msgid "Wed"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:53
|
||||
#: includes/class-calendar-functions.php:60
|
||||
msgid "Thu"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:54
|
||||
#: includes/class-calendar-functions.php:61
|
||||
msgid "Fri"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:55
|
||||
#: includes/class-calendar-functions.php:62
|
||||
msgid "Sat"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:76
|
||||
#: includes/class-calendar-functions.php:90
|
||||
msgid "Su"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:77
|
||||
#: includes/class-calendar-functions.php:84
|
||||
msgid "Mo"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:78
|
||||
#: includes/class-calendar-functions.php:85
|
||||
msgid "Tu"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:79
|
||||
#: includes/class-calendar-functions.php:86
|
||||
msgid "We"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:80
|
||||
#: includes/class-calendar-functions.php:87
|
||||
msgid "Th"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:81
|
||||
#: includes/class-calendar-functions.php:88
|
||||
msgid "Fr"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-calendar-functions.php:82
|
||||
#: includes/class-calendar-functions.php:89
|
||||
msgid "Sa"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:90
|
||||
msgid "Shortcode options"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:100
|
||||
msgid "Shortcode name param"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:111
|
||||
msgid "Auto posting"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:121
|
||||
msgid "Auto add to posts"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:125 includes/class-settings-admin.php:348
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:126 includes/class-settings-admin.php:347
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:132
|
||||
msgid "Insert location"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:136
|
||||
msgid "Before content"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:137
|
||||
msgid "After content"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-cmb2-admin.php:143
|
||||
msgid "Post types"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:56 includes/class-post-types.php:57
|
||||
msgid "Ad Block"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:58 includes/class-post-types.php:59
|
||||
#: includes/class-post-types.php:65 includes/class-post-types.php:76
|
||||
#: includes/widgets/class-adblocks.php:10
|
||||
msgid "Ad Blocks"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:60
|
||||
msgid "Add new"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:61
|
||||
msgid "Add New Ad Block"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:62
|
||||
msgid "New Ad Block"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:63
|
||||
msgid "Edit Ad Block"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:64
|
||||
msgid "View Ad Block"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:66
|
||||
msgid "Search Ad Block"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:67
|
||||
msgid "Parent Ad Block:"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:68
|
||||
msgid "Not found."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:69
|
||||
msgid "Not found in Trash."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-types.php:70
|
||||
msgid "Update Ad Block"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-posts-admin.php:37
|
||||
msgid "Shortcode"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-posts-admin.php:38
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:55
|
||||
#: includes/class-settings-admin.php:56
|
||||
#: includes/class-settings-admin.php:74
|
||||
msgid "Ad Blocks Settings"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:184
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:191
|
||||
msgid "Use classic editor for Ad Block post type"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:200
|
||||
msgid "Date format"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:279
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:287
|
||||
msgid "Custom Image"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:289
|
||||
msgid "Upload Image"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:361
|
||||
msgid "d/m/Y"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-settings-admin.php:362
|
||||
msgid "m/d/Y"
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_Base.php:422
|
||||
#, php-format
|
||||
msgid ""
|
||||
"The \"%1$s\" field parameter has been deprecated in favor of the \"%2$s"
|
||||
"\" parameter."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_Base.php:426
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Using the \"%1$s\" field parameter as a callback has been deprecated in "
|
||||
"favor of the \"%2$s\" parameter."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_Base.php:456
|
||||
#, php-format
|
||||
msgid ""
|
||||
"%1$s was called with a parameter that is <strong>deprecated</strong> "
|
||||
"since version %2$s! %3$s"
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_Base.php:458
|
||||
#, php-format
|
||||
msgid ""
|
||||
"%1$s was called with a parameter that is <strong>deprecated</strong> "
|
||||
"since version %2$s with no alternative available."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_JS.php:200
|
||||
msgid "mm/dd/yy"
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_JS.php:220
|
||||
msgid "hh:mm TT"
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_Options_Hookup.php:139
|
||||
msgid "Nothing to update."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_Options_Hookup.php:143
|
||||
msgid "Settings updated."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_Types.php:232
|
||||
msgid "Custom CMB2 field type classes must extend CMB2_Type_Base."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/CMB2_hookup.php:466
|
||||
#, php-format
|
||||
msgid "Toggle panel: %s"
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller.php:257
|
||||
msgid "This box does not have read permissions."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller.php:277
|
||||
msgid "This box does not have write permissions."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller.php:300
|
||||
msgid ""
|
||||
"No box found by that id. A box needs to be registered with the "
|
||||
"\"show_in_rest\" parameter configured."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller.php:378
|
||||
msgid "A human-readable description of the object."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller.php:385
|
||||
msgid "The id for the object."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller.php:392
|
||||
msgid "The title for the object."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Boxes.php:51
|
||||
msgid "Includes the registered fields for the box in the response."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Boxes.php:72
|
||||
msgid ""
|
||||
"Includes the fully rendered attributes, 'form_open', 'form_close', as "
|
||||
"well as the enqueued 'js_dependencies' script handles, and "
|
||||
"'css_dependencies' stylesheet handles."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Boxes.php:122
|
||||
msgid "No boxes found."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:27
|
||||
msgid ""
|
||||
"Includes the box object which the fields are registered to in the "
|
||||
"response."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:30
|
||||
msgid ""
|
||||
"When the '_rendered' argument is passed, the renderable field attributes "
|
||||
"will be returned fully rendered. By default, the names of the callback "
|
||||
"handers for the renderable attributes will be returned."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:33
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:36
|
||||
msgid ""
|
||||
"To view or modify the field's value, the 'object_id' and 'object_type' "
|
||||
"arguments are required."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:236
|
||||
msgid ""
|
||||
"CMB2 Field value cannot be updated without the value parameter specified."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:297
|
||||
msgid ""
|
||||
"CMB2 Field value cannot be modified without the object_id and "
|
||||
"object_type parameters specified."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:312
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:341
|
||||
msgid "No field found by that id."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/rest-api/CMB2_REST_Controller_Fields.php:415
|
||||
#, php-format
|
||||
msgid "Value Error for %s"
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:25
|
||||
#, php-format
|
||||
msgid "Method '%s' must be overridden."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:35
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:47
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:59
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:71
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:83
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:95
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:107
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:119
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:131
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:143
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:155
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:168
|
||||
#, php-format
|
||||
msgid "Method '%s' not implemented. Must be overridden in subclass."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:273
|
||||
msgid "Current page of the collection."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:281
|
||||
msgid "Maximum number of items to be returned in result set."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:290
|
||||
msgid "Limit results to those matching a string."
|
||||
msgstr ""
|
||||
|
||||
#: includes/vendors/cmb2/includes/shim/WP_REST_Controller.php:308
|
||||
msgid ""
|
||||
"Scope under which the request is made; determines fields present in "
|
||||
"response."
|
||||
msgstr ""
|
||||
|
||||
#: includes/widgets/class-adblocks.php:12
|
||||
msgid "Show Ad Blocks"
|
||||
msgstr ""
|
||||
|
||||
#: includes/widgets/class-adblocks.php:51
|
||||
msgid "Title:"
|
||||
msgstr ""
|
||||
|
||||
#: includes/widgets/class-adblocks.php:56
|
||||
msgid "Ad block name(s):"
|
||||
msgstr ""
|
||||
20
spec/fixtures/dynamic_finders/plugin_version/adrecord-affiliate/composer_file/package.json
vendored
Normal file
20
spec/fixtures/dynamic_finders/plugin_version/adrecord-affiliate/composer_file/package.json
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "adrecord-affiliate",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"react": "^16.7.0",
|
||||
"react-dom": "^16.7.0",
|
||||
"react-toggle-component": "^1.0.5",
|
||||
"react-wp-scripts": "0.2.0",
|
||||
"styled-components": "^4.1.3"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-wp-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"make-pot": "wp i18n make-pot . --exclude=src,build --debug",
|
||||
"test": "react-scripts test --env=jsdom",
|
||||
"eject": "react-scripts eject",
|
||||
"zip": "zip ../adrecord-affiliate.zip -r build src public adrecord-affiliate.php react-wp-scripts.php readme.txt yarn.lock languages php package.json build-tools.md"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
# Copyright (C) 2019 Adrecord
|
||||
# This file is distributed under the same license as the Adrecord Affiliate plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Adrecord Affiliate 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/adrecord-affiliate\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-01-24T13:33:13+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.1.0\n"
|
||||
"X-Domain: adrecord\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
msgid "Adrecord Affiliate"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "https://wordpress.org/plugins/adrecord-affiliate/"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Adrecords WordPress plugin for affiliates. Easily enable and make use of clean links and other features right in your WordPress site."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "Adrecord"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://www.adrecord.com"
|
||||
msgstr ""
|
||||
|
||||
#: php/App.php:176
|
||||
msgid "Loading"
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:7
|
||||
msgid "Welcome to the Adrecord Wordpress plugin"
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:8
|
||||
msgid "To get started, enter your API-key to connect with your account at Adrecord."
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:9
|
||||
msgid "Welcome"
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:10
|
||||
msgid "API-key:"
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:11
|
||||
msgid "You can find your API-key "
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:12
|
||||
msgid "in the Adrecord dashboard advanced section."
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:13
|
||||
msgid "Clean links enabled:"
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:14
|
||||
msgid "Clean links is a technique for linking to advertisers with \"regular links\", for example, directly to http://www.example.com instead of https://click.adrecord.com/?p=19&c=TEST. When you have enabled clean links and have entered a regular link to one of your advertisers in your content, please try to click one of your links and make sure you can see the clicks counting in the Adrecord dashboard."
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:15
|
||||
msgid "Latest programs"
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:16
|
||||
msgid "About Adrecord"
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:17
|
||||
msgid ""
|
||||
"Adrecord is an affiliate network with long experience and broad \n"
|
||||
" knowledge that helps with affiliate marketing in a friendly and\n"
|
||||
" transparent way."
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:20
|
||||
msgid ""
|
||||
"With our help you can set up and administer an affiliate program\n"
|
||||
" according to your terms, we will take full responsibility for\n"
|
||||
" the technology, finance and support, and create relationships\n"
|
||||
" with talented affiliates."
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:24
|
||||
msgid "Get started with Adrecord"
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:25
|
||||
msgid ""
|
||||
"Don't have an affiliate account at Adrecord? No worries, just\n"
|
||||
" sign up for free here and "
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:27
|
||||
msgid "create your account here."
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:28
|
||||
msgid ""
|
||||
"For more information on how to get started, please have a look\n"
|
||||
" at our "
|
||||
msgstr ""
|
||||
|
||||
#: php/LanguageDictionary.php:30
|
||||
msgid "quick-start guide."
|
||||
msgstr ""
|
||||
17
spec/fixtures/dynamic_finders/plugin_version/alerts-block/composer_file/package.json
vendored
Normal file
17
spec/fixtures/dynamic_finders/plugin_version/alerts-block/composer_file/package.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "my-block-cgb-guten-block",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "cgb-scripts start",
|
||||
"build": "cgb-scripts build",
|
||||
"eject": "cgb-scripts eject"
|
||||
},
|
||||
"dependencies": {
|
||||
"cgb-scripts": "1.13.0",
|
||||
"classnames": "^2.2.6",
|
||||
"moment": "^2.23.0",
|
||||
"query-string": "^6.2.0",
|
||||
"querystringify": "^2.1.0"
|
||||
}
|
||||
}
|
||||
396
spec/fixtures/dynamic_finders/plugin_version/analogwp-templates/translation_file/languages/ang.pot
vendored
Normal file
396
spec/fixtures/dynamic_finders/plugin_version/analogwp-templates/translation_file/languages/ang.pot
vendored
Normal file
@@ -0,0 +1,396 @@
|
||||
# Copyright (C) 2019 AnalogWP
|
||||
# This file is distributed under the same license as the AnalogWP Templates plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: AnalogWP Templates 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/analogwp-templates\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-02-20T09:13:27+00:00\n"
|
||||
"PO-Revision-Date: 2019-02-20T09:13:27+00:00\n"
|
||||
"X-Generator: WP-CLI 2.1.0\n"
|
||||
"X-Domain: ang\n"
|
||||
|
||||
#: src/js/app/Header.js:101
|
||||
#: src/js/app/popup.js:125
|
||||
#: languages/ang-translations.php:10
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Header.js:86
|
||||
#: languages/ang-translations.php:13
|
||||
msgid "Templates library refreshed"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Header.js:87
|
||||
#: languages/ang-translations.php:16
|
||||
msgid "Error refreshing templates library, please try again."
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Header.js:91
|
||||
#: languages/ang-translations.php:19
|
||||
msgid "Syncing..."
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Header.js:92
|
||||
#: languages/ang-translations.php:22
|
||||
msgid "Sync Library"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:81
|
||||
#: languages/ang-translations.php:25
|
||||
msgid "Back to library"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:83
|
||||
#: languages/ang-translations.php:28
|
||||
msgid "Elevate your Elementor design with Analog Pro"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:84
|
||||
#: languages/ang-translations.php:31
|
||||
msgid "Step up your workflow with unlimited design resources for your Elementor-powered projects."
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:85
|
||||
#: languages/ang-translations.php:34
|
||||
msgid "Learn More"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:88
|
||||
#: languages/ang-translations.php:37
|
||||
msgid "Why Pro"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:90
|
||||
#: languages/ang-translations.php:40
|
||||
msgid "Access to all template library"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:91
|
||||
#: languages/ang-translations.php:43
|
||||
msgid "Templates for singles, archives, popups and more"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:92
|
||||
#: languages/ang-translations.php:46
|
||||
msgid "Multi-niche, human made design that makes sense"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:93
|
||||
#: languages/ang-translations.php:49
|
||||
msgid "Unlimited license for peace of mind"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/ProModal.js:96
|
||||
#: languages/ang-translations.php:52
|
||||
msgid "* Requires Elementor Pro"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:274
|
||||
#: languages/ang-translations.php:55
|
||||
msgid "Blimey! Your template has been imported."
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:279
|
||||
#: languages/ang-translations.php:58
|
||||
msgid "Edit Template"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:284
|
||||
#: languages/ang-translations.php:61
|
||||
msgid "Importing "
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:284
|
||||
#: languages/ang-translations.php:64
|
||||
msgid "Imported "
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:291
|
||||
#: languages/ang-translations.php:67
|
||||
msgid "Import this template to your library to make it available in your Elementor "
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:292
|
||||
#: languages/ang-translations.php:70
|
||||
msgid "Saved Templates"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:293
|
||||
#: languages/ang-translations.php:73
|
||||
msgid " list for future use."
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:302
|
||||
#: languages/ang-translations.php:76
|
||||
msgid "Import to Library"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:313
|
||||
#: languages/ang-translations.php:79
|
||||
msgid "Create a new page from this template to make it available as a draft page in your Pages list."
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:317
|
||||
#: languages/ang-translations.php:82
|
||||
msgid "Enter a Page Name"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:328
|
||||
#: languages/ang-translations.php:85
|
||||
msgid "Import to page"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:359
|
||||
#: languages/ang-translations.php:88
|
||||
msgid "Pro"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:367
|
||||
#: languages/ang-translations.php:91
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/Templates.js:370
|
||||
#: languages/ang-translations.php:94
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/filters.js:107
|
||||
#: languages/ang-translations.php:97
|
||||
msgid "Show All"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/filters.js:112
|
||||
#: languages/ang-translations.php:100
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/filters.js:113
|
||||
#: languages/ang-translations.php:103
|
||||
msgid "Popular"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/filters.js:125
|
||||
#: languages/ang-translations.php:106
|
||||
msgid "Back to all"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/filters.js:126
|
||||
#: languages/ang-translations.php:109
|
||||
msgid "My Favorites"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/filters.js:130
|
||||
#: languages/ang-translations.php:112
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/filters.js:142
|
||||
#: languages/ang-translations.php:115
|
||||
msgid "Sort By"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/filters.js:156
|
||||
#: languages/ang-translations.php:118
|
||||
msgid "Only Show Free Templates"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/modal.js:73
|
||||
#: languages/ang-translations.php:121
|
||||
msgid "Open Preview in New Tab"
|
||||
msgstr ""
|
||||
|
||||
#: src/js/app/modal.js:79
|
||||
#: languages/ang-translations.php:124
|
||||
msgid "Insert Layout"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
#: languages/ang-translations.php:127
|
||||
msgid "AnalogWP Templates"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
#. Author URI of the plugin
|
||||
#: languages/ang-translations.php:131
|
||||
msgid "https://analogwp.com/"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
#: languages/ang-translations.php:134
|
||||
msgid "Handfully crafted Elementor templates packs."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
#: inc/register-settings.php:18
|
||||
#: languages/ang-translations.php:138
|
||||
msgid "AnalogWP"
|
||||
msgstr ""
|
||||
|
||||
#: inc/register-settings.php:17
|
||||
#: languages/ang-translations.php:141
|
||||
msgid "Analog Templates"
|
||||
msgstr ""
|
||||
|
||||
#: inc/register-settings.php:53
|
||||
#: languages/ang-translations.php:144
|
||||
msgid "Imported Count"
|
||||
msgstr ""
|
||||
|
||||
#: inc/register-settings.php:65
|
||||
#: languages/ang-translations.php:147
|
||||
msgid "Imported templates"
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:62
|
||||
#: languages/ang-translations.php:150
|
||||
msgid "Theme License"
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:63
|
||||
#: languages/ang-translations.php:153
|
||||
msgid "Enter your theme license key received upon purchase from <a target=\"_blank\" href=\"https://analogwp.com/account/\">AnalogWP</a>."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:67
|
||||
#: languages/ang-translations.php:156
|
||||
msgid "License Key"
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:68
|
||||
#: languages/ang-translations.php:159
|
||||
msgid "License Action"
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:69
|
||||
#: languages/ang-translations.php:162
|
||||
msgid "Deactivate License"
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:70
|
||||
#: languages/ang-translations.php:165
|
||||
msgid "Activate License"
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:71
|
||||
#: inc/class-licensemanager.php:90
|
||||
#: languages/ang-translations.php:169
|
||||
msgid "License status is unknown."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:72
|
||||
#: languages/ang-translations.php:172
|
||||
msgid "Renew?"
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:73
|
||||
#: languages/ang-translations.php:175
|
||||
msgid "unlimited"
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:74
|
||||
#: languages/ang-translations.php:178
|
||||
msgid "License key is active."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: expiration date
|
||||
#: inc/class-licensemanager.php:76
|
||||
#: languages/ang-translations.php:181
|
||||
msgid "Expires %s."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:77
|
||||
#: languages/ang-translations.php:184
|
||||
msgid "Lifetime License."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %1$s: active sites, %2$s: sites limit
|
||||
#: inc/class-licensemanager.php:79
|
||||
#: languages/ang-translations.php:187
|
||||
msgid "You have %1$s / %2$s sites activated."
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s: product name
|
||||
#: inc/class-licensemanager.php:81
|
||||
#: languages/ang-translations.php:190
|
||||
msgid "License key expired %s."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:82
|
||||
#: languages/ang-translations.php:193
|
||||
msgid "License key has expired."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:83
|
||||
#: languages/ang-translations.php:196
|
||||
msgid "License keys do not match. <br><br> Enter your theme license key received upon purchase from <a target=\"_blank\" href=\"https://analogwp.com/account/\">AnalogWP</a>."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:87
|
||||
#: languages/ang-translations.php:199
|
||||
msgid "License is inactive."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:88
|
||||
#: languages/ang-translations.php:202
|
||||
msgid "License key is disabled."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:89
|
||||
#: languages/ang-translations.php:205
|
||||
msgid "Site is inactive."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:91
|
||||
#: languages/ang-translations.php:208
|
||||
msgid "Updating this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to update."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-licensemanager.php:92
|
||||
msgid "<strong>%1$s %2$s</strong> is available. <a href=\"%3$s\" class=\"thickbox\" title=\"%4$s\">Check out what's new</a> or <a href=\"%5$s\" %6$s>update now</a>."
|
||||
msgstr ""
|
||||
|
||||
#: inc/class-base.php:41
|
||||
#: inc/class-base.php:51
|
||||
#: languages/ang-translations.php:215
|
||||
msgid "Something went wrong."
|
||||
msgstr ""
|
||||
|
||||
#: inc/api/class-local.php:288
|
||||
msgid "Setting updated."
|
||||
msgstr ""
|
||||
|
||||
#: languages/ang-translations.php:211
|
||||
msgid "<strong>%1$s %2$s</strong> is available. <a href=\"%3$s\" class=\"thickbox\" title=\"%4s\">Check out what's new</a> or <a href=\"%5$s\"%6$s>update now</a>."
|
||||
msgstr ""
|
||||
|
||||
#: languages/ang-translations.php:219
|
||||
#: analogwp-templates.php:62
|
||||
#: analogwp-templates.php:72
|
||||
msgid "Cheatin’ huh?"
|
||||
msgstr ""
|
||||
|
||||
#: languages/ang-translations.php:222
|
||||
#: analogwp-templates.php:240
|
||||
msgid "Analog Templates is not working because you need to activate the Elementor plugin."
|
||||
msgstr ""
|
||||
|
||||
#: languages/ang-translations.php:225
|
||||
#: analogwp-templates.php:241
|
||||
msgid "Activate Elementor Now"
|
||||
msgstr ""
|
||||
|
||||
#: languages/ang-translations.php:228
|
||||
#: analogwp-templates.php:248
|
||||
msgid "Analog Templates is not working because you need to install the Elementor plugin."
|
||||
msgstr ""
|
||||
|
||||
#: languages/ang-translations.php:231
|
||||
#: analogwp-templates.php:249
|
||||
msgid "Install Elementor Now"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,800 @@
|
||||
# Copyright (C) 2018 Angelleye PayPal Invoicing
|
||||
# This file is distributed under the same license as the Angelleye PayPal Invoicing package.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Angelleye PayPal Invoicing 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/angelleye-paypal-"
|
||||
"invoicing\n"
|
||||
"POT-Creation-Date: 2018-10-09 12:30+0530\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2018-10-09 13:01+0530\n"
|
||||
"Language-Team: \n"
|
||||
"X-Generator: Poedit 2.1.1\n"
|
||||
"Last-Translator: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Language: en_US\n"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:120
|
||||
msgid "Would you like to delete the invoice at PayPal?"
|
||||
msgstr "Would you like to delete the invoice at PayPal?"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:140
|
||||
msgid "Manage invoices"
|
||||
msgstr "Manage invoices"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:141
|
||||
msgid "PayPal invoice"
|
||||
msgstr "PayPal invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:142
|
||||
msgctxt "Manage invoices"
|
||||
msgid "Manage invoices"
|
||||
msgstr "Manage invoices"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:143
|
||||
msgid "Add invoice"
|
||||
msgstr "Add invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:144
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:437
|
||||
msgid "Add New invoice"
|
||||
msgstr "Add New invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:145
|
||||
msgid "Edit"
|
||||
msgstr "Edit"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:146
|
||||
msgid "Invoice Details"
|
||||
msgstr "Invoice Details"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:147
|
||||
msgid "New invoice"
|
||||
msgstr "New invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:148
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:149
|
||||
msgid "View PayPal invoice"
|
||||
msgstr "View PayPal invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:150
|
||||
msgid "Search PayPal invoices"
|
||||
msgstr "Search PayPal invoices"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:151
|
||||
msgid "No PayPal invoice found"
|
||||
msgstr "No PayPal invoice found"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:152
|
||||
msgid "No PayPal invoice found in trash"
|
||||
msgstr "No PayPal invoice found in trash"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:153
|
||||
msgid "Parent PayPal invoice"
|
||||
msgstr "Parent PayPal invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:155
|
||||
msgid "This is where you can add new PayPal Invoice to your store."
|
||||
msgstr "This is where you can add new PayPal Invoice to your store."
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:303
|
||||
msgid ""
|
||||
"PayPal API credentials is not set up, <a href=\"?page=apifw_settings\" class="
|
||||
"\"alert-link\">Click here to set up</a>."
|
||||
msgstr ""
|
||||
"PayPal API credentials is not set up, <a href=\"?page=apifw_settings\" class="
|
||||
"\"alert-link\">Click here to set up</a>."
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:321
|
||||
msgid "Your settings have been saved."
|
||||
msgstr "Your settings have been saved."
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:371
|
||||
msgid "Successfully deleted log files."
|
||||
msgstr "Successfully deleted log files."
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:446
|
||||
msgid "Invoice ID"
|
||||
msgstr "Invoice ID"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:447
|
||||
msgctxt "angelleye-paypal-invoicing"
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:448
|
||||
#: admin/views/html-admin-page-invoice-list.php:22
|
||||
#: admin/views/html-admin-page-invoice-list.php:53
|
||||
#: admin/views/html-admin-page-template_list.php:21
|
||||
#: admin/views/html-admin-page-template_list.php:40
|
||||
msgid "Invoice #"
|
||||
msgstr "Invoice #"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:449
|
||||
msgctxt "angelleye-paypal-invoicing"
|
||||
msgid "Recipient"
|
||||
msgstr "Recipient"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:450
|
||||
#: admin/views/html-admin-page-invoice-list.php:24
|
||||
#: admin/views/html-admin-page-invoice-list.php:55
|
||||
#: admin/views/html-admin-page-template_list.php:23
|
||||
#: admin/views/html-admin-page-template_list.php:42
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:451
|
||||
#: admin/views/html-admin-page-create-invoice.php:106
|
||||
#: admin/views/html-admin-page-create-invoice.php:116
|
||||
#: admin/views/html-admin-page-invoice-list.php:25
|
||||
#: admin/views/html-admin-page-invoice-list.php:56
|
||||
#: admin/views/html-admin-page-template_list.php:25
|
||||
#: admin/views/html-admin-page-template_list.php:44
|
||||
#: admin/views/html-admin-page-view-invoice.php:174
|
||||
msgid "Amount"
|
||||
msgstr "Amount"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:607
|
||||
#: admin/views/html-admin-page-view-invoice.php:39
|
||||
msgid "View PayPal Invoice"
|
||||
msgstr "View PayPal Invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:610
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:625
|
||||
#: admin/views/html-admin-page-create-invoice.php:21
|
||||
#: admin/views/html-admin-page-create-invoice.php:232
|
||||
#: admin/views/html-admin-page-view-invoice.php:42
|
||||
msgid "Send Invoice"
|
||||
msgstr "Send Invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:611
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:628
|
||||
#: admin/views/html-admin-page-view-invoice.php:43
|
||||
msgid "Delete Invoice"
|
||||
msgstr "Delete Invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:614
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:626
|
||||
#: admin/views/html-admin-page-view-invoice.php:46
|
||||
msgid "Send Invoice Reminder"
|
||||
msgstr "Send Invoice Reminder"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:617
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:627
|
||||
#: admin/views/html-admin-page-view-invoice.php:49
|
||||
msgid "Cancel Invoice"
|
||||
msgstr "Cancel Invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:643
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:766
|
||||
msgid "You sent a invoice to %1$s"
|
||||
msgstr "You sent a invoice to %1$s"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:657
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:775
|
||||
msgid "You sent a payment reminder to %1$s"
|
||||
msgstr "You sent a payment reminder to %1$s"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:670
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:979
|
||||
msgid "You canceled this invoice."
|
||||
msgstr "You canceled this invoice."
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:703
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:22
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:181
|
||||
msgid "PayPal Invoice"
|
||||
msgstr "PayPal Invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:704
|
||||
msgid "paypal_invoice"
|
||||
msgstr "paypal_invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:783
|
||||
msgid "You canceled this invoice"
|
||||
msgstr "You canceled this invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:849
|
||||
msgid "Save PayPal Invoice Draft"
|
||||
msgstr "Save PayPal Invoice Draft"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:850
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:862
|
||||
msgid "Send PayPal Invoice"
|
||||
msgstr "Send PayPal Invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:856
|
||||
msgid "Send PayPal Invoice Reminder"
|
||||
msgstr "Send PayPal Invoice Reminder"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:859
|
||||
msgid "Cancel PayPal Invoice"
|
||||
msgstr "Cancel PayPal Invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:863
|
||||
msgid "Delete PayPal Invoice"
|
||||
msgstr "Delete PayPal Invoice"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:886
|
||||
msgid "Your invoice is created."
|
||||
msgstr "Your invoice is created."
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:892
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:934
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:253
|
||||
msgctxt "PayPal Invoice"
|
||||
msgid "Awaiting payment"
|
||||
msgstr "Awaiting payment"
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:918
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:928
|
||||
msgid "We've sent your invoice."
|
||||
msgstr "We've sent your invoice."
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:958
|
||||
msgid "Your reminder is sent."
|
||||
msgstr "Your reminder is sent."
|
||||
|
||||
#: admin/class-angelleye-paypal-invoicing-admin.php:1004
|
||||
msgid "Your invoice is deleted."
|
||||
msgstr "Your invoice is deleted."
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:22
|
||||
#: admin/views/html-admin-page-create-invoice.php:233
|
||||
msgid "Save as Draft"
|
||||
msgstr "Save as Draft"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:30
|
||||
msgid "Invoice number"
|
||||
msgstr "Invoice number"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:35
|
||||
msgid ""
|
||||
"Invoices are numbered automatically beginning with invoice number 0001. You "
|
||||
"can customize the invoice number any way you'd like, and the next number "
|
||||
"will increment by 1."
|
||||
msgstr ""
|
||||
"Invoices are numbered automatically beginning with invoice number 0001. You "
|
||||
"can customize the invoice number any way you'd like, and the next number "
|
||||
"will increment by 1."
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:39
|
||||
msgid "Invoice date"
|
||||
msgstr "Invoice date"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:44
|
||||
msgid ""
|
||||
"You can select any invoice date. This invoice will be sent today or on a "
|
||||
"future date you choose."
|
||||
msgstr ""
|
||||
"You can select any invoice date. This invoice will be sent today or on a "
|
||||
"future date you choose."
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:48
|
||||
msgid "Reference"
|
||||
msgstr "Reference"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:50
|
||||
msgid "Such as PO#"
|
||||
msgstr "Such as PO#"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:54
|
||||
msgid "Due date"
|
||||
msgstr "Due date"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:57
|
||||
msgid "No due date"
|
||||
msgstr "No due date"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:58
|
||||
msgid "Due on receipt"
|
||||
msgstr "Due on receipt"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:59
|
||||
msgid "Due on date specified"
|
||||
msgstr "Due on date specified"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:60
|
||||
msgid "Due in 10 days"
|
||||
msgstr "Due in 10 days"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:61
|
||||
msgid "Due in 15 days"
|
||||
msgstr "Due in 15 days"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:62
|
||||
msgid "Due in 30 days"
|
||||
msgstr "Due in 30 days"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:63
|
||||
msgid "Due in 45 days"
|
||||
msgstr "Due in 45 days"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:64
|
||||
msgid "Due in 60 days"
|
||||
msgstr "Due in 60 days"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:65
|
||||
msgid "Due in 90 days"
|
||||
msgstr "Due in 90 days"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:72
|
||||
msgid "d/m/Y"
|
||||
msgstr "d/m/Y"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:102
|
||||
#: admin/views/html-admin-page-view-invoice.php:171
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:86
|
||||
msgid "Description"
|
||||
msgstr "Description"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:103
|
||||
#: admin/views/html-admin-page-view-invoice.php:172
|
||||
msgid "Quantity"
|
||||
msgstr "Quantity"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:104
|
||||
#: admin/views/html-admin-page-view-invoice.php:173
|
||||
msgid "Price"
|
||||
msgstr "Price"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:105
|
||||
msgid "Tax"
|
||||
msgstr "Tax"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:112
|
||||
msgid "Item name"
|
||||
msgstr "Item name"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:113
|
||||
msgid "0"
|
||||
msgstr "0"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:114
|
||||
#: admin/views/html-admin-page-invoice-setting.php:167
|
||||
msgid "0.00"
|
||||
msgstr "0.00"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:115
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:121
|
||||
msgid "Enter detailed description (optional)"
|
||||
msgstr "Enter detailed description (optional)"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:130
|
||||
msgid "Add another line item"
|
||||
msgstr "Add another line item"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:143
|
||||
msgid "Allow partial payment"
|
||||
msgstr "Allow partial payment"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:143
|
||||
msgid ""
|
||||
"Your customer will be allowed to enter any payment amount above the minimum "
|
||||
"until the invoice is paid in full."
|
||||
msgstr ""
|
||||
"Your customer will be allowed to enter any payment amount above the minimum "
|
||||
"until the invoice is paid in full."
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:148
|
||||
msgid "Minimum amount due (optional)"
|
||||
msgstr "Minimum amount due (optional)"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:160
|
||||
msgid "Allow customer to add a tip."
|
||||
msgstr "Allow customer to add a tip."
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:169
|
||||
#: admin/views/html-admin-page-view-invoice.php:227
|
||||
msgid "Subtotal"
|
||||
msgstr "Subtotal"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:173
|
||||
#: admin/views/html-admin-page-view-invoice.php:255
|
||||
msgid "Discount"
|
||||
msgstr "Discount"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:186
|
||||
#: admin/views/html-admin-page-view-invoice.php:235
|
||||
msgid "Shipping"
|
||||
msgstr "Shipping"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:194
|
||||
#: admin/views/html-admin-page-view-invoice.php:263
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:205
|
||||
msgid "Note to recipient"
|
||||
msgstr "Note to recipient"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:205
|
||||
msgid "Such as Thank you for your business"
|
||||
msgstr "Such as Thank you for your business"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:208
|
||||
msgid "Terms and conditions"
|
||||
msgstr "Terms and conditions"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:208
|
||||
msgid "Include your return or cancelation policy"
|
||||
msgstr "Include your return or cancelation policy"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:216
|
||||
msgid "Add memo to self"
|
||||
msgstr "Add memo to self"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:219
|
||||
msgid "Memo"
|
||||
msgstr "Memo"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:220
|
||||
msgid "Add memo to self (your recipient won't see this)"
|
||||
msgstr "Add memo to self (your recipient won't see this)"
|
||||
|
||||
#: admin/views/html-admin-page-create-invoice.php:222
|
||||
msgid "Hide"
|
||||
msgstr "Hide"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-list.php:17
|
||||
msgid "Manage Invoices"
|
||||
msgstr "Manage Invoices"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-list.php:21
|
||||
#: admin/views/html-admin-page-invoice-list.php:52
|
||||
#: admin/views/html-admin-page-template_list.php:20
|
||||
#: admin/views/html-admin-page-template_list.php:39
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-list.php:23
|
||||
#: admin/views/html-admin-page-invoice-list.php:54
|
||||
#: admin/views/html-admin-page-template_list.php:22
|
||||
#: admin/views/html-admin-page-template_list.php:41
|
||||
msgid "Recipient"
|
||||
msgstr "Recipient"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-list.php:46
|
||||
#: admin/views/html-admin-page-template_list.php:33
|
||||
msgid "You haven’t created any invoices"
|
||||
msgstr "You haven’t created any invoices"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:45
|
||||
msgid "PayPal API Credentials"
|
||||
msgstr "PayPal API Credentials"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:47
|
||||
msgid "PayPal Sandbox"
|
||||
msgstr "PayPal Sandbox"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:52
|
||||
msgid "Enable PayPal Sandbox"
|
||||
msgstr "Enable PayPal Sandbox"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:59
|
||||
#: admin/views/html-admin-page-invoice-setting.php:61
|
||||
msgid "Sandbox PayPal Email"
|
||||
msgstr "Sandbox PayPal Email"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:65
|
||||
#: admin/views/html-admin-page-invoice-setting.php:67
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:115
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:120
|
||||
msgid "Sandbox Client ID"
|
||||
msgstr "Sandbox Client ID"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:71
|
||||
#: admin/views/html-admin-page-invoice-setting.php:73
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:123
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:128
|
||||
msgid "Sandbox Secret"
|
||||
msgstr "Sandbox Secret"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:78
|
||||
#: admin/views/html-admin-page-invoice-setting.php:80
|
||||
msgid "PayPal Email"
|
||||
msgstr "PayPal Email"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:84
|
||||
#: admin/views/html-admin-page-invoice-setting.php:86
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:139
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:144
|
||||
msgid "Client ID"
|
||||
msgstr "Client ID"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:90
|
||||
#: admin/views/html-admin-page-invoice-setting.php:92
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:147
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:152
|
||||
msgid "Secret"
|
||||
msgstr "Secret"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:95
|
||||
msgid "Merchant / Business Information"
|
||||
msgstr "Merchant / Business Information"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:97
|
||||
#: admin/views/html-admin-page-invoice-setting.php:99
|
||||
msgid "First Name"
|
||||
msgstr "First Name"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:103
|
||||
#: admin/views/html-admin-page-invoice-setting.php:105
|
||||
msgid "Last Name"
|
||||
msgstr "Last Name"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:109
|
||||
#: admin/views/html-admin-page-invoice-setting.php:111
|
||||
msgid "Company Name"
|
||||
msgstr "Company Name"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:115
|
||||
#: admin/views/html-admin-page-invoice-setting.php:117
|
||||
msgid "Phone Number"
|
||||
msgstr "Phone Number"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:120
|
||||
msgid "Merchant / Business Address"
|
||||
msgstr "Merchant / Business Address"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:122
|
||||
msgid "Address line 1"
|
||||
msgstr "Address line 1"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:124
|
||||
msgid "House number and street name"
|
||||
msgstr "House number and street name"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:128
|
||||
msgid "Address line 2"
|
||||
msgstr "Address line 2"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:130
|
||||
msgid "Apartment, suite, unit etc."
|
||||
msgstr "Apartment, suite, unit etc."
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:134
|
||||
#: admin/views/html-admin-page-invoice-setting.php:136
|
||||
msgid "City"
|
||||
msgstr "City"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:140
|
||||
msgid "Postcode / ZIP"
|
||||
msgstr "Postcode / ZIP"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:146
|
||||
msgid "State / County"
|
||||
msgstr "State / County"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:152
|
||||
msgid "Country"
|
||||
msgstr "Country"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:157
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:155
|
||||
msgid "Default Values"
|
||||
msgstr "Default Values"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:159
|
||||
msgid "Shipping Rate %"
|
||||
msgstr "Shipping Rate %"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:161
|
||||
#: admin/views/html-admin-page-invoice-setting.php:179
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:165
|
||||
msgid "Shipping Amount"
|
||||
msgstr "Shipping Amount"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:171
|
||||
msgid "Tax Name"
|
||||
msgstr "Tax Name"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:177
|
||||
msgid "Tax Rate %"
|
||||
msgstr "Tax Rate %"
|
||||
|
||||
#. translators: %s: URL
|
||||
#: admin/views/html-admin-page-invoice-setting.php:183
|
||||
#: admin/views/html-admin-page-invoice-setting.php:185
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:161
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:166
|
||||
msgid "Note to Recipient"
|
||||
msgstr "Note to Recipient"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:189
|
||||
#: admin/views/html-admin-page-invoice-setting.php:191
|
||||
#: admin/views/html-admin-page-view-invoice.php:288
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:169
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:174
|
||||
msgid "Terms and Conditions"
|
||||
msgstr "Terms and Conditions"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:194
|
||||
msgid "Log Event"
|
||||
msgstr "Log Event"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:196
|
||||
msgid "Debug Log"
|
||||
msgstr "Debug Log"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:202
|
||||
msgid "Enable logging"
|
||||
msgstr "Enable logging"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:205
|
||||
msgid "Log PayPal events, inside"
|
||||
msgstr "Log PayPal events, inside"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:211
|
||||
#: admin/views/html-admin-page-invoice-setting.php:213
|
||||
msgid "Delete Logs"
|
||||
msgstr "Delete Logs"
|
||||
|
||||
#: admin/views/html-admin-page-invoice-setting.php:218
|
||||
msgid "Save changes"
|
||||
msgstr "Save changes"
|
||||
|
||||
#: admin/views/html-admin-page-template_list.php:24
|
||||
#: admin/views/html-admin-page-template_list.php:43
|
||||
#: admin/views/html-admin-page-view-invoice.php:34
|
||||
msgid "Action"
|
||||
msgstr "Action"
|
||||
|
||||
#: admin/views/html-admin-page-view-invoice.php:13
|
||||
msgid "INVOICE"
|
||||
msgstr "INVOICE"
|
||||
|
||||
#: admin/views/html-admin-page-view-invoice.php:59
|
||||
msgid "Invoice #:"
|
||||
msgstr "Invoice #:"
|
||||
|
||||
#: admin/views/html-admin-page-view-invoice.php:65
|
||||
msgid "Invoice date:"
|
||||
msgstr "Invoice date:"
|
||||
|
||||
#: admin/views/html-admin-page-view-invoice.php:71
|
||||
msgid "Reference:"
|
||||
msgstr "Reference:"
|
||||
|
||||
#: admin/views/html-admin-page-view-invoice.php:77
|
||||
msgid "Due date:"
|
||||
msgstr "Due date:"
|
||||
|
||||
#: admin/views/html-admin-page-view-invoice.php:88
|
||||
msgid "Merchant Info"
|
||||
msgstr "Merchant Info"
|
||||
|
||||
#: admin/views/html-admin-page-view-invoice.php:280
|
||||
msgid "Notes"
|
||||
msgstr "Notes"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-calculations.php:93
|
||||
msgid "Item"
|
||||
msgstr "Item"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-calculations.php:107
|
||||
msgid "Fee"
|
||||
msgstr "Fee"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:21
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:82
|
||||
msgctxt "PayPal Invoice"
|
||||
msgid "PayPal Invoice"
|
||||
msgstr "PayPal Invoice"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:73
|
||||
msgid "Enable/Disable"
|
||||
msgstr "Enable/Disable"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:75
|
||||
msgid "Enable PayPal Invoice"
|
||||
msgstr "Enable PayPal Invoice"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:79
|
||||
msgid "Title"
|
||||
msgstr "Title"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:81
|
||||
msgid "This controls the title which the user sees during checkout."
|
||||
msgstr "This controls the title which the user sees during checkout."
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:88
|
||||
msgid "Payment method description that the customer will see on your checkout."
|
||||
msgstr ""
|
||||
"Payment method description that the customer will see on your checkout."
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:89
|
||||
msgid ""
|
||||
"Please send a check to Store Name, Store Street, Store Town, Store State / "
|
||||
"County, Store Postcode."
|
||||
msgstr ""
|
||||
"Please send a check to Store Name, Store Street, Store Town, Store State / "
|
||||
"County, Store Postcode."
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:93
|
||||
msgid "Instructions"
|
||||
msgstr "Instructions"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:95
|
||||
msgid "Instructions that will be added to the thank you page and emails."
|
||||
msgstr "Instructions that will be added to the thank you page and emails."
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:100
|
||||
msgid "PayPal sandbox"
|
||||
msgstr "PayPal sandbox"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:102
|
||||
msgid "Enable PayPal sandbox"
|
||||
msgstr "Enable PayPal sandbox"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:107
|
||||
msgid "Sandbox PayPal email"
|
||||
msgstr "Sandbox PayPal email"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:117
|
||||
msgid "Get your Sandbox Client ID from PayPal."
|
||||
msgstr "Get your Sandbox Client ID from PayPal."
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:125
|
||||
msgid "Get your Sandbox Secret from PayPal."
|
||||
msgstr "Get your Sandbox Secret from PayPal."
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:131
|
||||
msgid "PayPal email"
|
||||
msgstr "PayPal email"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:141
|
||||
msgid "Get your Client ID from PayPal."
|
||||
msgstr "Get your Client ID from PayPal."
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing-wc-payment.php:149
|
||||
msgid "Get your Secret from PayPal."
|
||||
msgstr "Get your Secret from PayPal."
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing.php:249
|
||||
msgid "Configure"
|
||||
msgstr "Configure"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing.php:250
|
||||
msgid "Docs"
|
||||
msgstr "Docs"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing.php:251
|
||||
msgid "Support"
|
||||
msgstr "Support"
|
||||
|
||||
#: includes/class-angelleye-paypal-invoicing.php:252
|
||||
msgid "Write a Review"
|
||||
msgstr "Write a Review"
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "Angelleye PayPal Invoicing"
|
||||
msgstr "Angelleye PayPal Invoicing"
|
||||
|
||||
#. Plugin URI of the plugin/theme
|
||||
msgid "http://www.angelleye.com/product/angelleye-paypal-invoicing/"
|
||||
msgstr "http://www.angelleye.com/product/angelleye-paypal-invoicing/"
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid ""
|
||||
"This is a short description of what the plugin does. It's displayed in the "
|
||||
"WordPress admin area."
|
||||
msgstr ""
|
||||
"This is a short description of what the plugin does. It's displayed in the "
|
||||
"WordPress admin area."
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "Angell EYE"
|
||||
msgstr "Angell EYE"
|
||||
|
||||
#. Author URI of the plugin/theme
|
||||
msgid "http://www.angelleye.com/"
|
||||
msgstr "http://www.angelleye.com/"
|
||||
133
spec/fixtures/dynamic_finders/plugin_version/aoplayer/translation_file/lang/aoplayer.pot
vendored
Normal file
133
spec/fixtures/dynamic_finders/plugin_version/aoplayer/translation_file/lang/aoplayer.pot
vendored
Normal file
@@ -0,0 +1,133 @@
|
||||
# Copyright (C) 2015 Browsers Detect
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Bros 1.0.0\n"
|
||||
"POT-Creation-Date: 2015-06-25 10:17+0300\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANG <admin@muzu.ru>\n"
|
||||
"X-Generator: Poedit 1.8.1\n"
|
||||
|
||||
#: ../aomailer_plugin.php:1
|
||||
msgid "Param_1"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:2
|
||||
msgid "Param_2"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:3
|
||||
msgid "Param_3"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:4
|
||||
msgid "Param_4"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:5
|
||||
msgid "Param_5"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:6
|
||||
msgid "Param_6"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:7
|
||||
msgid "Param_7"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:8
|
||||
msgid "Param_8"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:9
|
||||
msgid "Param_9"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:10
|
||||
msgid "Param_10"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:11
|
||||
msgid "Param_11"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:12
|
||||
msgid "Param_12"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:13
|
||||
msgid "Param_13"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:14
|
||||
msgid "Param_14"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:15
|
||||
msgid "Param_15"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:16
|
||||
msgid "Param_16"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:17
|
||||
msgid "Param_17"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:18
|
||||
msgid "Param_18"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:19
|
||||
msgid "Param_19"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:20
|
||||
msgid "Param_20"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:21
|
||||
msgid "Param_21"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:22
|
||||
msgid "Param_22"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:23
|
||||
msgid "Param_23"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:24
|
||||
msgid "Param_24"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:25
|
||||
msgid "Param_25"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:26
|
||||
msgid "Param_26"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:27
|
||||
msgid "Param_27"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:28
|
||||
msgid "Param_28"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:29
|
||||
msgid "Aoplayer"
|
||||
msgstr ""
|
||||
|
||||
#: ../aomailer_plugin.php:30
|
||||
msgid "Aoplayer Plugin"
|
||||
msgstr ""
|
||||
|
||||
23
spec/fixtures/dynamic_finders/plugin_version/blockbuddy/composer_file/package.json
vendored
Normal file
23
spec/fixtures/dynamic_finders/plugin_version/blockbuddy/composer_file/package.json
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "block-buddy",
|
||||
"version": "0.1",
|
||||
"description": "",
|
||||
"main": "index.php",
|
||||
"scripts": {
|
||||
"start": "cgb-scripts start",
|
||||
"build": "cgb-scripts build",
|
||||
"eject": "cgb-scripts eject"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@bitbucket.org/hookturn/custom-query-block.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"homepage": "https://bitbucket.org/hookturn/custom-query-block#readme",
|
||||
"dependencies": {
|
||||
"cgb-scripts": "^1.11.0",
|
||||
"create-guten-block": "^1.11.0",
|
||||
"npm": "^5.10.0"
|
||||
}
|
||||
}
|
||||
17
spec/fixtures/dynamic_finders/plugin_version/call-to-action-block/composer_file/package.json
vendored
Normal file
17
spec/fixtures/dynamic_finders/plugin_version/call-to-action-block/composer_file/package.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "my-block-cgb-guten-block",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "cgb-scripts start",
|
||||
"build": "cgb-scripts build",
|
||||
"eject": "cgb-scripts eject"
|
||||
},
|
||||
"dependencies": {
|
||||
"cgb-scripts": "1.13.0",
|
||||
"classnames": "^2.2.6",
|
||||
"moment": "^2.23.0",
|
||||
"query-string": "^6.2.0",
|
||||
"querystringify": "^2.1.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
# This file is distributed under the GNU General Public License v3 or later.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Clicksports Maps v1.0.0\n"
|
||||
"POT-Creation-Date: 2012-10-05 10:50+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Language-Team: CLICKSPORTS <wordpress@clicksports.de>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Textdomain-Support: yes"
|
||||
"X-Generator: Poedit 1.6.4\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html_x:1,2c;esc_html__;esc_attr_e;esc_attr_x:1,2c;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext:1,2;__ngettext_noop:1,2;_c,_nc:4c,1,2;\n"
|
||||
"X-Poedit-Basepath: ../\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
"X-Poedit-Language: English\n"
|
||||
"X-Poedit-Country: UNITED STATES\n"
|
||||
"X-Poedit-Bookmarks: \n"
|
||||
17
spec/fixtures/dynamic_finders/plugin_version/clocks-block/composer_file/package.json
vendored
Normal file
17
spec/fixtures/dynamic_finders/plugin_version/clocks-block/composer_file/package.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "my-block-cgb-guten-block",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "cgb-scripts start",
|
||||
"build": "cgb-scripts build",
|
||||
"eject": "cgb-scripts eject"
|
||||
},
|
||||
"dependencies": {
|
||||
"cgb-scripts": "1.13.0",
|
||||
"classnames": "^2.2.6",
|
||||
"moment": "^2.23.0",
|
||||
"query-string": "^6.2.0",
|
||||
"querystringify": "^2.1.0"
|
||||
}
|
||||
}
|
||||
1603
spec/fixtures/dynamic_finders/plugin_version/coblocks/translation_file/languages/coblocks.pot
vendored
Normal file
1603
spec/fixtures/dynamic_finders/plugin_version/coblocks/translation_file/languages/coblocks.pot
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,63 @@
|
||||
# Copyright (C) 2019 Woocommerce Colorlab
|
||||
# This file is distributed under the same license as the Woocommerce Colorlab package.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Woocommerce Colorlab 1.0.6\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woocommerce-"
|
||||
"colorlab\n"
|
||||
"POT-Creation-Date: 2019-01-01 15:44:41+00:00\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
||||
#: admin/class-woocommerce-colorlab-admin.php:46
|
||||
msgid "Colorlab product id"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-woocommerce-colorlab-admin.php:49
|
||||
msgid ""
|
||||
"Add here the colorlab product id. If this is not added, we will try to match "
|
||||
"the SKU, and the product ID."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-woocommerce-colorlab-settings.php:18
|
||||
#: admin/class-woocommerce-colorlab-settings.php:39
|
||||
msgid "Colorlab"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-woocommerce-colorlab-settings.php:48
|
||||
msgid "Shop ID"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-woocommerce-colorlab-settings.php:49
|
||||
msgid "Your colorlab ID"
|
||||
msgstr ""
|
||||
|
||||
#: public/class-woocommerce-colorlab-public.php:158
|
||||
msgid "Customize your personalization"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "Woocommerce Colorlab"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin/theme
|
||||
msgid "http://example.com/woocommerce-colorlab-uri/"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid ""
|
||||
"This is a short description of what the plugin does. It's displayed in the "
|
||||
"WordPress admin area."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "Your Name or Your Company"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin/theme
|
||||
msgid "http://example.com/"
|
||||
msgstr ""
|
||||
@@ -246,6 +246,7 @@ Content-Type: text/html; charset=UTF-8
|
||||
<!-- Powered by WeatherIcon v2.99.102 | http://www.viper007bond.com/wordpress-plugins/weathericon/ -->
|
||||
|
||||
|
||||
<!-- wordpress-seo -->
|
||||
<!-- This site is optimized with the Yoast WordPress SEO plugin v1.7.3.3 - https://yoast.com/wordpress/plugins/seo/ -->
|
||||
<!-- This site is optimized with the Yoast SEO plugin v2.3.4 - https://yoast.com/wordpress/plugins/seo/ -->
|
||||
<meta name="robots" content="noindex,follow"/>
|
||||
@@ -259,6 +260,11 @@ Content-Type: text/html; charset=UTF-8
|
||||
<!-- / Yoast WordPress SEO plugin. -->
|
||||
|
||||
|
||||
<!-- wordpress-seo-premium -->
|
||||
<!-- This site is optimized with the Yoast SEO Premium plugin v9.5 - https://yoast.com/wordpress/plugins/seo/ -->
|
||||
<!-- / Yoast SEO Premium plugin. -->
|
||||
|
||||
|
||||
<!--
|
||||
wsl_render_auth_widget
|
||||
WordPress Social Login 2.2.3.
|
||||
@@ -969,3 +975,7 @@ If above timestamp is not current time, this page is cached.</p> -->
|
||||
<!-- Optimized by WP Performance 1.0.0 -->
|
||||
|
||||
|
||||
<!-- sharing-plus -->
|
||||
<!-- Open Graph Meta Tags generated by Sharing Plus 1.0.0 -->
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# Copyright (C) 2019 Dash Notifier
|
||||
# This file is distributed under the same license as the Dash Notifier package.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Dash Notifier 1.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/dash-notifier\n"
|
||||
"POT-Creation-Date: 2019-02-28 21:04:36+00:00\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
||||
#: dash-notifier.php:313
|
||||
msgid "Dismiss"
|
||||
msgstr ""
|
||||
|
||||
#: dash-notifier.php:324
|
||||
msgctxt "plugin"
|
||||
msgid "Activate %s"
|
||||
msgstr ""
|
||||
|
||||
#: dash-notifier.php:327
|
||||
msgid "Install %s now"
|
||||
msgstr ""
|
||||
|
||||
#: dash-notifier.php:331
|
||||
msgid "Never Notify Me Again"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "Dash Notifier"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin/theme
|
||||
msgid "https://github.com/litespeedtech/wp-dashboard-notifier"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid "WordPress dashboard notifier"
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "LiteSpeed Technologies"
|
||||
msgstr ""
|
||||
68
spec/fixtures/dynamic_finders/plugin_version/dashly/translation_file/languages/dashly-ru_RU.po
vendored
Normal file
68
spec/fixtures/dynamic_finders/plugin_version/dashly/translation_file/languages/dashly-ru_RU.po
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dashly 1.1.0\n"
|
||||
"POT-Creation-Date: 2018-11-01 15:50+0500\n"
|
||||
"PO-Revision-Date: 2018-11-01 16:15+0500\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Dashly <support@dashly.app>\n"
|
||||
"Language: ru_RU\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2\n"
|
||||
"X-Poedit-Basepath: ..\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Poedit-KeywordsList: __;_e\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
|
||||
#: includes/main.php:47
|
||||
msgid "Settings"
|
||||
msgstr "Настройки"
|
||||
|
||||
#: includes/main.php:56 includes/main.php:57
|
||||
msgid "Dashly"
|
||||
msgstr ""
|
||||
|
||||
#: includes/main.php:121
|
||||
msgid "Settings saved"
|
||||
msgstr "Настройки сохранены"
|
||||
|
||||
#: includes/main.php:124
|
||||
msgid "Failed"
|
||||
msgstr "Не удалось сохранить настройки"
|
||||
|
||||
#: options.php:8
|
||||
msgid ""
|
||||
"You can look up parameters \"API Key\", \"API Secret\" and \"User Auth Key\" "
|
||||
"in \"Settings\" section of your Dashly account administrative panel"
|
||||
msgstr ""
|
||||
"Параметры \"API Key\", \"API Secret\" и \"User Auth Key\" можно узнать в "
|
||||
"разделе \"Настройки\" в панели администратора Вашего аккаунта Dashly"
|
||||
|
||||
#: options.php:14
|
||||
msgid "API Key"
|
||||
msgstr "API Key"
|
||||
|
||||
#: options.php:20
|
||||
msgid "API Secret"
|
||||
msgstr ""
|
||||
|
||||
#: options.php:26
|
||||
msgid "User Auth Key"
|
||||
msgstr ""
|
||||
|
||||
#: options.php:31
|
||||
msgid "User authorization"
|
||||
msgstr "Авторизация пользователей"
|
||||
|
||||
#: options.php:36
|
||||
msgid "Send customer ID to Dashly as User ID"
|
||||
msgstr "Отправлять ID пользователя в Dashly в качестве User ID"
|
||||
|
||||
#: options.php:43
|
||||
msgid "Save Changes"
|
||||
msgstr "Сохранить изменения"
|
||||
|
||||
#~ msgid "<No image>"
|
||||
#~ msgstr "<Нет изображения>"
|
||||
124
spec/fixtures/dynamic_finders/plugin_version/developer-tool/translation_file/languages/dev-tool.pot
vendored
Normal file
124
spec/fixtures/dynamic_finders/plugin_version/developer-tool/translation_file/languages/dev-tool.pot
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
# Copyright (C) 2019 Navanath Bhosale
|
||||
# This file is distributed under the GPLv2.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Developer Tool 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/developer-tool\n"
|
||||
"POT-Creation-Date: 2019-02-05 09:02:37+00:00\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: en\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-Country: United States\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-KeywordsList: "
|
||||
"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
|
||||
"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
|
||||
"X-Poedit-Basepath: ../\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
"X-Poedit-Bookmarks: \n"
|
||||
"X-Textdomain-Support: yes\n"
|
||||
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
||||
|
||||
#: classes/class-dev-tool.php:142 includes/settings.php:26
|
||||
msgid "Error Log"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-dev-tool.php:150 includes/settings.php:63
|
||||
msgid "Debug Settings"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:66
|
||||
msgid "Debug log not cleared."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:74
|
||||
msgid "Debug log cleared successfully."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:110
|
||||
msgid ""
|
||||
"Your wp-config file not updated. Copy and paste following code in your "
|
||||
"wp-config.php file."
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:50
|
||||
msgid "Clear Log"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:69
|
||||
msgid ""
|
||||
"( These settings will overwrite wp-config.php file. Please make sure to "
|
||||
"backup first. )"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:72
|
||||
msgid "wp-config.php File Backup"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:75
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:79
|
||||
msgid "Enable Debug Settings"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:85
|
||||
msgid "Enable WP_DEBUG mode => "
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:88
|
||||
msgid "define(WP_DEBUG, true);"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:95
|
||||
msgid "Enable debug logging to the /wp-content/debug.log file => "
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:98
|
||||
msgid "define(WP_DEBUG_LOG, true);"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:105
|
||||
msgid "Enable display of errors and warnings to frontend => "
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:108
|
||||
msgid "define(WP_DEBUG_DISPLAY, true);"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:115
|
||||
msgid "Enable Script Debug - only needed if you are modifying these core files => "
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:118
|
||||
msgid "define( SCRIPT_DEBUG, true );"
|
||||
msgstr ""
|
||||
|
||||
#: includes/settings.php:125
|
||||
msgid "Save Changes"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "Developer Tool"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid ""
|
||||
"Developer Tool helps you to <strong> debug your working "
|
||||
"environment</strong>. It shows you notices / warnings / errors which may "
|
||||
"cause during development or beacuse of conflicts."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "Navanath Bhosale"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin/theme
|
||||
msgid "https://profiles.wordpress.org/navanathbhosale/profile/"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,185 @@
|
||||
# Copyright (C) 2019 Sébastien Dumont
|
||||
# This file is distributed under the same license as the Double Image plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Double Image 1.2.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/double-image\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-01-26T19:51:56+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.1.0\n"
|
||||
"X-Domain: double-image\n"
|
||||
|
||||
#: src/block/double-image/components/controls.js:44
|
||||
msgid "Edit first image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/controls.js:54
|
||||
msgid "Remove first image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/controls.js:70
|
||||
msgid "Edit second image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/controls.js:80
|
||||
msgid "Remove second image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/edit.js:119
|
||||
msgid "Add image"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
#: src/block/double-image/components/edit.js:126
|
||||
#: src/block/double-image/index.js:25
|
||||
msgid "Double Image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/edit.js:127
|
||||
msgid "Drag an image, upload a new one or select a file from your library."
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/edit.js:135
|
||||
msgid "Uploading image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/edit.js:267
|
||||
msgid "Enter optional overlay text..."
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:105
|
||||
msgid "First Image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:187
|
||||
msgid "Second Image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:189
|
||||
msgid "Fixed Background"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:192
|
||||
msgid "Enable to have a parallax scrolling effect."
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:196
|
||||
msgid "Show Overlay"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:199
|
||||
msgid "Enable to add a text overlay."
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:204
|
||||
msgid "Overlay Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:209
|
||||
msgid "Background Color"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:214
|
||||
msgid "Text Color"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:219
|
||||
msgid "Background Opacity"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:225
|
||||
msgid "Change the background opacity for the overlay."
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:229
|
||||
msgid "Text Position"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:234
|
||||
msgid "Top"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:238
|
||||
msgid "Bottom"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:243
|
||||
msgid "Place overlay text at the top or bottom."
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:247
|
||||
msgid "Font Style"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:252
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:256
|
||||
msgid "Italic"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:79
|
||||
msgid "Image Layout"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:85
|
||||
msgid "Narrow | Wide"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:89
|
||||
msgid "Wide | Narrow"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:93
|
||||
msgid "Even"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/components/inspector.js:97
|
||||
msgid "Stacked"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/index.js:192
|
||||
msgid "Insert two images side by side or stacked with optional overlay text."
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/index.js:30
|
||||
msgid "image"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/index.js:31
|
||||
msgid "overlay"
|
||||
msgstr ""
|
||||
|
||||
#: src/block/double-image/index.js:32
|
||||
msgid "double"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "https://github.com/seb86/double-image"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "A way to insert two images side by side or stacked with optional overlay text using Gutenberg."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "Sébastien Dumont"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://sebastiendumont.com"
|
||||
msgstr ""
|
||||
|
||||
#: double-image.php:75
|
||||
msgid "Cloning this object is forbidden."
|
||||
msgstr ""
|
||||
|
||||
#: double-image.php:85
|
||||
msgid "Unserializing instances of this class is forbidden."
|
||||
msgstr ""
|
||||
19
spec/fixtures/dynamic_finders/plugin_version/dummy-images/composer_file/package.json
vendored
Normal file
19
spec/fixtures/dynamic_finders/plugin_version/dummy-images/composer_file/package.json
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"name": "DummyImages",
|
||||
"version": "1.0.0",
|
||||
"description": "This plugin is a generator of customizable dummy images.",
|
||||
"license": "ISC",
|
||||
"author": "mbelchev",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/mbelchev/dummy-images.git"
|
||||
},
|
||||
"scripts": {
|
||||
"build-css": "node-sass assets/sass/dummy-images.scss assets/css/dummy-images.min.css --output-style compressed",
|
||||
"build-js": "uglifyjs assets/js/src/dummy-images.js --output assets/js/dist/dummy-images.min.js --mangle --compress"
|
||||
},
|
||||
"devDependencies": {
|
||||
"node-sass": "^4.11.0",
|
||||
"uglify-js": "^3.4.9"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
# Copyright (C) 2019 Brainstorm Force
|
||||
# This file is distributed under the same license as the Easy Digital Downloads - Purchase Details package.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Easy Digital Downloads - Purchase Details 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: "
|
||||
"https://wordpress.org/support/plugin/edd-purchase-details\n"
|
||||
"POT-Creation-Date: 2019-01-29 06:46:29+00:00\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: en\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-Country: United States\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-KeywordsList: "
|
||||
"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
|
||||
"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
|
||||
"X-Poedit-Basepath: ../\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
"X-Poedit-Bookmarks: \n"
|
||||
"X-Textdomain-Support: yes\n"
|
||||
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
||||
|
||||
#: classes/class-edd-purchase-details-admin.php:40
|
||||
msgid " Access Payment History"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-admin.php:40
|
||||
msgid "Access Payment History"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:76
|
||||
msgid "Enter customer email address"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:78
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:177
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:178
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:179
|
||||
msgid "Products"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:180
|
||||
msgid "Amount"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:181
|
||||
#: classes/class-edd-purchase-details-frontend.php:285
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:182
|
||||
msgid "License Keys"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:215
|
||||
msgid "View Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:233
|
||||
#: classes/class-edd-purchase-details-frontend.php:239
|
||||
msgid "This user hasn't purchased anything!"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:244
|
||||
#: classes/class-edd-purchase-details-frontend.php:333
|
||||
msgid "You do not have permission to access this page"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:249
|
||||
#: classes/class-edd-purchase-details-frontend.php:339
|
||||
msgid " You are not logged in. Please log in and try again."
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:270
|
||||
msgid "Go back"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:283
|
||||
msgid "Item"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:284
|
||||
msgid "Key"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:286
|
||||
msgid "Activations"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:287
|
||||
msgid "Expiration"
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-frontend.php:321
|
||||
#: classes/class-edd-purchase-details-frontend.php:327
|
||||
msgid "Invalid Request."
|
||||
msgstr ""
|
||||
|
||||
#: classes/class-edd-purchase-details-loader.php:74
|
||||
#. translators: %s: html tags
|
||||
msgid ""
|
||||
"The %1$s EDD Purchase Details %2$s plugin requires %1$s Easy Digital "
|
||||
"Downloads %2$s plugin installed & activated."
|
||||
msgstr ""
|
||||
|
||||
#: includes/admin-setting-user-access.php:15
|
||||
msgid "Access Payment History "
|
||||
msgstr ""
|
||||
|
||||
#: includes/admin-setting-user-access.php:16
|
||||
msgid "Manage which user roles can access purchase details information."
|
||||
msgstr ""
|
||||
|
||||
#: includes/admin-setting-user-access.php:47
|
||||
msgid "Getting Started"
|
||||
msgstr ""
|
||||
|
||||
#: includes/admin-setting-user-access.php:50
|
||||
msgid "Copy this shortcode and paste it into your post or page"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "Easy Digital Downloads - Purchase Details"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin/theme
|
||||
msgid "https://www.brainstormforce.com"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid "Easy Digital Downloads Access to Purchase Details"
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "Brainstorm Force"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,141 @@
|
||||
# Copyright (C) 2019 Sanjeev Aryal
|
||||
# This file is distributed under the same license as the Fancy Fields For WPForms package.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Fancy Fields For WPForms 1.0.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-02-01 02:49:50+00:00\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
|
||||
"X-Generator: grunt-wp-i18n1.0.2\n"
|
||||
|
||||
#: includes/class-fancy-fields-for-wpforms.php:48
|
||||
#: includes/class-fancy-fields-for-wpforms.php:57
|
||||
msgid "Cheatin’ huh?"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-fancy-fields-for-wpforms.php:154
|
||||
msgid "Please install WPForms plugin to use Fancy Fields For WPForms."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:46
|
||||
#. translators: %s: Fancy Fields For WPForms plugin link
|
||||
msgid "Thank you for using Fancy Fields For WPForms! %s plugin is recommended!"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:46
|
||||
msgid "Entries For WPForms"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:66
|
||||
msgid "Deactivating..."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:67
|
||||
msgid "Error!"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:68
|
||||
msgid "Success!"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:69
|
||||
msgid "Plugin Deactivated!"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:70
|
||||
msgid "Sad to see you leave!"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:71
|
||||
msgid "Oops! Something went wrong"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:101
|
||||
#: includes/fields/class-ffwp-field-date-time.php:20
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:151
|
||||
msgid ""
|
||||
"Would you care to let me know the deactivation reason so that I can improve "
|
||||
"it for you?"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-ffwp-core.php:158
|
||||
msgid "Skip and deactivate"
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-date-time.php:152
|
||||
msgid "Please enter a valid date."
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-divider.php:20
|
||||
msgid "Section Divider"
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:20
|
||||
msgid "File Upload"
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:61
|
||||
msgid "Allowed Extensions"
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:62
|
||||
msgid ""
|
||||
"Enter allowed extensions for file upload. Add extensions separated by "
|
||||
"comma. For e.g. csv, docx, png, jpeg"
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:91
|
||||
msgid "Max File Size"
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:92
|
||||
msgid "Enter maximum file size to upload in kb (kilobytes). 1 mb = 1024 kb."
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:215
|
||||
msgid "File upload is required."
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:225
|
||||
msgid "Maximum file size exceeded."
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:239
|
||||
msgid "File extension not allowed."
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-file-upload.php:246
|
||||
msgid "File upload error."
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-url.php:20
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#: includes/fields/class-ffwp-field-url.php:156
|
||||
msgid "Please enter a valid url."
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "Fancy Fields For WPForms"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid "Fancy Fields For WPForms Lite Plugin Including File Upload"
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "Sanjeev Aryal"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin/theme
|
||||
msgid "http://www.sanjeebaryal.com.np"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,366 @@
|
||||
# Copyright (C) 2019 Egor Milyukov
|
||||
# This file is distributed under the same license as the Flight Search Widget Blocks plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Flight Search Widget Blocks 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/flight-search-widget-blocks\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-01-07T13:06:40+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.1.0\n"
|
||||
"X-Domain: fswb\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
#: include/fswb-admin.php:20
|
||||
#: include/fswb-categories.php:15
|
||||
#: flight-search-widget-blocks.php:24
|
||||
msgid "Flight Search Widget Blocks"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "http://swb.milukove.ru/"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Plugin adds Skyscanner widgets as gutenberg editor blocks."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
#: flight-search-widget-blocks.php:27
|
||||
msgid "Egor Milyukov"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "http://milukove.ru/"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:25
|
||||
msgid "General settings"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:29
|
||||
msgid "Associate ID"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:29
|
||||
msgid "If you have a direct partnership with Skyscanner paste your associate ID here to ensure your exits are tracked. "
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:32
|
||||
msgid "If you do not know your associate ID, you can obtain it from your account manager."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:38
|
||||
msgid "WhiteLabel domain"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:38
|
||||
msgid "Widgets have been designed to work with White Labels from the start, and include features such as automatic styling to make your life easier."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:44
|
||||
msgid "Set widget language."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:44
|
||||
msgid "This language will be used on skyscannner or whitelabel site when user redirected to it by one of your widgets"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:100
|
||||
msgid "Widget Blocks"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:106
|
||||
msgid "Basic Widget Block"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:107
|
||||
msgid "Basic Widget provide a clean and simple tracked referral to the flight search on Skyscanner or a White Label."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:114
|
||||
msgid "Location Widget Block"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:115
|
||||
msgid "Location Widgets provide a clean and simple tracked referral to the flight search on Skyscanner or a White Label."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:122
|
||||
msgid "Simple Flight Search Widget"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:123
|
||||
msgid "Simple Flight Search Widget gives you everything your users need to start a search for flights on your site."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:131
|
||||
#: include/fswb-admin.php:189
|
||||
msgid "<a href=\"%s\"><strong>Get Premium</strong></a> to enable Flight Search Widget and Insider Tips Widget"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:144
|
||||
msgid "Flight Search Widget"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:144
|
||||
#: include/fswb-admin.php:152
|
||||
msgid "Premium"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:145
|
||||
msgid "Flight Search Widget is similar to the Simple Flight Search Widget, but it provides a comprehensive control of flight search on your site."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:152
|
||||
msgid "Insider Tips Widget"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:153
|
||||
msgid "Insider Tips Widgets are designed to provide users with helpful statistical information about flights, like the cheapest month to fly and indicative pricing for a specified route."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:166
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:169
|
||||
msgid "Plugin name: %s"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:171
|
||||
msgid "Plugin author: %s"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:173
|
||||
msgid "Plugin version: %s"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:182
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:182
|
||||
msgid "Flight Search Widget Blocks is the easiest way to start earning money with SkyScanner affiliate program. Plugin adds Skyscanner widgets as gutenberg editor customizable blocks."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:182
|
||||
msgid "Adding a widget to your site takes just a few clicks. Set some options on the plugin settings page. Then go to your post edit page and pick up one of SkyScanner Widgets from Flight Search Widgets section."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:182
|
||||
msgid "Thats it, the widget is ready to go. You can change some styles and set another custom parameters or just use it as is. Plugin will work fine both ways."
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:197
|
||||
msgid "<a href=\"%s\">Full plugin documentation</a>"
|
||||
msgstr ""
|
||||
|
||||
#: include/fswb-admin.php:202
|
||||
msgid "If you like our plugin and you find it useful, please, help us spread a word about it — <a href=\"%s\">leave a review</a>"
|
||||
msgstr ""
|
||||
|
||||
#: flight-search-widget-blocks.php:26
|
||||
msgid "Plugin adds Skyscanner widgets as gutenberg editor blocks"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-location-widget.js:57
|
||||
#: assets/js/blocks/fswb-location-widget.js:305
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:1
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:3
|
||||
msgid "SkyScanner Location Widget"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-location-widget.js:153
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:161
|
||||
#: assets/js/blocks/fswb-basic-widget.js:149
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:161
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-basic-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Button Label"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-location-widget.js:158
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:2
|
||||
msgid "Use {location} to insert Location into button text. E.g.: \"Let's go to {location} right now!\""
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-location-widget.js:168
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:2
|
||||
msgid "Location name in single quotes"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-location-widget.js:182
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:175
|
||||
#: assets/js/blocks/fswb-basic-widget.js:163
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:175
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-basic-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Show arrow icon insted of a plane"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-location-widget.js:193
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:186
|
||||
#: assets/js/blocks/fswb-basic-widget.js:174
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:186
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-basic-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Open in new tab"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-location-widget.js:203
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:207
|
||||
#: assets/js/blocks/fswb-basic-widget.js:184
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:207
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-basic-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:209
|
||||
msgid "Widget colors"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-location-widget.js:211
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:215
|
||||
#: assets/js/blocks/fswb-basic-widget.js:192
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:215
|
||||
#: assets/js/blocks/min/fswb-location-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-basic-widget.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Background color"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:57
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:1
|
||||
msgid "SkyScanner Flight Search Widget"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:196
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:196
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Enable Placeholders"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:201
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:201
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Show placeholders inside input tags instead of label tags"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:222
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:222
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Font color"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:229
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:229
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Button background color"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:236
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:236
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:2
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:2
|
||||
msgid "Button font color"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-flight-search-widget__premium_only.js:339
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:57
|
||||
#: assets/js/blocks/fswb-simple-flight-search-widget.js:339
|
||||
#: assets/js/blocks/min/fswb-flight-search-widget__premium_only.js:3
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:1
|
||||
#: assets/js/blocks/min/fswb-simple-flight-search-widget.js:3
|
||||
msgid "SkyScanner Simple Flight Search Widget"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/fswb-basic-widget.js:57
|
||||
#: assets/js/blocks/fswb-basic-widget.js:283
|
||||
#: assets/js/blocks/min/fswb-basic-widget.js:1
|
||||
#: assets/js/blocks/min/fswb-basic-widget.js:3
|
||||
msgid "SkyScanner Basic Widget"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:1
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:3
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:57
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:349
|
||||
msgid "SkyScanner Insider Tips Widget"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:163
|
||||
msgid "Insider Tips Widget requires presetting both Origin and Destination locations"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:168
|
||||
msgid "Origin name"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:173
|
||||
msgid "Free text (Location name in single quotes)"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:179
|
||||
msgid "Destination name"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:184
|
||||
msgid "Free text (Destination name in single quotes)"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:190
|
||||
msgid "Defines a type of displayed statistics"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:195
|
||||
msgid "The widget's design completely depends on this attribute"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:217
|
||||
msgid "Text color of the heading banner"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:224
|
||||
msgid "Color for the chart line/bars"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:231
|
||||
msgid "Color for the chart minimum/maximum data point"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:238
|
||||
msgid "Background color of the search button"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/blocks/min/fswb-insider-tips-widget__premium_only.js:2
|
||||
#: assets/js/blocks/fswb-insider-tips-widget__premium_only.js:245
|
||||
msgid "Font color of the search button"
|
||||
msgstr ""
|
||||
55
spec/fixtures/dynamic_finders/plugin_version/g-debugger/composer_file/package.json
vendored
Normal file
55
spec/fixtures/dynamic_finders/plugin_version/g-debugger/composer_file/package.json
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"name": "g-debugger",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"description": "Visual debugging tools for block development",
|
||||
"scripts": {
|
||||
"build": "NODE_ENV=production rollup -c",
|
||||
"dev": "rollup -c -w",
|
||||
"test": "npm run test:lint",
|
||||
"test:lint": "eslint src",
|
||||
"prepackage-plugin": "npm run build",
|
||||
"package-plugin": "npm-pack-zip"
|
||||
},
|
||||
"files": [
|
||||
"g-debugger.js",
|
||||
"g-debugger.php",
|
||||
"readme.txt",
|
||||
"style.css"
|
||||
],
|
||||
"author": {
|
||||
"name": "Andrew Duthie",
|
||||
"email": "andrew@andrewduthie.com",
|
||||
"url": "https://andrewduthie.com"
|
||||
},
|
||||
"homepage": "https://github.com/aduth/g-debugger",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aduth/g-debugger.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/aduth/g-debugger/issues"
|
||||
},
|
||||
"license": "GPL-2.0-or-later",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.2.2",
|
||||
"@babel/plugin-transform-react-constant-elements": "^7.2.0",
|
||||
"@babel/plugin-transform-react-jsx": "^7.2.0",
|
||||
"@babel/preset-env": "^7.2.3",
|
||||
"@wordpress/babel-plugin-import-jsx-pragma": "^1.1.3",
|
||||
"@wordpress/eslint-plugin": "^1.0.1",
|
||||
"eslint": "^5.12.1",
|
||||
"npm-pack-zip": "^1.2.7",
|
||||
"rollup": "^1.1.0",
|
||||
"rollup-plugin-babel": "^4.3.2",
|
||||
"rollup-plugin-commonjs": "^9.2.0",
|
||||
"rollup-plugin-css-only": "^0.4.0",
|
||||
"rollup-plugin-node-resolve": "^4.0.0",
|
||||
"rollup-plugin-postcss": "^1.6.3",
|
||||
"rollup-plugin-sass": "^1.1.0",
|
||||
"rollup-plugin-terser": "^4.0.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"clsx": "^1.0.1"
|
||||
}
|
||||
}
|
||||
13
spec/fixtures/dynamic_finders/plugin_version/gosign-promo-box-block/composer_file/package.json
vendored
Normal file
13
spec/fixtures/dynamic_finders/plugin_version/gosign-promo-box-block/composer_file/package.json
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "gosign-promo-box",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "cgb-scripts start",
|
||||
"build": "cgb-scripts build",
|
||||
"eject": "cgb-scripts eject"
|
||||
},
|
||||
"dependencies": {
|
||||
"cgb-scripts": "1.15.0"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user