Compare commits

..

130 Commits
2.4.0 ... 2.6.0

Author SHA1 Message Date
Athou
a75f726111 2.6.0 release 2022-08-08 12:43:36 +02:00
Athou
d34c0c8652 avoid exposing the smtp host/port when an email could not be sent 2022-08-07 22:11:12 +02:00
Jérémie Panzer
c0bd7d0610 Merge pull request #1011 from Athou/dependabot/maven/org.postgresql-postgresql-42.4.1
Bump postgresql from 42.3.3 to 42.4.1
2022-08-06 21:41:12 +02:00
dependabot[bot]
155a66b913 Bump postgresql from 42.3.3 to 42.4.1
Bumps [postgresql](https://github.com/pgjdbc/pgjdbc) from 42.3.3 to 42.4.1.
- [Release notes](https://github.com/pgjdbc/pgjdbc/releases)
- [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.3.3...REL42.4.1)

---
updated-dependencies:
- dependency-name: org.postgresql:postgresql
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-06 07:15:04 +00:00
Athou
c7216ef0a6 fix "MessageBodyWriter not found for media type=text/plain, type=class io.dropwizard.jersey.validation.ValidationErrorMessage" 2022-08-05 14:10:48 +02:00
Athou
c692a8d8f3 fix for "No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.Long'." 2022-08-03 15:24:55 +02:00
Athou
54e6bc3154 add matrix to test for multiple java versions 2022-07-30 13:55:57 +02:00
Athou
2e24d32cc2 add support for java17 (#1009) 2022-07-30 13:55:57 +02:00
Jérémie Panzer
1c7e31a464 Merge pull request #1008 from anthonyryan1/master
Losslessly optimize images to reduce filesize
2022-07-26 07:19:05 +02:00
Anthony Ryan
94bf8338cd Losslessly optimize images to reduce filesize
Optimized using Efficient Compression Tool, reducing the filesize
without any reduction in quality.
2022-07-25 21:53:27 -04:00
Athou
152f0bd727 use the logical date of the entry and not the date the entry was inserted in the database when marking entries older than a threshold (#1007) 2022-07-25 17:29:21 +02:00
Athou
6ffdc7b07d mv_store=false is not required anymore (fixes #1007) 2022-07-25 17:13:28 +02:00
Athou
fe87566668 validate more inputs 2022-07-24 13:31:48 +02:00
Athou
c36dd47afd request current password when changing profile data for security reasons 2022-07-23 11:05:19 +02:00
Athou
b6a9b17410 Merge branch 'matthewlenz-patch-1' 2022-07-23 07:59:59 +02:00
Athou
c78fdf87b8 add valid checksum for instances where the changelog already passed 2022-07-23 07:55:39 +02:00
matthewlenz
55a1ccc849 Invalid migration in db.changelog-2.6.xml
Fix migration for mysql/mariadb environments missing columnDataType on renameColumn
2022-07-22 21:35:49 -05:00
Athou
d97f42ff2d add first integration test 2022-07-17 10:25:07 +02:00
Athou
9ab52aeaf2 migrate to junit5 2022-07-15 19:28:11 +02:00
Athou
a0190143fe fix deprecation warnings 2022-07-14 21:13:12 +02:00
Athou
a48135a60d send X-Frame-Options header with value "DENY" 2022-07-14 13:58:37 +02:00
Athou
09eec3235d filter is a reserved keyword in liquibase 4.7+ for h2, rename to filtering_expression 2022-07-14 13:58:37 +02:00
Athou
d21e5dfee4 upgrade dropwizard to 2.1 2022-07-14 13:58:37 +02:00
Athou
899a8d746a increase minimum password strength 2022-07-13 22:20:19 +02:00
Athou
9bbfc2de3f avoid exposing registered email addresses 2022-07-13 13:28:18 +02:00
Jérémie Panzer
d82bb22341 Create SECURITY.md 2022-07-06 12:27:16 +02:00
Athou
0fd55c6635 keep using log4j-over-slf4j 2022-03-22 16:20:55 +01:00
Athou
4b346dd2e1 liquibase upgrade (#993) 2022-03-22 16:01:44 +01:00
Athou
13a0516cce add support for mariadb 2022-03-22 16:01:44 +01:00
Athou
5fcd7ccb58 fix checkstyle issues 2022-03-22 16:01:44 +01:00
Athou
b0aef46c99 add docker-compose config to start mysql and pgsql local databases 2022-03-22 16:01:44 +01:00
Athou
ec50530284 downgrade mysql client to fix java.lang.ClassCastException: class java.time.LocalDateTime cannot be cast to class java.lang.String (#993)
https://forum.liquibase.org/t/liquibaseexception-java-lang-classcastexception-class-java-time-localdatetime-cannot-be-cast-to-class-java-lang-string/5059
2022-03-22 14:40:53 +01:00
Athou
cbc4ebe7b3 fix infinite build in recent eclipse versions 2022-03-22 14:28:16 +01:00
Jérémie Panzer
f5339db646 Merge pull request #995 from Athou/dependabot/maven/com.h2database-h2-2.1.210
Bump h2 from 2.0.206 to 2.1.210
2022-03-22 12:51:50 +01:00
Jérémie Panzer
c573e70e8b Merge pull request #994 from Athou/dependabot/maven/org.postgresql-postgresql-42.3.3
Bump postgresql from 42.3.2 to 42.3.3
2022-03-22 12:50:37 +01:00
dependabot[bot]
16b3049839 Bump h2 from 2.0.206 to 2.1.210
Bumps [h2](https://github.com/h2database/h2database) from 2.0.206 to 2.1.210.
- [Release notes](https://github.com/h2database/h2database/releases)
- [Commits](https://github.com/h2database/h2database/compare/version-2.0.206...version-2.1.210)

---
updated-dependencies:
- dependency-name: com.h2database:h2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-22 11:49:07 +00:00
dependabot[bot]
57ff8e9d22 Bump postgresql from 42.3.2 to 42.3.3
Bumps [postgresql](https://github.com/pgjdbc/pgjdbc) from 42.3.2 to 42.3.3.
- [Release notes](https://github.com/pgjdbc/pgjdbc/releases)
- [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.3.2...REL42.3.3)

---
updated-dependencies:
- dependency-name: org.postgresql:postgresql
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-22 11:49:07 +00:00
Athou
5c6ea23e0f fix wrong start_url when application is running with a context path (fixes #993) 2022-03-21 18:35:40 +01:00
Jérémie Panzer
5a2aa7cd4b Merge pull request #988 from Athou/dependabot/maven/org.postgresql-postgresql-42.3.2
Bump postgresql from 42.3.1 to 42.3.2
2022-02-02 08:08:53 +01:00
dependabot[bot]
3df53b582a Bump postgresql from 42.3.1 to 42.3.2
Bumps [postgresql](https://github.com/pgjdbc/pgjdbc) from 42.3.1 to 42.3.2.
- [Release notes](https://github.com/pgjdbc/pgjdbc/releases)
- [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.3.1...REL42.3.2)

---
updated-dependencies:
- dependency-name: org.postgresql:postgresql
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-02 07:08:31 +00:00
Jérémie Panzer
eb53fc472c Merge pull request #984 from Athou/dependabot/maven/com.h2database-h2-2.0.206
Bump h2 from 2.0.204 to 2.0.206
2022-01-07 07:39:51 +01:00
dependabot[bot]
c4e9178efb Bump h2 from 2.0.204 to 2.0.206
Bumps [h2](https://github.com/h2database/h2database) from 2.0.204 to 2.0.206.
- [Release notes](https://github.com/h2database/h2database/releases)
- [Commits](https://github.com/h2database/h2database/compare/version-2.0.204...version-2.0.206)

---
updated-dependencies:
- dependency-name: com.h2database:h2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-07 06:36:30 +00:00
Athou
822f41bc40 don't mark feature requests as stale 2022-01-03 07:57:51 +01:00
Athou
1558c0a62f use github actions 2022-01-02 22:16:07 +01:00
Athou
3977bb2a0b remove openshift support, nobody's using it 2022-01-02 22:14:27 +01:00
Athou
26df3a1d1d fix test 2022-01-02 22:12:33 +01:00
Athou
a77a860e0c don't reuse a content if other fields are different (#800) 2022-01-02 21:50:45 +01:00
Athou
78b637c83b fix formatting 2022-01-02 21:33:01 +01:00
Athou
b132178228 remove warnings 2022-01-02 21:31:05 +01:00
Athou
4021389a4d fix formatting 2022-01-02 21:25:15 +01:00
Athou
089be99287 use sslcontext-kickstart to create ssl factory 2022-01-02 21:25:15 +01:00
Athou
b3dd6acfe6 enforce code formatting 2022-01-02 21:24:37 +01:00
Athou
ec3645a1c9 use dependencies instead of copying code 2022-01-02 21:03:33 +01:00
Athou
1c49873da1 fix media extension not loaded in shaded jar by merging our rome.properties with the one from rome-modules (#800) 2022-01-02 18:42:53 +01:00
Athou
8818bd90e0 format scss files 2022-01-02 16:03:09 +01:00
Athou
4fb95799f8 support for media thumbnail and description as a backup for missing content (#800) 2022-01-02 15:58:00 +01:00
Athou
2ee9084b91 upgrade dependencies 2022-01-02 08:38:30 +01:00
Athou
3f3ef27d6b remove google+ and readability sharing support since they're dead 2022-01-02 08:21:32 +01:00
Athou
e01e59b72c restore previous liquibase version to fix issue with "filter" column not created with correct case in FEEDSUBSCRIPTIONS table 2022-01-01 22:09:33 +01:00
Athou
0a97f04257 apply prettier 2022-01-01 22:09:33 +01:00
Athou
0b3888a8ae upgrade feed url from http to https if able 2022-01-01 19:12:31 +01:00
Athou
c6601e5bbf correctly follow http error code 308 redirects (fixes #978) 2022-01-01 18:52:31 +01:00
Athou
5f7c5d25de add stale config 2022-01-01 10:52:11 +01:00
Athou
99d80df76c prevent NPE if icon.getMediaType() is "" 2021-12-23 16:15:26 +01:00
Athou
22beeabb9b close liquibase instance 2021-12-23 15:07:02 +01:00
Athou
8e1aad655a pgsql driver upgrade 2021-12-23 15:07:02 +01:00
Athou
942447c62f dropwizard upgrade 2021-12-23 15:07:02 +01:00
Jérémie Panzer
d8a4da7ec8 Merge pull request #965 from patoniilista/patch-1
Update pt.js
2021-04-04 19:00:52 +02:00
patoniilista
56c50eacfe Update pt.js
Fix typos and untranslated lines
2021-04-04 13:12:20 -03:00
Athou
eec6f7d168 remove sorting alphabetically because of poor performances (title is of type 'text' and cannot be indexed) 2021-01-31 08:37:10 +01:00
Athou
b45219a595 fix metrics 2021-01-30 22:40:31 +01:00
Athou
d7858f17a1 distinct is not needed since there are no feed duplicates and slows the query a lot 2021-01-30 22:07:12 +01:00
Athou
000a99c53e speed up tests 2021-01-30 21:43:21 +01:00
Athou
e592d26f8b can only remove categories once there are no subscriptions in them 2021-01-30 21:30:32 +01:00
Athou
015a60f998 subquery for retrieving feeds to refresh was not connected to main query 2021-01-30 21:28:37 +01:00
Jérémie Panzer
caba43bb5b Merge pull request #942 from pklink/tests
Add tests for PubSubService and FeedUtils.removeTrailingSlash()
2020-10-04 19:17:58 +02:00
pierre
056425bd8a add tests for FeedUtils.removeTrailingSlash() 2020-10-04 00:13:28 +02:00
Pierre Klink
4aca62c042 add tests for PubSubService 2020-10-04 00:12:29 +02:00
Athou
b597c655cd prepare next version 2020-09-02 21:24:21 +02:00
Athou
9b276009e2 README update 2020-09-02 21:23:56 +02:00
Athou
c1dac2e064 2.5.0 release 2020-09-02 21:20:20 +02:00
Jérémie Panzer
f707993188 fix travis build 2020-08-15 08:33:12 +02:00
Athou
ea612d9d53 add missing validCheckSum 2020-05-18 09:42:08 +02:00
Jeremie Panzer
b44e737448 fix liquibase script when running on an empty postgresql database 2020-03-12 13:45:06 +01:00
Jeremie Panzer
bb429afd95 ignore swagger in eclipse 2020-03-12 12:54:20 +01:00
dependabot[bot]
475a8f8a28 Bump bower from 1.4.1 to 1.8.8 (#920)
Bumps [bower](https://github.com/bower/bower) from 1.4.1 to 1.8.8.
- [Release notes](https://github.com/bower/bower/releases)
- [Changelog](https://github.com/bower/bower/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bower/bower/compare/v1.4.1...v1.8.8)

Signed-off-by: dependabot[bot] <support@github.com>
2019-09-30 09:01:55 +02:00
Athou
c7ba5ca894 make swagger aware that dates are serialized as longs 2019-05-03 22:01:18 +02:00
Athou
3023f0a7cc fix build 2019-05-03 18:57:02 +02:00
Athou
ddaefbc952 deduplicate method names across all the api (swagger requires unique api operations) 2019-05-03 18:40:50 +02:00
Jeremie Panzer
0b3a0fb3ed add missing required 2019-05-02 13:42:49 +02:00
Athou
7f40a430fd hide securitycheck user from swagger documentation 2019-05-01 23:33:55 +02:00
Athou
05f5d3b25c add missing "required" flags 2019-05-01 20:31:48 +02:00
Athou
c3ca0b18b3 value field of annotation is actually the name of the class 2019-05-01 19:57:52 +02:00
Athou
696e0b1fa7 maven config for swagger plugin changed 2019-05-01 19:56:48 +02:00
Athou
201f7dbd3e restore cookieMaxAge behavior 2019-04-23 01:14:26 +02:00
Athou
0bfd3e906c stop hibernate HHH90000015 spam 2019-04-22 20:55:39 +02:00
Jérémie Panzer
71ac2bfc45 support for Java9+ (#906)
* initial java9+ support

* restore session management, updated for jetty 9.4

* Session actually implements EntityManager

* reusable method for setting the timeout
2019-04-22 20:30:06 +02:00
Athou
5370db7c5e rename for clarity 2019-03-17 07:05:29 +01:00
Athou
bcc30e40ba Merge branch 'ildar-shaimordanov-master' 2019-03-17 06:46:51 +01:00
Athou
2f70f654f7 extensible mechanism for feed url building 2019-03-17 06:44:09 +01:00
ildar-shaimordanov
b64115dcbd improve youtube feed URL getter 2019-03-12 05:52:00 +04:00
ildar-shaimordanov
c9c71d8582 workaround for youtube channels 2019-03-12 02:13:41 +04:00
Jérémie Panzer
689bc19296 Merge pull request #896 from nelsonblaha/patch-1
English correction for configuration comment
2019-02-10 20:33:12 +01:00
Ben Nelson
27498ab649 English correction for configuration comment 2019-02-10 11:35:46 -06:00
Athou
678a11f998 blur event seems to trigger twice for some reason, make sure we don't fetch the feed twice (#825) 2018-07-31 15:51:48 +02:00
Athou
e9ef98716f configurable user agent string (#825) 2018-07-31 15:21:45 +02:00
Athou
b3ce43eaf7 faster replace for large feeds (#881) 2018-07-11 17:13:38 +02:00
Jérémie Panzer
72083b7e87 Merge pull request #880 from Athou/snyk-fix-0oenl9
[Snyk] Fix for 6 vulnerable dependencies
2018-06-23 13:49:14 +02:00
snyk-bot
0cc94c2033 fix: pom.xml to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JAVA-COMH2DATABASE-31685
- https://snyk.io/vuln/SNYK-JAVA-MYSQL-31399
- https://snyk.io/vuln/SNYK-JAVA-MYSQL-31449
- https://snyk.io/vuln/SNYK-JAVA-MYSQL-31580
- https://snyk.io/vuln/SNYK-JAVA-ORGAPACHEHTTPCOMPONENTS-31517
- https://snyk.io/vuln/SNYK-JAVA-ORGJSOUP-31218
2018-06-14 05:55:43 +00:00
Jérémie Panzer
1d6296b400 Merge pull request #870 from asny23/update-japanese-translation
improve japanese translation
2018-04-12 12:18:50 +02:00
Unknown
7ad5da2a9e translate and improve japanese in ja.js 2018-04-11 23:27:56 +09:00
Athou
a7665a9994 add current year to filtering context 2018-02-25 13:38:37 +01:00
Jérémie Panzer
a4cd3f26e8 Update README.md 2018-02-22 18:21:48 +01:00
Athou
fcdb33b64b utility for testing feeds 2018-02-06 15:17:37 +01:00
Athou
7fd6119bcf add author to rss generated feeds (#858) 2017-12-22 18:50:32 +01:00
Jérémie Panzer
b4d4b2473c Merge pull request #854 from Busimus/patch-7
Updated Russian translation
2017-11-08 15:34:32 +01:00
Alexander Bus
91f715c3c3 Updated Russian translation 2017-10-28 01:16:57 +07:00
Athou
ea5fccfe5f fix build 2017-10-12 12:10:04 +02:00
Athou
86835eec73 request may not be a HttpUriRequest when using a proxy (#850) 2017-10-12 10:21:11 +02:00
Jérémie Panzer
2bccee2333 Merge pull request #849 from ema-pe/update-italian-translation
Update italian translation
2017-09-27 15:00:56 +02:00
Emanuele Petriglia
2d01b0d714 Update italian translation 2017-09-27 14:09:37 +02:00
Jérémie Panzer
44bf37b05a Update bower.json
fix alignment
2017-08-18 16:10:51 +02:00
Jérémie Panzer
cf617f0a64 Merge pull request #847 from sometoby/missing-shortcut-help
Add missing shortcut help for 'r'
2017-08-18 14:27:13 +02:00
Jérémie Panzer
eeeaffd883 Merge pull request #846 from sometoby/tinycon-unread-badge
Use tinycon to display unread article count
2017-08-18 14:25:07 +02:00
Tobias Umbach
d178302d34 Add comment so shortcut code is easier to find 2017-08-18 08:40:05 +02:00
Tobias Umbach
83a5364903 Add missing shortcut help for 'r', refresh 2017-08-18 08:39:49 +02:00
Tobias Umbach
aef76db664 Update CHANGELOG 2017-08-18 08:21:36 +02:00
Tobias Umbach
c3b3240191 Use tinycon to display unread article count 2017-08-14 11:15:43 +02:00
Athou
f381974955 prepare for next version 2017-08-01 13:55:11 +02:00
Athou
bd16dd98c4 update readme 2017-08-01 13:55:04 +02:00
261 changed files with 9584 additions and 9123 deletions

18
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,18 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
- enhancement
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

20
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
java: ["8", "11", "17"]
steps:
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v3
with:
java-version: ${{ matrix.java }}
distribution: "temurin"
- name: Build with Maven
run: mvn --batch-mode --update-snapshots verify

7
.gitignore vendored
View File

@@ -1,8 +1,12 @@
# config gile
# config file
config.yml
# build directory
target
target-ide
# database files
database
# log files
log
@@ -22,6 +26,7 @@ src/main/app/lib
.classpath
.settings
.factorypath
.checkstyle
# IntelliJ Idea files
.idea

View File

@@ -1,3 +0,0 @@
For information about .openshift directory, consult the documentation:
http://openshift.github.io/documentation/oo_user_guide.html#the-openshift-directory

View File

@@ -1,3 +0,0 @@
For information about action hooks, consult the documentation:
http://openshift.github.io/documentation/oo_user_guide.html#action-hooks

View File

@@ -1,36 +0,0 @@
#!/bin/bash
if [ ! -d $OPENSHIFT_DATA_DIR/jdk1.8.0_20 ]
then
cd $OPENSHIFT_DATA_DIR
wget http://www.java.net/download/jdk8u20/archive/b17/binaries/jdk-8u20-ea-bin-b17-linux-x64-04_jun_2014.tar.gz
tar xvf *.tar.gz
rm -f *.tar.gz
fi
if [ ! -d $OPENSHIFT_DATA_DIR/apache-maven-3.2.3 ]
then
cd $OPENSHIFT_DATA_DIR
wget http://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar xvf *.tar.gz
rm -f *.tar.gz
fi
export M2=$OPENSHIFT_DATA_DIR/apache-maven-3.2.3/bin
export JAVA_HOME=$OPENSHIFT_DATA_DIR/jdk1.8.0_20
export PATH=$JAVA_HOME/bin:$M2:$PATH
cd $OPENSHIFT_REPO_DIR
rm -rf $OPENSHIFT_REPO_DIR/node
rm -rf $OPENSHIFT_REPO_DIR/node_modules
rm -rf $OPENSHIFT_TMP_DIR/npm
rm -rf $OPENSHIFT_TMP_DIR/npmrc
rm -rf $OPENSHIFT_TMP_DIR/m2
rm -rf $OPENSHIFT_TMP_DIR/local
export NPM_CONFIG_PREFIX="$OPENSHIFT_TMP_DIR/npm"
export NPM_CONFIG_USERCONFIG="$OPENSHIFT_TMP_DIR/npmrc"
export NPM_CONFIG_CACHE="$OPENSHIFT_TMP_DIR/npm/cache"
export MAVEN_OPTS="-Dmaven.repo.local=$OPENSHIFT_TMP_DIR/m2"
export HOME="$OPENSHIFT_TMP_DIR/local"
export NPM_CONFIG_ARCH="x64"
mvn clean package -DskipTests -Dos.arch=x64 -s .openshift/settings.xml

View File

@@ -1,9 +0,0 @@
#!/bin/bash
cd $OPENSHIFT_REPO_DIR
sed -i 's/@OPENSHIFT_DIY_IP@/'"$OPENSHIFT_DIY_IP"'/g' .openshift/config.mysql.yml
sed -i 's/@OPENSHIFT_DIY_PORT@/'"$OPENSHIFT_DIY_PORT"'/g' .openshift/config.mysql.yml
sed -i 's/@OPENSHIFT_APP_DNS@/'"$OPENSHIFT_APP_DNS"'/g' .openshift/config.mysql.yml
sed -i 's/@OPENSHIFT_APP_NAME@/'"$OPENSHIFT_APP_NAME"'/g' .openshift/config.mysql.yml
sed -i 's/@OPENSHIFT_MYSQL_DB_HOST@/'"$OPENSHIFT_MYSQL_DB_HOST"'/g' .openshift/config.mysql.yml
sed -i 's/@OPENSHIFT_MYSQL_DB_USERNAME@/'"$OPENSHIFT_MYSQL_DB_USERNAME"'/g' .openshift/config.mysql.yml
sed -i 's/@OPENSHIFT_MYSQL_DB_PASSWORD@/'"$OPENSHIFT_MYSQL_DB_PASSWORD"'/g' .openshift/config.mysql.yml

View File

@@ -1,4 +0,0 @@
#!/bin/bash
cd $OPENSHIFT_REPO_DIR
export JAVA_HOME=$OPENSHIFT_DATA_DIR/jdk1.8.0_20
nohup $JAVA_HOME/bin/java -jar target/commafeed.jar server .openshift/config.mysql.yml > ${OPENSHIFT_DIY_LOG_DIR}/commafeed.log 2>&1 &

View File

@@ -1,8 +0,0 @@
#!/bin/bash
source $OPENSHIFT_CARTRIDGE_SDK_BASH
if [ -z "$(ps -ef | grep commafeed.jar | grep -v grep)" ]
then
client_result "Application is already stopped"
else
kill `ps -ef | grep commafeed.jar | grep -v grep | awk '{ print $2 }'` > /dev/null 2>&1
fi

View File

View File

View File

View File

View File

@@ -1,16 +0,0 @@
Run scripts or jobs on a weekly basis
=====================================
Any scripts or jobs added to this directory will be run on a scheduled basis
(weekly) using run-parts.
run-parts ignores any files that are hidden or dotfiles (.*) or backup
files (*~ or *,) or named *.{rpmsave,rpmorig,rpmnew,swp,cfsaved} and handles
the files named jobs.deny and jobs.allow specially.
In this specific example, the chronograph script is the only script or job file
executed on a weekly basis (due to white-listing it in jobs.allow). And the
README and chrono.dat file are ignored either as a result of being black-listed
in jobs.deny or because they are NOT white-listed in the jobs.allow file.
For more details, please see ../README.cron file.

View File

@@ -1 +0,0 @@
Time And Relative D...n In Execution (Open)Shift!

View File

@@ -1,3 +0,0 @@
#!/bin/bash
echo "`date`: `cat $(dirname \"$0\")/chrono.dat`"

View File

@@ -1,12 +0,0 @@
#
# Script or job files listed in here (one entry per line) will be
# executed on a weekly-basis.
#
# Example: The chronograph script will be executed weekly but the README
# and chrono.dat files in this directory will be ignored.
#
# The README file is actually ignored due to the entry in the
# jobs.deny which is checked before jobs.allow (this file).
#
chronograph

View File

@@ -1,7 +0,0 @@
#
# Any script or job files listed in here (one entry per line) will NOT be
# executed (read as ignored by run-parts).
#
README

View File

@@ -1,3 +0,0 @@
For information about markers, consult the documentation:
http://openshift.github.io/documentation/oo_user_guide.html#markers

View File

@@ -1,41 +0,0 @@
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>central</mirrorOf>
<url>http://mirror1.ops.rhcloud.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>

7
.prettierrc Normal file
View File

@@ -0,0 +1,7 @@
{
"printWidth": 140,
"semi": false,
"tabWidth": 4,
"arrowParens": "avoid",
"endOfLine": "auto"
}

View File

@@ -1,3 +0,0 @@
language: java
jdk:
- oraclejdk8

View File

@@ -1,3 +1,24 @@
v 2.6.0
- add support for media content as a backup for missing content (useful for youtube feeds)
- correctly follow http error code 308 redirects
- fixed a bug that prevented users from deleting their account
- fixed a bug that made commafeed store entry contents multiple times
- fixed a bug that prevented the app to be used as an installed app on mobile devices if the context path of commafeed was not "/"
- fixed a bug that prevented entries from being "marked as read older than xxx" for a feed that was just added
- removed support for google+ and readability as those services no longer exist
- removed support for deploying on openshift
- removed alphabetical sorting of entries because of really poor performance (title cannot be indexed)
- improve performance for instances with the heavy load setting enabled by preventing CommaFeed from fetching feeds from users that did not log in for a long time
- various dependencies upgrades (notably dropwizard from 1.3 to 2.1)
- add support for mariadb
- add support for java17+ runtime
- various security improvements
v 2.5.0
- unread count is now displayed in a favicon badge when supported
- the user agent string for the bot fetching feeds is now configurable
- feed parsing performance improvements
- support for java9+ runtime
- can now properly start from an empty postgresql database
v 2.4.0
- users were not able to change password or delete account
- fix api key generation
@@ -51,4 +72,4 @@ v2.0.0
- The backend has been completely rewritten using Dropwizard instead of TomEE, resulting in a lot less memory consumption and better overall performances.
See the README on how to build CommaFeed from now on.
- CommaFeed should no longer fetch the same feed multiple times in a row
- Users can use their username or email to log in
- Users can use their username or email to log in

View File

@@ -7,7 +7,6 @@ CommaFeed is now considered feature-complete and is in maintenance mode.
## Related open-source projects
Android apps: [News+ extension](https://github.com/Athou/commafeed-newsplus)
Browser extensions: [Chrome](https://github.com/Athou/commafeed-chrome) - [Firefox](https://github.com/Athou/commafeed-firefox) - [Opera](https://github.com/Athou/commafeed-opera) - [Safari](https://github.com/Athou/commafeed-safari)
@@ -17,10 +16,10 @@ Browser extensions: [Chrome](https://github.com/Athou/commafeed-chrome) - [Firef
### The very short version (download precompiled package)
mkdir commafeed && cd commafeed
wget https://github.com/Athou/commafeed/releases/download/2.3.0/commafeed.jar
wget https://raw.githubusercontent.com/Athou/commafeed/2.3.0/config.yml.example -O config.yml
wget https://github.com/Athou/commafeed/releases/download/2.6.0/commafeed.jar
wget https://raw.githubusercontent.com/Athou/commafeed/2.6.0/config.yml.example -O config.yml
vi config.yml
java -Djava.net.preferIPv4Stack=true -jar commafeed.jar server config.yml
java -Djava.net.preferIPv4Stack=true -jar commafeed.jar server config.yml
### The short version (build from sources)
@@ -29,58 +28,43 @@ Browser extensions: [Chrome](https://github.com/Athou/commafeed-chrome) - [Firef
./mvnw clean package
cp config.yml.example config.yml
vi config.yml
java -Djava.net.preferIPv4Stack=true -jar target/commafeed.jar server config.yml
java -Djava.net.preferIPv4Stack=true -jar target/commafeed.jar server config.yml
### The long version (same as the short version, but more detailed)
CommaFeed 2.0 has been rewritten to use Dropwizard and gulp instead of using tomee and wro4j. The latest version of the 1.x branch is available [here](https://github.com/Athou/commafeed/tree/1.x).
For storage, you can either use an embedded H2 database (use it only to test CommaFeed) or an external MySQL, PostgreSQL or SQLServer database.
You also need the Java 1.8+ JDK in order to build the application.
For storage, you can either use an embedded file-based H2 database or an external MySQL, PostgreSQL or SQLServer database.
You also need the Java 1.8+ JDK in order to build the application.
To install the required packages to build CommaFeed on Ubuntu, issue the following commands
# if openjdk-8-jdk is not available on your ubuntu version (14.04 LTS), add the following repo first
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
# if openjdk-8-jdk is not available on your ubuntu version (14.04 LTS), add the following repo first
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install g++ build-essential openjdk-8-jdk
# Make sure java8 is the selected java version
sudo update-alternatives --config java
sudo update-alternatives --config javac
Clone this repository. If you don't have git you can download the sources as a zip file from [here](https://github.com/Athou/commafeed/archive/master.zip)
git clone https://github.com/Athou/commafeed.git
cd commafeed
Now build the application
./mvnw clean package
Copy `config.yml.example` to `config.yml` then edit the file to your liking.
Issue the following command to run the app, the server will listen by default on `http://localhost:8082`. The default user is `admin` and the default password is `admin`.
java -Djava.net.preferIPv4Stack=true -jar target/commafeed.jar server config.yml
java -Djava.net.preferIPv4Stack=true -jar target/commafeed.jar server config.yml
You can use a proxy http server such as nginx or apache.
## Deployment on OpenShift
[OpenShift](https://openshift.redhat.com) is Red Hat's Platform-as-a-Service (PaaS) that allows developers to quickly develop, host, and scale applications in a cloud environment. CommaFeed runs perfectly on OpenShift and can even be used in the free tier. Follow the [Getting Started](https://developers.openshift.com/en/getting-started-overview.html) guide and after you sign up and install the Command Line Tools (RHC), do:
rhc create-app commafeed diy-0.1 mysql-5.5
cd commafeed
git remote add upstream -m master https://github.com/Athou/commafeed.git
git pull -s recursive -X theirs upstream master
git push
# To upgrade an existing openshift installation
git pull upstream master
git push
## Translate CommaFeed into your language
Files for internationalization are located [here](https://github.com/Athou/commafeed/tree/master/src/main/app/i18n).
@@ -91,12 +75,11 @@ The language has to be referenced in the `src/main/app/js/i18n.js` file to be pi
## Themes
To create a theme, create a new file `src/main/app/sass/themes/_<theme>.scss`. Your styles should be wrapped in a `#theme-<theme>` element and use the [SCSS format](http://sass-lang.com/) which is a superset of CSS.
To create a theme, create a new file `src/main/app/sass/themes/_<theme>.scss`. Your styles should be wrapped in a `#theme-<theme>` element and use the [SCSS format](http://sass-lang.com/) which is a superset of CSS.
Don't forget to reference your theme in `src/main/app/sass/app.scss` and in `src/main/app/js/controllers.js` (look for `$scope.themes`).
See [_test.scss](https://github.com/Athou/commafeed/blob/master/src/main/app/sass/themes/_test.scss) for an example.
See [\_test.scss](https://github.com/Athou/commafeed/blob/master/src/main/app/sass/themes/_test.scss) for an example.
## Local development
@@ -105,13 +88,13 @@ Steps to configuring a development environment for CommaFeed may include, but ma
1. `git clone https://github.com/Athou/CommaFeed` into some folder to get the project files.
2. Install Eclipse Luna (or latest) from http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/lunasr1 or your repo if available.
3. In Eclipse, Window → Preferences → Maven → Annotation Processing. Check "Automatically configure JDT APT"
* You may have to install the m2e-apt connector to have "Annotation Processing" as an option. Do so from Window → Preferences → Maven → Discovery → Open Catalog → type "m2e-apt" in the search box
* If you have installed Eclipse EE instead of Luna, you may have trouble installing m2e-apt
- You may have to install the m2e-apt connector to have "Annotation Processing" as an option. Do so from Window → Preferences → Maven → Discovery → Open Catalog → type "m2e-apt" in the search box
- If you have installed Eclipse EE instead of Luna, you may have trouble installing m2e-apt
4. Install Lombok into Eclipse from http://projectlombok.org/download.html
* You may have to run `java -jar lombok.jar` as an administrator if your eclipse installation is not in your home folder
- You may have to run `java -jar lombok.jar` as an administrator if your eclipse installation is not in your home folder
5. In Eclipse, File → Import → Maven → Existing Maven Projects. Navigate to where you cloned the CommaFeed files into, and select that as the root directory. Click Finish.
* You may notice some errors along the lines of "Plugin execution not covered by lifecycle configuration". These are inconsequential.
6. Find the file "CommaFeedApplication.java" under the navigation pane.
- You may notice some errors along the lines of "Plugin execution not covered by lifecycle configuration". These are inconsequential.
6. Find the file "CommaFeedApplication.java" under the navigation pane.
7. Right click it to bring up the context menu → Debug as... → Debug Configurations
8. Type `server config.dev.yml` under "Program arguments" in the "Arguments" tab for the Java Application setting "CommaFeedApplication"
9. Apply and hit "Debug"
@@ -130,7 +113,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
you may not use this work except in compliance with the License.
You may obtain a copy of the License in the LICENSE file, or at:
http://www.apache.org/licenses/LICENSE-2.0
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,

6
SECURITY.md Normal file
View File

@@ -0,0 +1,6 @@
# Security Policy
## Reporting a Vulnerability
If you found a vulnerability that you deem too sensitive to disclose publicly in a Github issue, please send an email at jeremiepanzer at gmail dot com.
Thanks !

View File

@@ -1,37 +1,37 @@
{
"name": "commafeed",
"version": "2.0.0",
"dependencies": {
"jquery": "2.1.3",
"jquery-ui": "1.10.3",
"jquery-mousewheel": "3.1.12",
"lodash": "3.4.0",
"bootstrap": "3.3.2",
"font-awesome": "3.2.1",
"angular": "1.3.14",
"angular-resource": "1.3.14",
"angular-route": "1.3.14",
"angular-sanitize": "1.3.14",
"angular-touch": "1.3.14",
"angular-animate": "1.3.14",
"angular-ui-router": "0.2.13",
"angular-ui-utils": "0.1.0",
"angular-ui-select2": "0.0.5",
"angular-bootstrap": "0.2.0",
"angular-loading-bar": "0.6.0",
"angular-translate": "2.6.1",
"angular-translate-loader-static-files": "2.6.1",
"ngInfiniteScroll": "1.0.0",
"ng-grid": "2.0.6",
"mousetrap": "1.4.6",
"momentjs": "2.9.0",
"devicejs": "0.2.4",
"readabilicons": "arc90/readability-readabilicons#34c55561c5b8ec6e90714b50237c06b13cb9d59c",
"zocial-less": "1.0.0",
"swagger-ui": "2.1.0"
},
"resolutions": {
"angular": "1.3.14",
"angular-translate": "2.6.1"
}
"name": "commafeed",
"version": "2.0.0",
"dependencies": {
"jquery": "2.1.3",
"jquery-ui": "1.10.3",
"jquery-mousewheel": "3.1.12",
"lodash": "3.4.0",
"bootstrap": "3.3.2",
"font-awesome": "3.2.1",
"angular": "1.3.14",
"angular-resource": "1.3.14",
"angular-route": "1.3.14",
"angular-sanitize": "1.3.14",
"angular-touch": "1.3.14",
"angular-animate": "1.3.14",
"angular-ui-router": "0.2.13",
"angular-ui-utils": "0.1.0",
"angular-ui-select2": "0.0.5",
"angular-bootstrap": "0.2.0",
"angular-loading-bar": "0.6.0",
"angular-translate": "2.6.1",
"angular-translate-loader-static-files": "2.6.1",
"ngInfiniteScroll": "1.0.0",
"ng-grid": "2.0.6",
"mousetrap": "1.4.6",
"momentjs": "2.9.0",
"devicejs": "0.2.4",
"zocial-less": "1.0.0",
"swagger-ui": "2.1.0",
"tinycon": "0.6.5"
},
"resolutions": {
"angular": "1.3.14",
"angular-translate": "2.6.1"
}
}

View File

@@ -67,6 +67,9 @@ app:
# announcement string displayed on the main page
announcement:
# user-agent string that will be used by the http client, leave empty for the default one
userAgent:
# Database connection
# -------------------
# for MySQL

View File

@@ -4,7 +4,7 @@ app:
# url used to access commafeed
publicUrl: http://localhost:8082/
# wether to allow user registrations
# whether to allow user registrations
allowRegistrations: false
# create a demo account the first time the app starts
@@ -68,6 +68,9 @@ app:
# announcement string displayed on the main page
announcement:
# user-agent string that will be used by the http client, leave empty for the default one
userAgent:
# Database connection
# -------------------
# for MySQL
@@ -84,7 +87,7 @@ app:
database:
driverClass: org.h2.Driver
url: jdbc:h2:/home/commafeed/db;mv_store=false
url: jdbc:h2:/home/commafeed/db
user: sa
password: sa
properties:
@@ -108,6 +111,7 @@ logging:
com.commafeed: INFO
liquibase: INFO
io.dropwizard.server.ServerFactory: INFO
org.hibernate.orm.deprecation: "OFF"
appenders:
- type: console
- type: file
@@ -128,4 +132,4 @@ redis:
timeout: 2000
database: 0
maxTotal: 500

View File

@@ -1,49 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="12">
<profile kind="CodeFormatterProfile" name="Eclipse [built-in] 140 chars" version="12">
<profiles version="18">
<profile kind="CodeFormatterProfile" name="CommaFeed" version="18">
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="48"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="48"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
@@ -52,10 +62,14 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
@@ -64,9 +78,12 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="140"/>
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
@@ -75,18 +92,28 @@
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
@@ -94,80 +121,99 @@
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.compiler.source" value="1.8"/>
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
@@ -183,8 +229,9 @@
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="48"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.8"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
@@ -194,8 +241,11 @@
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
@@ -216,18 +266,21 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
@@ -235,48 +288,62 @@
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.8"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
@@ -284,9 +351,12 @@
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="140"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>

View File

@@ -1,267 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="11">
<profile kind="CodeFormatterProfile" name="Eclipse [built-in] 140 chars" version="11">
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_case" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_compact_if" value="52"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.format_header" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.format_block_comments" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_object_initializer" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_between_type_declarations" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_assignment" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.tabulation.size" value="4"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_default" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.align_type_members_on_columns" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.continuation_indentation_for_objlit_initializer" value="1"/>
<setting id="org.eclipse.wst.jsdt.core.compiler.compliance" value="1.5"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_closing_brace_in_objlit_initializer" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.format_source_code" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.wrap_before_binary_operator" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_after_package" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_comma_in_objlit_initializer" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.format_javadoc_comments" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_objlit_initializer" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.compiler.source" value="1.5"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_conditional_expression" value="48"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.indent_parameter_description" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_after_imports" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="64"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.indent_root_tags" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_before_package" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_before_member_type" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_enum_constants" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_before_imports" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_binary_expression" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.lineSplit" value="140"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_before_method" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_superclass_in_type_declaration" value="64"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.compiler.codegen.targetPlatform" value="1.5"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.keep_empty_objlit_initializer_on_one_line" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.format_line_comments" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="64"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.compiler.problem.assertIdentifier" value="error"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_colon_in_object_initializer" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.line_length" value="80"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_block" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_before_new_chunk" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.tabulation.char" value="tab"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_between_import_groups" value="1"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_before_field" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_after_opening_brace_in_objlit_initializer" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.wst.jsdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
</profile>
</profiles>

119
dev/checkstyle.xml Normal file
View File

@@ -0,0 +1,119 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<property name="charset" value="UTF-8" />
<property name="fileExtensions" value="java" />
<module name="TreeWalker">
<property name="tabWidth" value="4" />
<!-- Checks for Naming Conventions. -->
<!-- See http://checkstyle.sf.net/config_naming.html -->
<module name="CatchParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$" />
</module>
<module name="ConstantName">
<property name="format" value="^log|[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$" />
</module>
<module name="ClassTypeParameterName" />
<module name="InterfaceTypeParameterName" />
<module name="LambdaParameterName" />
<module name="LocalFinalVariableName" />
<module name="LocalVariableName" />
<module name="MemberName" />
<module name="MethodName" />
<module name="MethodTypeParameterName" />
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" />
</module>
<module name="ParameterName" />
<module name="StaticVariableName" />
<module name="TypeName" />
<!-- Checks for imports -->
<!-- See http://checkstyle.sf.net/config_import.html -->
<module name="AvoidStarImport" />
<module name="AvoidStaticImport" />
<module name="IllegalImport" />
<module name="ImportOrder">
<property name="groups" value="/^java\./,javax,org,com" />
<property name="ordered" value="true" />
<property name="separated" value="true" />
</module>
<module name="RedundantImport" />
<module name="UnusedImports" />
<!-- Modifier Checks -->
<!-- See http://checkstyle.sf.net/config_modifier.html -->
<module name="ModifierOrder" />
<module name="RedundantModifier">
<property name="tokens" value="METHOD_DEF, VARIABLE_DEF, ANNOTATION_FIELD_DEF, INTERFACE_DEF, CLASS_DEF, ENUM_DEF, RESOURCE" />
</module>
<!-- Checks for blocks. You know, those {}'s -->
<!-- See http://checkstyle.sf.net/config_blocks.html -->
<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="ignore|ignored" />
<message key="catch.block.empty"
value="Empty catch block. You can use the name 'ignore' or 'ignored' for the exception variable if you really want an empty catch block, but you should strongly consider at the very least logging something." />
</module>
<module name="LeftCurly" />
<module name="NeedBraces" />
<module name="RightCurly" />
<!-- Checks for common coding problems -->
<!-- See http://checkstyle.sf.net/config_coding.html -->
<module name="DeclarationOrder" />
<module name="DefaultComesLast" />
<module name="EmptyStatement" />
<module name="EqualsHashCode" />
<module name="ExplicitInitialization" />
<module name="FallThrough" />
<module name="IllegalInstantiation">
<property name="classes"
value="java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short" />
</module>
<module name="IllegalType" />
<module name="ModifiedControlVariable">
<property name="skipEnhancedForLoopVariable" value="true" />
</module>
<module name="MissingSwitchDefault" />
<module name="MultipleVariableDeclarations" />
<module name="NoFinalizer" />
<module name="OneStatementPerLine" />
<module name="OverloadMethodsDeclarationOrder" />
<module name="PackageDeclaration" />
<module name="SimplifyBooleanExpression" />
<module name="SimplifyBooleanReturn" />
<module name="StringLiteralEquality" />
<module name="UnnecessaryParentheses" />
<!-- Checks for class design -->
<!-- See http://checkstyle.sf.net/config_design.html -->
<module name="InnerTypeLast" />
<module name="OneTopLevelClass" />
<!-- Miscellaneous other checks. -->
<!-- See http://checkstyle.sf.net/config_misc.html -->
<module name="ArrayTypeStyle" />
<module name="OuterTypeFilename" />
<module name="UpperEll" />
<!-- Whitespace checks. -->
<!-- See http://checkstyle.sourceforge.net/config_whitespace.html -->
<module name="MethodParamPad" />
<module name="NoLineWrap" />
<module name="NoWhitespaceBefore" />
<module name="ParenPad" />
<module name="RegexpSinglelineJava">
<property name="format" value="^\t* +\t*\S" />
<property name="message" value="Line has leading space characters; indentation should be performed with tabs only." />
<property name="ignoreComments" value="true" />
</module>
<module name="WhitespaceAround" />
</module>
</module>

19
docker-compose.dev.yml Normal file
View File

@@ -0,0 +1,19 @@
version: "3.1"
services:
mysql:
image: mariadb
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=commafeed
ports:
- 3306:3306
postgresql:
image: postgres
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
POSTGRES_DB: commafeed
ports:
- 5432:5432

View File

@@ -4,7 +4,7 @@
"main": "main.js",
"private": true,
"devDependencies": {
"bower": "1.4.1",
"bower": "1.8.8",
"gulp": "3.8.11",
"gulp-rev": "4.0.0",
"gulp-rev-replace": "0.4.1",

344
pom.xml
View File

@@ -4,24 +4,29 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.commafeed</groupId>
<artifactId>commafeed</artifactId>
<version>2.4.0</version>
<packaging>jar</packaging>
<version>2.6.0</version>
<name>CommaFeed</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<dropwizard.version>0.9.1</dropwizard.version>
<guice.version>4.0</guice.version>
<querydsl.version>4.0.2</querydsl.version>
<rome.version>1.5.0</rome.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<guice.version>5.1.0</guice.version>
<querydsl.version>4.2.1</querydsl.version>
<rome.version>1.18.0</rome.version>
</properties>
<scm>
<connection>scm:git:https://github.com/Athou/commafeed.git</connection>
<developerConnection>scm:git:https://github.com/Athou/commafeed.git</developerConnection>
<url>https://github.com/Athou/commafeed</url>
</scm>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-dependencies</artifactId>
<version>2.1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>commafeed</finalName>
@@ -32,47 +37,29 @@
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<versionRange>[0.0.22,)</versionRange>
<goals>
<goal>npm</goal>
<goal>gulp</goal>
<goal>bower</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>false</runOnIncremental>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
<version>3.10.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.2</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
@@ -94,7 +81,14 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<version>3.2.4</version>
<dependencies>
<dependency>
<groupId>org.kordamp.shade</groupId>
<artifactId>maven-shade-ext-transformers</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<filters>
@@ -120,6 +114,12 @@
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.commafeed.CommaFeedApplication</mainClass>
</transformer>
<transformer implementation="org.kordamp.shade.resources.PropertiesFileTransformer">
<paths>
<path>rome.properties</path>
</paths>
<mergeStrategy>append</mergeStrategy>
</transformer>
</transformers>
</configuration>
</execution>
@@ -128,11 +128,16 @@
<plugin>
<groupId>com.github.kongchen</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>3.1.1</version>
<version>3.1.7</version>
<?m2e ignore?>
<configuration>
<apiSources>
<apiSource>
<locations>com.commafeed.frontend.resource;com.commafeed.frontend.model;com.commafeed.frontend.model.request</locations>
<locations>
<location>com.commafeed.frontend.resource</location>
<location>com.commafeed.frontend.model</location>
<location>com.commafeed.frontend.model.request</location>
</locations>
<swaggerDirectory>target/swagger</swaggerDirectory>
<basePath>/rest</basePath>
<info>
@@ -157,7 +162,8 @@
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>0.0.25</version>
<version>1.6</version>
<?m2e ignore?>
<executions>
<execution>
<id>install node and npm</id>
@@ -166,7 +172,7 @@
</goals>
<phase>compile</phase>
<configuration>
<nodeVersion>v0.10.39</nodeVersion>
<nodeVersion>v6.11.4</nodeVersion>
<npmVersion>3.10.6</npmVersion>
</configuration>
</execution>
@@ -202,7 +208,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<version>3.2.2</version>
<configuration>
<archive>
<manifest>
@@ -211,20 +217,87 @@
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
<sourceDirectories>
<sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
</sourceDirectories>
<testSourceDirectories>
<testSourceDirectory>${project.build.testSourceDirectory}</testSourceDirectory>
</testSourceDirectories>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<configLocation>dev/checkstyle.xml</configLocation>
</configuration>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>1.27.0</version>
<?m2e ignore?>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<encoding>UTF-8</encoding>
<lineEndings>WINDOWS</lineEndings>
<java>
<eclipse>
<file>${project.basedir}/dev/EclipseCodeFormatter.xml</file>
</eclipse>
</java>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>only-eclipse</id>
<activation>
<property>
<name>m2e.version</name>
</property>
</activation>
<build>
<directory>target-ide</directory>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.4</version>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
@@ -232,63 +305,55 @@
<artifactId>guice</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-multibindings</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
<version>${dropwizard.version}</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>aopalliance-repackaged</artifactId>
</exclusion>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-hibernate</artifactId>
<version>${dropwizard.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-migrations</artifactId>
<version>${dropwizard.version}</version>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-assets</artifactId>
<version>${dropwizard.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-forms</artifactId>
<version>${dropwizard.version}</version>
<exclusions>
<exclusion>
<groupId>org.glassfish.hk2.external</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-graphite</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-graphite</artifactId>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-json</artifactId>
</dependency>
<dependency>
<groupId>io.dropwizard.modules</groupId>
<artifactId>dropwizard-web</artifactId>
<version>1.5.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-afterburner</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
@@ -300,7 +365,7 @@
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.0</version>
<version>1.5.22</version>
</dependency>
<dependency>
@@ -316,30 +381,24 @@
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
<version>4.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.5</version>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
@@ -352,6 +411,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
@@ -364,43 +428,62 @@
<version>1.5.3</version>
</dependency>
<!-- upgrade jdom to 2.0.5 for performance reasons (https://github.com/hunterhacker/jdom/issues/112) -->
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome</artifactId>
<version>${rome.version}</version>
<exclusions>
<exclusion>
<artifactId>jdom</artifactId>
<groupId>org.jdom</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome-modules</artifactId>
<version>${rome.version}</version>
</dependency>
<dependency>
<groupId>com.rometools</groupId>
<artifactId>rome-opml</artifactId>
<version>${rome.version}</version>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.ahocorasick</groupId>
<artifactId>ahocorasick</artifactId>
<version>0.6.3</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.2</version>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>55.1</version>
<version>70.1</version>
</dependency>
<dependency>
<groupId>net.sourceforge.cssparser</groupId>
<artifactId>cssparser</artifactId>
<version>0.9.16</version>
<version>0.9.29</version>
</dependency>
<dependency>
<groupId>edu.uci.ics</groupId>
<artifactId>crawler4j</artifactId>
<version>3.5</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-servlet</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>io.github.hakky54</groupId>
<artifactId>sslcontext-kickstart</artifactId>
<version>7.2.0</version>
</dependency>
<dependency>
@@ -418,17 +501,16 @@
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.176</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1212</version>
<version>42.4.1</version>
</dependency>
<dependency>
<groupId>net.sourceforge.jtds</groupId>
@@ -437,16 +519,30 @@
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.0.11-beta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mock-server</groupId>
<artifactId>mockserver-junit-jupiter</artifactId>
<version>5.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-testing</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
</project>

View File

@@ -1,86 +1,86 @@
<!DOCTYPE html>
<html>
<head>
<title>Swagger UI</title>
<link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
<link href='css/screen.css' media='print' rel='stylesheet' type='text/css'/>
<script type="text/javascript" src="lib/shred.bundle.js"></script>
<script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
<script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
<script src='lib/jquery.wiggle.min.js' type='text/javascript'></script>
<script src='lib/jquery.ba-bbq.min.js' type='text/javascript'></script>
<script src='lib/handlebars-2.0.0.js' type='text/javascript'></script>
<script src='lib/underscore-min.js' type='text/javascript'></script>
<script src='lib/backbone-min.js' type='text/javascript'></script>
<script src='lib/swagger-client.js' type='text/javascript'></script>
<script src='swagger-ui.js' type='text/javascript'></script>
<script src='lib/highlight.7.3.pack.js' type='text/javascript'></script>
<script src='lib/marked.js' type='text/javascript'></script>
<head>
<title>Swagger UI</title>
<link href="css/typography.css" media="screen" rel="stylesheet" type="text/css" />
<link href="css/reset.css" media="screen" rel="stylesheet" type="text/css" />
<link href="css/screen.css" media="screen" rel="stylesheet" type="text/css" />
<link href="css/reset.css" media="print" rel="stylesheet" type="text/css" />
<link href="css/screen.css" media="print" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="lib/shred.bundle.js"></script>
<script src="lib/jquery-1.8.0.min.js" type="text/javascript"></script>
<script src="lib/jquery.slideto.min.js" type="text/javascript"></script>
<script src="lib/jquery.wiggle.min.js" type="text/javascript"></script>
<script src="lib/jquery.ba-bbq.min.js" type="text/javascript"></script>
<script src="lib/handlebars-2.0.0.js" type="text/javascript"></script>
<script src="lib/underscore-min.js" type="text/javascript"></script>
<script src="lib/backbone-min.js" type="text/javascript"></script>
<script src="lib/swagger-client.js" type="text/javascript"></script>
<script src="swagger-ui.js" type="text/javascript"></script>
<script src="lib/highlight.7.3.pack.js" type="text/javascript"></script>
<script src="lib/marked.js" type="text/javascript"></script>
<!-- enabling this will enable oauth2 implicit scope support -->
<script src='lib/swagger-oauth.js' type='text/javascript'></script>
<script type="text/javascript">
$(function () {
window.swaggerUi = new SwaggerUi({
url: "./swagger.json",
dom_id: "swagger-ui-container",
supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
onComplete: function(swaggerApi, swaggerUi){
if(typeof initOAuth == "function") {
/*
<!-- enabling this will enable oauth2 implicit scope support -->
<script src="lib/swagger-oauth.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
window.swaggerUi = new SwaggerUi({
url: "./swagger.json",
dom_id: "swagger-ui-container",
supportedSubmitMethods: ["get", "post", "put", "delete"],
onComplete: function (swaggerApi, swaggerUi) {
if (typeof initOAuth == "function") {
/*
initOAuth({
clientId: "your-client-id",
realm: "your-realms",
appName: "your-app-name"
});
*/
}
$('pre code').each(function(i, e) {
hljs.highlightBlock(e)
});
},
onFailure: function(data) {
log("Unable to Load SwaggerUI");
},
docExpansion: "none",
sorter : "alpha"
});
}
$("pre code").each(function (i, e) {
hljs.highlightBlock(e)
})
},
onFailure: function (data) {
log("Unable to Load SwaggerUI")
},
docExpansion: "none",
sorter: "alpha",
})
$('#input_apiKey').change(function() {
var key = $('#input_apiKey')[0].value;
log("key: " + key);
if(key && key.trim() != "") {
log("added key " + key);
window.authorizations.add("key", new ApiKeyAuthorization("api_key", key, "query"));
}
})
window.swaggerUi.load();
});
</script>
</head>
$("#input_apiKey").change(function () {
var key = $("#input_apiKey")[0].value
log("key: " + key)
if (key && key.trim() != "") {
log("added key " + key)
window.authorizations.add("key", new ApiKeyAuthorization("api_key", key, "query"))
}
})
window.swaggerUi.load()
})
</script>
</head>
<body class="swagger-section">
<div id='header'>
<div class="swagger-ui-wrap">
<a id="logo" href="http://swagger.wordnik.com">swagger</a>
<form id='api_selector'>
<div class='input icon-btn'>
<img id="show-pet-store-icon" src="images/pet_store_api.png" title="Show Swagger Petstore Example Apis">
</div>
<div class='input icon-btn'>
<img id="show-wordnik-dev-icon" src="images/wordnik_api.png" title="Show Wordnik Developer Apis">
</div>
<div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div>
<div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>
<div class='input'><a id="explore" href="#">Explore</a></div>
</form>
</div>
</div>
<body class="swagger-section">
<div id="header">
<div class="swagger-ui-wrap">
<a id="logo" href="http://swagger.wordnik.com">swagger</a>
<form id="api_selector">
<div class="input icon-btn">
<img id="show-pet-store-icon" src="images/pet_store_api.png" title="Show Swagger Petstore Example Apis" />
</div>
<div class="input icon-btn">
<img id="show-wordnik-dev-icon" src="images/wordnik_api.png" title="Show Wordnik Developer Apis" />
</div>
<div class="input"><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text" /></div>
<div class="input"><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text" /></div>
<div class="input"><a id="explore" href="#">Explore</a></div>
</form>
</div>
</div>
<div id="message-bar" class="swagger-ui-wrap">&nbsp;</div>
<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
</body>
<div id="message-bar" class="swagger-ui-wrap">&nbsp;</div>
<div id="swagger-ui-container" class="swagger-ui-wrap"></div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 B

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -41,7 +41,6 @@
"refresh" : "إعادة انعاش",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc" : "الترتيب حسب التاريخ تصاعدي / تنازلي",
"sort_by_abc_zyx" : "Sort alphabetically",
"titles_only" : "العناوين فقط",
"expanded_view" : "عرض موسع",
"mark_all_as_read" : "اعتبر الكل مقروء",
@@ -112,7 +111,7 @@
"email" : "E-mail",
"change_password" : "Change password",
"confirm_password" : "Confirm password",
"minimum_6_chars" : "Minimum 6 characters",
"minimum_8_chars" : "Minimum 8 characters",
"passwords_do_not_match" : "Passwords do not match",
"api_key" : "API key",
"api_key_not_generated" : "Not generated yet",
@@ -175,7 +174,8 @@
"font_size" : "increase/decrease font size of the current entry ",
"go_to_all" : "go to the All view ",
"go_to_starred" : "go to the Starred view ",
"feed_search" : "navigate to a subscription by entering the subscription name"
"feed_search" : "navigate to a subscription by entering the subscription name",
"refresh": "refresh"
}
}
}
}

View File

@@ -41,7 +41,6 @@
"refresh" : "Actualitzar",
"refresh_all" : "Força l'actualització de tots els canals",
"sort_by_asc_desc" : "Ordenar per data asc/desc",
"sort_by_abc_zyx" : "Sort alphabetically",
"titles_only" : "Només títols",
"expanded_view" : "Vista ampliada",
"mark_all_as_read" : "Marcar tots llegits",
@@ -112,7 +111,7 @@
"email" : "Adreça electrònica",
"change_password" : "Canvia la contrasenya ",
"confirm_password" : "Confirma la contrasenya",
"minimum_6_chars" : "Mínim de 6 caracters",
"minimum_8_chars" : "Mínim de 8 caracters",
"passwords_do_not_match" : "Les contrasenyes no coincideixen",
"api_key" : "Clau API ",
"api_key_not_generated" : "Encara no s'ha generat",

View File

@@ -41,7 +41,6 @@
"refresh " : " Obnovit",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc " : " Seřadit podle nejnovějšího/nejstaršího",
"sort_by_abc_zyx" : "Sort alphabetically",
"titles_only " : " Zobrazit jenom titulky",
"expanded_view " : " Rozšířený náhled",
"mark_all_as_read " : " Označit vše jako přečtené",
@@ -112,7 +111,7 @@
"email " : " E-mail",
"change_password " : " Změnit heslo",
"confirm_password " : " Potvrdit heslo",
"minimum_6_chars " : " Minimum je 6 znaků",
"minimum_8_chars " : " Minimum je 8 znaků",
"passwords_do_not_match " : " Hesla se neshodují",
"api_key " : " API klíč",
"api_key_not_generated " : " Není vygenerován",

View File

@@ -41,7 +41,6 @@
"refresh" : "Adnewyddu",
"refresh_all" : "Gorfodi ail-lwytho pob ffrwd",
"sort_by_asc_desc" : "Trefnu yn ôl dyddiad",
"sort_by_abc_zyx" : "Sort alphabetically",
"titles_only" : "Teitlau yn unig",
"expanded_view" : "Golwg estynedig",
"mark_all_as_read" : "Nodi'r cyfan fel wedi ei ddarllen",
@@ -112,7 +111,7 @@
"email" : "E-bost",
"change_password" : "Newid cyfrinair",
"confirm_password" : "Cadarnhau cyfrinair",
"minimum_6_chars" : "Isafswm 6 nod",
"minimum_8_chars" : "Isafswm 8 nod",
"passwords_do_not_match" : "Mae'r cyfrineiriau yn wahanol",
"api_key" : "Allwedd API",
"api_key_not_generated" : "Heb ei gynhyrchu eto",

View File

@@ -41,7 +41,6 @@
"refresh" : "Opdater",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc" : "Sorter efter dato ny/gammel",
"sort_by_abc_zyx" : "Sort alphabetically",
"titles_only" : "Kun titler",
"expanded_view" : "Udvidet visning",
"mark_all_as_read" : "Marker alle som læst",
@@ -112,7 +111,7 @@
"email" : "E-mail",
"change_password" : "Skift adgangskode",
"confirm_password" : "Bekræft adgangskode",
"minimum_6_chars" : "Minimum 6 karakter",
"minimum_8_chars" : "Minimum 8 karakter",
"passwords_do_not_match" : "Adgangskoderne er ikke ens",
"api_key" : "API nøgle",
"api_key_not_generated" : "Ikke genereret endnu",

View File

@@ -41,7 +41,6 @@
"refresh" : "Aktualisieren",
"refresh_all" : "Erzwinge Aktualisierung aller Feeds",
"sort_by_asc_desc" : "Nach Datum sortieren (auf-/absteigend)",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Nur Überschriften",
"expanded_view" : "Ausgedehnte Ansicht",
"mark_all_as_read" : "Alle Artikel als gelesen markieren",
@@ -112,7 +111,7 @@
"email" : "E-mail",
"change_password" : "Passwort ändern",
"confirm_password" : "Passwort bestätigen",
"minimum_6_chars" : "Mindestens 6 Zeichen",
"minimum_8_chars" : "Mindestens 8 Zeichen",
"passwords_do_not_match" : "Passwörter stimmen nicht überein",
"api_key" : "API Schlüssel",
"api_key_not_generated" : "Noch nicht generiert",

View File

@@ -41,7 +41,6 @@
"refresh" : "Refresh",
"refresh_all" : "Force refresh all my feeds",
"sort_by_asc_desc" : "Sort by date asc/desc",
"sort_by_abc_zyx" : "Sort alphabetically",
"titles_only" : "Titles only",
"expanded_view" : "Expanded view",
"mark_all_as_read" : "Mark all as read",
@@ -112,9 +111,10 @@
"profile" : {
"user_name" : "User name",
"email" : "E-mail",
"current_password" : "Current Password",
"change_password" : "Change password",
"confirm_password" : "Confirm password",
"minimum_6_chars" : "Minimum 6 characters",
"minimum_8_chars" : "Minimum 8 characters",
"passwords_do_not_match" : "Passwords do not match",
"api_key" : "API key",
"api_key_not_generated" : "Not generated yet",
@@ -177,7 +177,8 @@
"font_size" : "increase/decrease font size of the current entry",
"go_to_all" : "go to the All view",
"go_to_starred" : "go to the Starred view",
"feed_search" : "navigate to a subscription by entering the subscription name"
"feed_search" : "navigate to a subscription by entering the subscription name",
"refresh": "refresh"
}
}
}
}

View File

@@ -43,7 +43,6 @@
"refresh" : "Actualizar",
"refresh_all" : "Forzar la actualización de todos mis canales.",
"sort_by_asc_desc" : "Ordenar por fecha asc/desc.",
"sort_by_abc_zyx" : "Ordenar alfabéticamente",
"titles_only" : "Sólo títulos",
"expanded_view" : "Vista expandida",
"mark_all_as_read" : "Marcar todos como leído",
@@ -114,7 +113,7 @@
"email" : "Correo electrónico",
"change_password" : "Cambiar contraseña",
"confirm_password" : "Confirmar contraseña",
"minimum_6_chars" : "Mínimo 6 caracteres",
"minimum_8_chars" : "Mínimo 8 caracteres",
"passwords_do_not_match" : "Las contraseñas no coinciden",
"api_key" : "Clave API",
"api_key_not_generated" : "No generado todavía",

View File

@@ -41,7 +41,6 @@
"refresh" : "تازه‌سازی",
"refresh_all" : "مجبورکردن تازه‌سازی همهٔ خوراک‌ها",
"sort_by_asc_desc" : "مرتب‌کردن بر اساس تاریخ به‌صورت صعودی/نزولی",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "فقط عنوان‌ها",
"expanded_view" : "نمای گسترش‌یافته",
"mark_all_as_read" : "علامت‌گذاری تمامی مطالب به‌عنوان خوانده‌شده",
@@ -112,7 +111,7 @@
"email" : "رایانامه",
"change_password" : "تغییر گذرواژه",
"confirm_password" : "تأیید گذرواژه",
"minimum_6_chars" : "حداقل ۶ نویسه",
"minimum_8_chars" : "حداقل ۸ نویسه",
"passwords_do_not_match" : "گذرواژه‌ها انطباق ندارند",
"api_key" : "کلید API",
"api_key_not_generated" : "هنوز ایجاد نشده‌است",

View File

@@ -41,7 +41,6 @@
"refresh" : "Päivitä",
"refresh_all" : "Pakota kaikkien syötteiden päivitys",
"sort_by_asc_desc" : "Järjestä päivämäärän mukaan nousevasti/laskevasti",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Näytä vain otsikot",
"expanded_view" : "Laajennettu näkymä",
"mark_all_as_read" : "Merkitse kaikki luetuiksi",
@@ -112,7 +111,7 @@
"email" : "Sähköposti",
"change_password" : "Vaihda salasana",
"confirm_password" : "Vahvista uusi salasana",
"minimum_6_chars" : "Vähintään 6 merkkiä",
"minimum_8_chars" : "Vähintään 8 merkkiä",
"passwords_do_not_match" : "Salasanat eivät täsmää",
"api_key" : "API-avain",
"api_key_not_generated" : "API-avainta ei ole vielä luotu",

View File

@@ -41,7 +41,6 @@
"refresh" : "Rafraîchir",
"refresh_all" : "Rafraîchir tous les flux",
"sort_by_asc_desc" : "Trier par date croissante/décroissante",
"sort_by_abc_zyx" : "Trier par ordre alphabétique",
"titles_only" : "Titres uniquement",
"expanded_view" : "Vue étendue",
"mark_all_as_read" : "Tout marquer comme lu",
@@ -110,9 +109,10 @@
"profile" : {
"user_name" : "Nom",
"email" : "E-mail",
"current_password" : "Mot de passe actuel",
"change_password" : "Changer de mot de passe",
"confirm_password" : "Confirmer le mot de passe",
"minimum_6_chars" : "Minimum 6 caractères",
"minimum_8_chars" : "Minimum 8 caractères",
"passwords_do_not_match" : "Les mots de passe ne correspondent pas",
"api_key" : "Clé API",
"api_key_not_generated" : "Pas encore générée",

View File

@@ -41,7 +41,6 @@
"refresh" : "Actualizar",
"refresh_all" : "Forzar a actualización de todas as fontes ",
"sort_by_asc_desc" : "Ordenar por data asc/desc",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Só títulos",
"expanded_view" : "Vista expandida",
"mark_all_as_read" : "Marcar todos como lidos",
@@ -112,7 +111,7 @@
"email" : "Correo",
"change_password" : "Cambiar contrasinal",
"confirm_password" : "Confirmar contrasinal",
"minimum_6_chars" : "Mínimo 6 caracteres",
"minimum_8_chars" : "Mínimo 8 caracteres",
"passwords_do_not_match" : "Os contrasinais non coinciden no coinciden",
"api_key" : "Chave API",
"api_key_not_generated" : "Non xerado todavía",

View File

@@ -41,7 +41,6 @@
"refresh" : "واج‌أری",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc" : "تاریخˇ سر دچئن",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "خالی تیتران",
"expanded_view" : "واشاده نما",
"mark_all_as_read" : "همه‌ته مطالبه چاکون بخانده",
@@ -112,7 +111,7 @@
"email" : "ایمئل",
"change_password" : "رمزه عوضأگودن",
"confirm_password" : "رمزه تأیید گودن",
"minimum_6_chars" : "ناقلن 6 کارکتر",
"minimum_8_chars" : "ناقلن 8 کارکتر",
"passwords_do_not_match" : "رمزان کس‌به‌کسه نخانید",
"api_key" : "کلید API",
"api_key_not_generated" : "هلئه چاگوده نبؤ",

View File

@@ -41,7 +41,6 @@
"refresh" : "Frissítés",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc" : "Rendezés időrend szerint",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Csak cím",
"expanded_view" : "Részletes nézet",
"mark_all_as_read" : "Az összes megjelölése olvasottként",
@@ -112,7 +111,7 @@
"email" : "E-mail",
"change_password" : "Jelszó megváltoztatás",
"confirm_password" : "Jelszó megerősítése",
"minimum_6_chars" : "Legalább 8 karakter",
"minimum_8_chars" : "Legalább 8 karakter",
"passwords_do_not_match" : "A jelszavak nem egyeznek",
"api_key" : "API kulcs",
"api_key_not_generated" : "Még nincsen generálva",

View File

@@ -41,7 +41,6 @@
"refresh" : "Segarkan",
"refresh_all" : "Memaksa menyegarkan semua umpan saya",
"sort_by_asc_desc" : "Urutkan menurut tanggal asc/desc",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Hanya Judul",
"expanded_view" : "Penglihatan diperluas",
"mark_all_as_read" : "Tandai semua sebagai telah dibaca",
@@ -114,7 +113,7 @@
"email" : "Surel",
"change_password" : "Ganti kata sandi",
"confirm_password" : "Konfirmasi kata sandi",
"minimum_6_chars" : "Minimal 6 karakter",
"minimum_8_chars" : "Minimal 8 karakter",
"passwords_do_not_match" : "Kata sandi tidak sesuai",
"api_key" : "kunci API",
"api_key_not_generated" : "Belum menghasilkan",

View File

@@ -41,7 +41,6 @@
"refresh" : "Aggiorna",
"refresh_all" : "Forza l'aggiornamento di tutti i feed",
"sort_by_asc_desc" : "Ordina per data crescente/decrescente",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Solo i titoli",
"expanded_view" : "Espandi",
"mark_all_as_read" : "Segna tutti come già letti",
@@ -57,8 +56,8 @@
"donate" : "Dona"
},
"view" : {
"entry_source" : "da",
"entry_author" : "di",
"entry_source" : "da ",
"entry_author" : "di ",
"error_while_loading_feed" : "Si è verificato un errore durante il caricamento del feed",
"keep_unread" : "Mantieni come da leggere",
"no_unread_items" : "non contiene elementi da leggere",
@@ -82,9 +81,9 @@
},
"appearance" : "Aspetto",
"scroll_speed" : "Velocità di scorrimento quando navighi tra i feed (in millisecondi)",
"scroll_speed_help" : "Imposta su 0 per disabilitare",
"scroll_speed_help" : "imposta su 0 per disabilitare",
"theme" : "Tema",
"submit_your_theme" : "Sottoponi il tuo tema",
"submit_your_theme" : "Inserisci il tuo tema",
"custom_css" : "CSS personalizzato"
},
"details" : {
@@ -114,7 +113,7 @@
"email" : "E-mail",
"change_password" : "Cambia password",
"confirm_password" : "Conferma password",
"minimum_6_chars" : "Minimo 6 caratteri",
"minimum_8_chars" : "Minimo 8 caratteri",
"passwords_do_not_match" : "Le password non corrispondono",
"api_key" : "chiave API",
"api_key_not_generated" : "Non ancora generata",
@@ -130,7 +129,7 @@
"line1" : "CommaFeed è basato su JAX-RS e AngularJS. Pertanto è disponibile una REST API.",
"link_to_documentation" : "Link alla documentazione."
},
"keyboard_shortcuts" : "Scorciatoie da tastiera",
"keyboard_shortcuts" : "Scorciatoie da tastiera",
"version" : "Versione di CommaFeed",
"line1_prefix" : "CommaFeed è un progetto open source. Trovi i sorgenti su ",
"line1_suffix" : ".",
@@ -148,12 +147,12 @@
"subscribe_bookmarklet" : "Aggiungi la sottoscrizione ai segnalibri (clicca)",
"subscribe_bookmarklet_asc" : "Prima i vecchi",
"subscribe_bookmarklet_desc" : "Prima i recenti",
"next_unread_bookmarklet" : "Bookmarklet al prossimo elemento da leggere (trascinalo nella barra dei segnalibri)"
"next_unread_bookmarklet" : "Segnalibro al prossimo elemento da leggere (trascinalo nella barra dei segnalibri)"
},
"translation" : {
"value" : "Traduzioni",
"message" : "Abbiamo bisogno del tuo aiuto per tradurre CommaFeed.",
"link" : "Scopri come aiutarci nella traduzioni."
"link" : "Scopri come aiutarci nelle traduzioni."
},
"announcements" : "Annunci",
"shortcuts" : {
@@ -177,7 +176,8 @@
"font_size" : "aumenta/decrementa la dimensione del font per la voce corrente",
"go_to_all" : "vai alla vista Tutti",
"go_to_starred" : "vai alla vista Preferiti",
"feed_search" : "raggiungi una sottoscrizione scrivendo il suo nome"
"feed_search" : "raggiungi una sottoscrizione scrivendo il suo nome",
"refresh" : "aggiorna"
}
}
}

View File

@@ -3,7 +3,7 @@
"save" : "保存",
"cancel" : "取り消し",
"delete" : "削除",
"required" : "Required",
"required" : "必須",
"download" : "ダウンロード",
"link" : "リンク",
"bookmark" : "ブックマーク",
@@ -15,7 +15,7 @@
"import" : "インポート",
"new_category" : "新しいカテゴリー",
"all" : "全て",
"starred" : "スター付"
"starred" : "スター付"
},
"subscribe" : {
"feed_url" : "フィードURL",
@@ -40,8 +40,7 @@
"next_entry" : "次のエントリー",
"refresh" : "更新",
"refresh_all" : "全てのフィードを更新",
"sort_by_asc_desc" : "昇順/降順にソート",
"sort_by_abc_zyx" : "Sort Alphabetically",
"sort_by_asc_desc" : "日時でソート",
"titles_only" : "タイトルのみ",
"expanded_view" : "拡張ビュー",
"mark_all_as_read" : "全て既読にする",
@@ -101,8 +100,8 @@
"feed_url" : "フィードURL",
"generate_api_key_first" : "最初にあなたのAPIキーを生成して下さい。",
"unsubscribe" : "購読解除",
"unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
"delete_category_confirmation" : "Are you sure you want to delete this category? ",
"unsubscribe_confirmation" : "フィードの購読を解除してよろしいですか?",
"delete_category_confirmation" : "カテゴリーを削除してよろしいですか?",
"category_details" : "カテゴリー詳細",
"tag_details" : "タグ詳細",
"parent_category" : "親カテゴリー"
@@ -112,15 +111,15 @@
"email" : "E-mail",
"change_password" : "パスワードの変更",
"confirm_password" : "変更パスワードの確認",
"minimum_6_chars" : "6文字以上",
"minimum_8_chars" : "8文字以上",
"passwords_do_not_match" : "パスワードが一致しません",
"api_key" : "APIキー",
"api_key_not_generated" : "APIキーが生成されていません",
"generate_new_api_key" : "新しいAPIキーを生成",
"generate_new_api_key_info" : "パスワード変更新しいAPIキーが生成されます",
"generate_new_api_key_info" : "パスワード変更すると新しいAPIキーが生成されます",
"opml_export" : "OPMLエクスポート",
"delete_account" : "アカウント削除",
"delete_account_confirmation" : "Delete your acount? There's no turning back! "
"delete_account_confirmation" : "アカウントを削除してよろしいですか? 削除すると戻すことはできません!"
},
"about" : {
"rest_api" : {
@@ -150,10 +149,10 @@
},
"translation" : {
"value" : "翻訳",
"message" : "CommaFeedの翻訳に助けが必要です",
"link" : "どうやって翻訳に貢献できるか見て下さい。"
"message" : "CommaFeedの翻訳にご協力ください",
"link" : "翻訳にあたっての案内はこちら"
},
"announcements" : "Announcements",
"announcements" : "お知らせ",
"shortcuts" : {
"mouse_middleclick" : "中クリック",
"open_next_entry" : "次のエントリーを開く",
@@ -171,7 +170,7 @@
"mark_current_entry" : "現在のエントリーを既読/未読にする",
"mark_all_as_read" : "全エントリーを既読にする",
"open_in_new_tab_mark_as_read" : "エントリーを既読にして新しいタブで開く",
"fullscreen" : "フルスクリーントグル",
"fullscreen" : "フルスクリーン切り替え",
"font_size" : "現在のエントリーのフォントサイズを大きく/小さくする",
"go_to_all" : "All viewに変更する",
"go_to_starred" : "スター付きviewに変更する",

View File

@@ -41,7 +41,6 @@
"refresh" : "새로고침",
"refresh_all" : "모든 피드를 강제로 새로고침",
"sort_by_asc_desc" : "날짜별 오름차/내림차순 정렬",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "제목만 표시하기",
"expanded_view" : "Expanded View",
"mark_all_as_read" : "읽음으로 표시",
@@ -112,7 +111,7 @@
"email" : "이메일",
"change_password" : "비밀번호 변경",
"confirm_password" : "비밀번호 확인",
"minimum_6_chars" : "최소 6개의 문자가 필요합니다.",
"minimum_8_chars" : "최소 8개의 문자가 필요합니다.",
"passwords_do_not_match" : "비밀번호가 일치하지 않습니다.",
"api_key" : "API key",
"api_key_not_generated" : "아직 API Key가 생성되지 않았습니다.",

View File

@@ -41,7 +41,6 @@
"refresh" : "Refresh",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc" : "Aturkan mengikut tarikh (baru/lama)",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Tajuk sahaja",
"expanded_view" : "Wide view",
"mark_all_as_read" : "Tanda kesemuanya telah dibaca",
@@ -112,7 +111,7 @@
"email" : "E-mel",
"change_password" : "Tukar kata laluan",
"confirm_password" : "Sahkan kata laluan",
"minimum_6_chars" : "Minimum 6 huruf",
"minimum_8_chars" : "Minimum 8 huruf",
"passwords_do_not_match" : "Kata laluan tidak sama",
"api_key" : "API key",
"api_key_not_generated" : "Belum dijana",

View File

@@ -41,7 +41,6 @@
"refresh" : "Oppdater",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc" : "Sorter etter dato ny/gammel",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Kun titler",
"expanded_view" : "Utvidet visning",
"mark_all_as_read" : "Merk alle som lest",
@@ -112,7 +111,7 @@
"email" : "E-post",
"change_password" : "Endre passord",
"confirm_password" : "Bekreft passord",
"minimum_6_chars" : "Minimum 6 tegn",
"minimum_8_chars" : "Minimum 8 tegn",
"passwords_do_not_match" : "Passordene er ikke like",
"api_key" : "API-nøkkel",
"api_key_not_generated" : "Har ikke blitt generert",

View File

@@ -41,7 +41,6 @@
"refresh" : "Vernieuwen",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc" : "Sorteer op datum opl/afl",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Alleen titels",
"expanded_view" : "Uitgebreide weergave",
"mark_all_as_read" : "Markeer alles als gelezen",
@@ -112,7 +111,7 @@
"email" : "E-mail",
"change_password" : "Verander wachtwoord",
"confirm_password" : "Bevestig wachtwoord",
"minimum_6_chars" : "Minimaal 6 tekens",
"minimum_8_chars" : "Minimaal 8 tekens",
"passwords_do_not_match" : "Wachtwoorden komen niet overeen",
"api_key" : "API sleutel",
"api_key_not_generated" : "Nog niet gegenereerd",

View File

@@ -41,7 +41,6 @@
"refresh" : "Oppdater",
"refresh_all" : "Force refresh all my feeds ",
"sort_by_asc_desc" : "Sorter etter dato ny/gamal",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Berre titlar",
"expanded_view" : "Utvida visning",
"mark_all_as_read" : "Merk alle som lesne",
@@ -112,7 +111,7 @@
"email" : "E-post",
"change_password" : "Endre passord",
"confirm_password" : "Stadfest passord",
"minimum_6_chars" : "Minimum 6 teikn",
"minimum_8_chars" : "Minimum 8 teikn",
"passwords_do_not_match" : "Passorda er usamde",
"api_key" : "API-nykel",
"api_key_not_generated" : "Har ikkje vorte generert",

View File

@@ -41,7 +41,6 @@
"refresh" : "Odswież",
"refresh_all" : "Odśwież teraz wszystkie kanały ",
"sort_by_asc_desc" : "Sortuj od najnowszego/najstarszego",
"sort_by_abc_zyx" : "Sortuj alfabetycznie",
"titles_only" : "Widok listy",
"expanded_view" : "Widok rozwinięty",
"mark_all_as_read" : "Oznacz wszystko jako przeczytane",
@@ -114,7 +113,7 @@
"email" : "E-mail",
"change_password" : "Zmień hasło",
"confirm_password" : "Potwierdź hasło",
"minimum_6_chars" : "Minimum 6 znaków",
"minimum_8_chars" : "Minimum 8 znaków",
"passwords_do_not_match" : "Hasła nie pasują do siebie",
"api_key" : "Klucz API",
"api_key_not_generated" : "Jeszcze niewygenerowany",

View File

@@ -41,7 +41,6 @@
"refresh" : "Atualizar",
"refresh_all" : "Forçar atualização de todos os meus feeds",
"sort_by_asc_desc" : "Ordenar por data cresc/decres",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Somente títulos",
"expanded_view" : "Modo Expandido",
"mark_all_as_read" : "Marcar tudo como lido",
@@ -63,8 +62,8 @@
"keep_unread" : "Manter como não lido",
"no_unread_items" : "não tem itens não lidos.",
"mark_up_to_here" : "Marcar como lido até aqui",
"search_for" : "searching for: ",
"no_search_results" : "No match found for the requested keywords "
"search_for" : "Procurando por: ",
"no_search_results" : "Nenhum resultado encontrado para a pesquisa."
},
"feedsearch" : {
"hint" : "Digite o nome de uma Inscrição...",
@@ -81,8 +80,8 @@
"scroll_marks" : "No modo expandido, percorrer os itens marca-os como lidos"
},
"appearance" : "Aparência",
"scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
"scroll_speed_help" : "set to 0 to disable ",
"scroll_speed" : "Velocidade de rolagem enquanto navega pelos itens.",
"scroll_speed_help" : "Deixe em 0 para desabilitar ",
"theme" : "Tema",
"submit_your_theme" : "Envie seu tema",
"custom_css" : "CSS personalizado"
@@ -95,24 +94,24 @@
"category" : "Categoria",
"position" : "Posição",
"last_refresh" : "Última atualização",
"message" : "Last refresh message ",
"message" : "Ultima mensagem de atualização ",
"next_refresh" : "Próxima atualização",
"queued_for_refresh" : "Na fila para atualizar",
"feed_url" : "URL do feed",
"generate_api_key_first" : "Gerar uma chave de API em seu perfil primeiro.",
"unsubscribe" : "Cancelar inscrição",
"unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
"delete_category_confirmation" : "Are you sure you want to delete this category? ",
"unsubscribe_confirmation" : "Você tem certeza de que deseja se desinscrever desse feed? ",
"delete_category_confirmation" : "Você tem certeza de que deseja deletar essa categoria? ",
"category_details" : "Detalhes da categoria",
"tag_details" : "Tag details ",
"parent_category" : "Categoria pai"
"tag_details" : "Detalhes da tag ",
"parent_category" : "Categoria principal"
},
"profile" : {
"user_name" : "Nome de usuário",
"email" : "E-mail",
"change_password" : "Trocar senha",
"confirm_password" : "Confirmar senha",
"minimum_6_chars" : "Mínimo de 6 caracteres",
"minimum_8_chars" : "Mínimo de 8 caracteres",
"passwords_do_not_match" : "Senhas não conferem",
"api_key" : "Chave de API",
"api_key_not_generated" : "Ainda não gerada",
@@ -120,7 +119,7 @@
"generate_new_api_key_info" : "Mudar a senha irá gerar uma nova chave de API",
"opml_export" : "Exportar OPML",
"delete_account" : "Excluir conta",
"delete_account_confirmation" : "Delete your acount? There's no turning back! "
"delete_account_confirmation" : "Deseja excluir sua conta? Não há como desfazer essa ação! "
},
"about" : {
"rest_api" : {
@@ -130,7 +129,7 @@
},
"keyboard_shortcuts" : "Atalhos de teclado",
"version" : "CommaFeed versão",
"line1_prefix" : "CommaFeed é um projeto de código livre. Fontes estão hospedados em ",
"line1_prefix" : "CommaFeed é um projeto de código livre. As sources estão hospedados em ",
"line1_suffix" : ".",
"line2_prefix" : "Se você encontrar um problema, por favor relate-o na página de problemas do projeto ",
"line2_suffix" : ".",
@@ -144,13 +143,13 @@
"firefox_extension" : "Extensão para o Firefox",
"opera_extension" : "Extensão para o Opera",
"subscribe_bookmarklet" : "Bookmarklet para adicionar inscrição (clique)",
"subscribe_bookmarklet_asc" : "Mais velhas primeiro",
"subscribe_bookmarklet_desc" : "Mais novas primeiro",
"subscribe_bookmarklet_asc" : "Mais antigas primeiro",
"subscribe_bookmarklet_desc" : "Mais recentes primeiro",
"next_unread_bookmarklet" : "Bookmarklet para o próximo item não lido (arraste para a barra de favoritos)"
},
"translation" : {
"value" : "Tradução",
"message" : "Precisamos de sua ajuda para traduzir CommaFeed.",
"message" : "Precisamos de sua ajuda para traduzir o CommaFeed.",
"link" : "Veja como contribuir com traduções."
},
"announcements" : "Anúncios",
@@ -178,4 +177,4 @@
"feed_search" : "navega entre inscrições buscando pelo nome"
}
}
}
}

View File

@@ -41,7 +41,6 @@
"refresh" : "Обновить",
"refresh_all" : "Обновить все подписки вручную",
"sort_by_asc_desc" : "Сначала новые/старые",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Только заголовки",
"expanded_view" : "Развёрнутый вид",
"mark_all_as_read" : "Отметить всё как прочитанное",
@@ -112,7 +111,7 @@
"email" : "Эл. почта",
"change_password" : "Изменить пароль",
"confirm_password" : "Подтвердите пароль",
"minimum_6_chars" : "Не меньше 6 символов",
"minimum_8_chars" : "Не меньше 8 символов",
"passwords_do_not_match" : "Пароли не совпадают",
"api_key" : "API-ключ",
"api_key_not_generated" : "Не сгенерирован",
@@ -178,4 +177,4 @@
"feed_search" : "перейти к подписке по названию"
}
}
}
}

View File

@@ -41,7 +41,6 @@
"refresh" : "Obnoviť",
"refresh_all" : "Vynútené obnovenie všetkých položiek",
"sort_by_asc_desc" : "Zoradiť podľa najnovšieho/najstaršieho",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Náhľad titulkov",
"expanded_view" : "Rozšírený náhľad",
"mark_all_as_read" : "Označiť všetky ako prečítané",
@@ -112,7 +111,7 @@
"email" : "E-mail",
"change_password" : "Zmeniť heslo",
"confirm_password" : "Potvrdiť heslo",
"minimum_6_chars" : "Minimum je 6 znakov",
"minimum_8_chars" : "Minimum je 8 znakov",
"passwords_do_not_match" : "Heslá sa nezhodujú",
"api_key" : "API kľúč",
"api_key_not_generated" : "Nie je vygenerovaný",

View File

@@ -41,7 +41,6 @@
"refresh" : "Uppdatera",
"refresh_all" : "Tvinga uppdatering av alla prenumerationer",
"sort_by_asc_desc" : "Sortera efter datum stigande/fallande",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Endast titlar",
"expanded_view" : "Expanderad vy",
"mark_all_as_read" : "Markera alla som lästa",
@@ -112,7 +111,7 @@
"email" : "E-mail",
"change_password" : "Ändra lösenord",
"confirm_password" : "Bekräfta lösenord",
"minimum_6_chars" : "Minst 6 bokstäver",
"minimum_8_chars" : "Minst 8 bokstäver",
"passwords_do_not_match" : "Lösenorden matchar inte",
"api_key" : "API-nyckel",
"api_key_not_generated" : "Inte skapad än",

View File

@@ -41,7 +41,6 @@
"refresh" : "Yenile",
"refresh_all" : "Tüm yayınları yenilemek için zorla",
"sort_by_asc_desc" : "Tarihe göre sırala artan/azalan",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "Sadece başlıklar",
"expanded_view" : "Genişletilmiş görünüm",
"mark_all_as_read" : "Tümünü okundu işaretle",
@@ -112,7 +111,7 @@
"email" : "E-posta",
"change_password" : "Şifre değiştir",
"confirm_password" : "Şifreyi doğrula",
"minimum_6_chars" : "En az 6 karakter",
"minimum_8_chars" : "En az 8 karakter",
"passwords_do_not_match" : "Şifreler uyuşmuyor",
"api_key" : "API anahtarı",
"api_key_not_generated" : "Henüz oluşturulmadı",

View File

@@ -41,7 +41,6 @@
"refresh" : "刷新",
"refresh_all" : "刷新所有订阅",
"sort_by_asc_desc" : "按日期升序/降序排序",
"sort_by_abc_zyx" : "Sort Alphabetically",
"titles_only" : "仅显示标题",
"expanded_view" : "显示内容",
"mark_all_as_read" : "标记所有为已读",
@@ -112,7 +111,7 @@
"email" : "邮箱",
"change_password" : "修改密码",
"confirm_password" : "确认密码",
"minimum_6_chars" : "最少为 6 个字母",
"minimum_8_chars" : "最少为 8 个字母",
"passwords_do_not_match" : "密码不匹配",
"api_key" : "API 密钥",
"api_key_not_generated" : "API 密钥尚未生成",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -1,85 +1,86 @@
<!DOCTYPE html>
<html>
<head>
<title>CommaFeed</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="mobile-web-app-capable" content="yes">
<link rel="manifest" href="manifest.json">
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
<link rel="apple-touch-icon" href="app-icon-57.png" />
<link rel="apple-touch-icon" sizes="72x72" href="app-icon-72.png" />
<link rel="apple-touch-icon" sizes="114x114" href="app-icon-114.png" />
<link rel="apple-touch-icon" sizes="144x144" href="app-icon-144.png" />
<link rel="icon" sizes="32x32" href="app-icon-32.png" />
<link rel="icon" sizes="64x64" href="app-icon-64.png" />
<link rel="icon" sizes="128x128" href="app-icon-128.png" />
<link rel="icon" sizes="192x192" href="app-icon-192.png" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
<meta name="theme-color" content="#F88A14" />
<meta name="application-name" content="CommaFeed" />
<meta name="msapplication-navbutton-color" content="#F88A14" />
<meta name="msapplication-starturl" content="/" />
<meta name="msapplication-square70x70logo" content="metro-icon-70.png" />
<meta name="msapplication-square150x150logo" content="metro-icon-150.png" />
<link rel="fluid-icon" href="app-icon-512.png" title="CommaFeed" />
<link rel="logo" type="image/svg" href="app-icon.svg" />
<head>
<title>CommaFeed</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<meta name="mobile-web-app-capable" content="yes" />
<link rel="manifest" href="manifest.json" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
<link rel="apple-touch-icon" href="app-icon-57.png" />
<link rel="apple-touch-icon" sizes="72x72" href="app-icon-72.png" />
<link rel="apple-touch-icon" sizes="114x114" href="app-icon-114.png" />
<link rel="apple-touch-icon" sizes="144x144" href="app-icon-144.png" />
<link rel="icon" sizes="32x32" href="app-icon-32.png" />
<link rel="icon" sizes="64x64" href="app-icon-64.png" />
<link rel="icon" sizes="128x128" href="app-icon-128.png" />
<link rel="icon" sizes="192x192" href="app-icon-192.png" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
<meta name="theme-color" content="#F88A14" />
<meta name="application-name" content="CommaFeed" />
<meta name="msapplication-navbutton-color" content="#F88A14" />
<meta name="msapplication-starturl" content="/" />
<meta name="msapplication-square70x70logo" content="metro-icon-70.png" />
<meta name="msapplication-square150x150logo" content="metro-icon-150.png" />
<link rel="fluid-icon" href="app-icon-512.png" title="CommaFeed" />
<link rel="logo" type="image/svg" href="app-icon.svg" />
<!-- build:css css/app.css -->
<link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="lib/font-awesome/css/font-awesome.css" />
<link rel="stylesheet" href="lib/select2/select2.css" />
<link rel="stylesheet" href="lib/ng-grid/ng-grid.css" />
<link rel="stylesheet" href="lib/jquery-ui/themes/base/jquery-ui.css" />
<link rel="stylesheet" href="lib/angular-loading-bar/build/loading-bar.css" />
<!-- build:css css/app.css -->
<link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="lib/font-awesome/css/font-awesome.css" />
<link rel="stylesheet" href="lib/select2/select2.css" />
<link rel="stylesheet" href="lib/ng-grid/ng-grid.css" />
<link rel="stylesheet" href="lib/jquery-ui/themes/base/jquery-ui.css" />
<link rel="stylesheet" href="lib/angular-loading-bar/build/loading-bar.css" />
<link rel="stylesheet" href="css/app.css" />
<!-- endbuild -->
<link rel="stylesheet" href="custom_css.css" />
</head>
<body>
<div ng-app="commafeed" id="main" class="main">
<div ui-view></div>
</div>
<!-- build:js js/app.js -->
<script type="text/javascript" src="lib/lodash/lodash.js"></script>
<script type="text/javascript" src="lib/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="lib/jquery-ui/ui/jquery-ui.js"></script>
<script type="text/javascript" src="lib/jquery-mousewheel/jquery.mousewheel.js"></script>
<script type="text/javascript" src="lib/bootstrap/dist/js/bootstrap.js"></script>
<script type="text/javascript" src="lib/angular/angular.js"></script>
<script type="text/javascript" src="lib/angular-route/angular-route.js"></script>
<script type="text/javascript" src="lib/angular-resource/angular-resource.js"></script>
<script type="text/javascript" src="lib/angular-sanitize/angular-sanitize.js"></script>
<script type="text/javascript" src="lib/angular-touch/angular-touch.js"></script>
<script type="text/javascript" src="lib/angular-animate/angular-animate.js"></script>
<script type="text/javascript" src="lib/angular-bootstrap/ui-bootstrap-tpls.js"></script>
<script type="text/javascript" src="lib/angular-loading-bar/build/loading-bar.js"></script>
<script type="text/javascript" src="lib/angular-translate/angular-translate.js"></script>
<script type="text/javascript" src="lib/angular-translate-loader-static-files/angular-translate-loader-static-files.js"></script>
<script type="text/javascript" src="lib/ngInfiniteScroll/build/ng-infinite-scroll.js"></script>
<script type="text/javascript" src="lib/ng-grid/build/ng-grid.js"></script>
<script type="text/javascript" src="lib/angular-ui-router/release/angular-ui-router.js"></script>
<script type="text/javascript" src="lib/angular-ui-utils/ui-utils.js"></script>
<script type="text/javascript" src="lib/angular-ui-select2/src/select2.js"></script>
<script type="text/javascript" src="lib/select2/select2.js"></script>
<script type="text/javascript" src="lib/mousetrap/mousetrap.js"></script>
<script type="text/javascript" src="lib/momentjs/min/moment-with-locales.js"></script>
<script type="text/javascript" src="lib/devicejs/lib/device.js"></script>
<script type="text/javascript" src="js/controllers.js"></script>
<script type="text/javascript" src="js/directives.js"></script>
<script type="text/javascript" src="js/filters.js"></script>
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/services.js"></script>
<script type="text/javascript" src="js/i18n.js"></script>
<script type="text/javascript" src="js/templates.js"></script>
<!-- endbuild -->
<script type="text/javascript" src="analytics.js"></script>
</body>
<link rel="stylesheet" href="css/app.css" />
<!-- endbuild -->
<link rel="stylesheet" href="custom_css.css" />
</head>
<body>
<div ng-app="commafeed" id="main" class="main">
<div ui-view></div>
</div>
<!-- build:js js/app.js -->
<script type="text/javascript" src="lib/lodash/lodash.js"></script>
<script type="text/javascript" src="lib/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="lib/jquery-ui/ui/jquery-ui.js"></script>
<script type="text/javascript" src="lib/jquery-mousewheel/jquery.mousewheel.js"></script>
<script type="text/javascript" src="lib/bootstrap/dist/js/bootstrap.js"></script>
<script type="text/javascript" src="lib/angular/angular.js"></script>
<script type="text/javascript" src="lib/angular-route/angular-route.js"></script>
<script type="text/javascript" src="lib/angular-resource/angular-resource.js"></script>
<script type="text/javascript" src="lib/angular-sanitize/angular-sanitize.js"></script>
<script type="text/javascript" src="lib/angular-touch/angular-touch.js"></script>
<script type="text/javascript" src="lib/angular-animate/angular-animate.js"></script>
<script type="text/javascript" src="lib/angular-bootstrap/ui-bootstrap-tpls.js"></script>
<script type="text/javascript" src="lib/angular-loading-bar/build/loading-bar.js"></script>
<script type="text/javascript" src="lib/angular-translate/angular-translate.js"></script>
<script type="text/javascript" src="lib/angular-translate-loader-static-files/angular-translate-loader-static-files.js"></script>
<script type="text/javascript" src="lib/ngInfiniteScroll/build/ng-infinite-scroll.js"></script>
<script type="text/javascript" src="lib/ng-grid/build/ng-grid.js"></script>
<script type="text/javascript" src="lib/angular-ui-router/release/angular-ui-router.js"></script>
<script type="text/javascript" src="lib/angular-ui-utils/ui-utils.js"></script>
<script type="text/javascript" src="lib/angular-ui-select2/src/select2.js"></script>
<script type="text/javascript" src="lib/select2/select2.js"></script>
<script type="text/javascript" src="lib/mousetrap/mousetrap.js"></script>
<script type="text/javascript" src="lib/momentjs/min/moment-with-locales.js"></script>
<script type="text/javascript" src="lib/devicejs/lib/device.js"></script>
<script type="text/javascript" src="lib/tinycon/tinycon.js"></script>
<script type="text/javascript" src="js/controllers.js"></script>
<script type="text/javascript" src="js/directives.js"></script>
<script type="text/javascript" src="js/filters.js"></script>
<script type="text/javascript" src="js/main.js"></script>
<script type="text/javascript" src="js/services.js"></script>
<script type="text/javascript" src="js/i18n.js"></script>
<script type="text/javascript" src="js/templates.js"></script>
<!-- endbuild -->
<script type="text/javascript" src="analytics.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -1,373 +1,402 @@
var module = angular.module('commafeed.directives', []);
var module = angular.module("commafeed.directives", [])
module.directive('focus', ['$timeout', function($timeout) {
return {
restrict : 'A',
link : function(scope, element, attrs) {
scope.$watch(attrs.focus, function(value) {
if (!value)
return;
$timeout(function() {
$(element).focus();
});
});
}
};
}]);
module.directive("focus", [
"$timeout",
function ($timeout) {
return {
restrict: "A",
link: function (scope, element, attrs) {
scope.$watch(attrs.focus, function (value) {
if (!value) return
$timeout(function () {
$(element).focus()
})
})
},
}
},
])
module.directive('confirmClick', [function() {
return {
priority : -1,
restrict : 'A',
link : function(scope, element, attrs) {
element.bind('click', function(e) {
var message = scope.$eval(attrs.confirmClick);
if (message && !confirm(message)) {
e.stopImmediatePropagation();
e.preventDefault();
}
});
}
};
}]);
module.directive("confirmClick", [
function () {
return {
priority: -1,
restrict: "A",
link: function (scope, element, attrs) {
element.bind("click", function (e) {
var message = scope.$eval(attrs.confirmClick)
if (message && !confirm(message)) {
e.stopImmediatePropagation()
e.preventDefault()
}
})
},
}
},
])
/**
* Open a popup window pointing to the url in the href attribute
*/
module.directive('popup', function() {
var opts = 'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=800';
return {
link : function(scope, elm, attrs) {
elm.bind('click', function(event) {
window.open(this.href, '', opts);
event.preventDefault();
});
}
};
});
module.directive("popup", function () {
var opts = "menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=800"
return {
link: function (scope, elm, attrs) {
elm.bind("click", function (event) {
window.open(this.href, "", opts)
event.preventDefault()
})
},
}
})
/**
* entry tag handling
*/
module.directive('tags', function() {
return {
restrict : 'E',
scope : {
entry : '='
},
replace : true,
templateUrl : 'templates/_tags.html',
controller : ['$scope', 'EntryService', function($scope, EntryService) {
$scope.select2Options = {
'multiple' : true,
'simple_tags' : true,
'maximumInputLength' : 40,
tags : EntryService.tags
};
module.directive("tags", function () {
return {
restrict: "E",
scope: {
entry: "=",
},
replace: true,
templateUrl: "templates/_tags.html",
controller: [
"$scope",
"EntryService",
function ($scope, EntryService) {
$scope.select2Options = {
multiple: true,
simple_tags: true,
maximumInputLength: 40,
tags: EntryService.tags,
}
$scope.$watch('entry.tags', function(newValue, oldValue) {
if (oldValue && newValue != oldValue) {
var data = {
entryId : $scope.entry.id,
tags : []
};
if (newValue) {
data.tags = newValue;
}
EntryService.tag(data);
}
}, true);
}]
};
});
$scope.$watch(
"entry.tags",
function (newValue, oldValue) {
if (oldValue && newValue != oldValue) {
var data = {
entryId: $scope.entry.id,
tags: [],
}
if (newValue) {
data.tags = newValue
}
EntryService.tag(data)
}
},
true
)
},
],
}
})
/**
* Reusable favicon component
*/
module.directive('favicon', function() {
var tpl = '<img ng-src="{{url}}" class="favicon"></img>';
return {
restrict : 'E',
scope : {
url : '='
},
replace : true,
template : tpl
};
});
module.directive("favicon", function () {
var tpl = '<img ng-src="{{url}}" class="favicon"></img>'
return {
restrict: "E",
scope: {
url: "=",
},
replace: true,
template: tpl,
}
})
/**
* Support for the blur event
*/
module.directive('ngBlur', function() {
return {
restrict : 'A',
link : function(scope, elm, attrs) {
elm.bind('blur', function() {
scope.$apply(attrs.ngBlur);
});
}
};
});
module.directive("ngBlur", function () {
return {
restrict: "A",
link: function (scope, elm, attrs) {
elm.bind("blur", function () {
scope.$apply(attrs.ngBlur)
})
},
}
})
/**
* Prevent mousewheel scrolling from propagating to the parent when scrollbar
* reaches top or bottom
*/
module.directive('mousewheelScrolling', function() {
return {
restrict : 'A',
link : function(scope, elem, attr) {
elem.bind('mousewheel', function(e, d) {
var t = $(this);
if (d > 0 && t.scrollTop() === 0) {
e.preventDefault();
} else {
if (d < 0 && (t.scrollTop() == t.get(0).scrollHeight - t.innerHeight())) {
e.preventDefault();
}
}
});
}
};
});
module.directive("mousewheelScrolling", function () {
return {
restrict: "A",
link: function (scope, elem, attr) {
elem.bind("mousewheel", function (e, d) {
var t = $(this)
if (d > 0 && t.scrollTop() === 0) {
e.preventDefault()
} else {
if (d < 0 && t.scrollTop() == t.get(0).scrollHeight - t.innerHeight()) {
e.preventDefault()
}
}
})
},
}
})
/**
* Needed to use recursive directives. Wrap a recursive element with a
* <recursive> tag
*/
module.directive('recursive', ['$compile', function($compile) {
return {
restrict : 'E',
priority : 100000,
compile : function(tElement, tAttr) {
var contents = tElement.contents().remove();
var compiledContents = null;
return function(scope, iElement, iAttr) {
if (!compiledContents) {
compiledContents = $compile(contents);
}
iElement.append(compiledContents(scope, function(clone) {
return clone;
}));
};
}
};
}]);
module.directive("recursive", [
"$compile",
function ($compile) {
return {
restrict: "E",
priority: 100000,
compile: function (tElement, tAttr) {
var contents = tElement.contents().remove()
var compiledContents = null
return function (scope, iElement, iAttr) {
if (!compiledContents) {
compiledContents = $compile(contents)
}
iElement.append(
compiledContents(scope, function (clone) {
return clone
})
)
}
},
}
},
])
/**
* Reusable category component
*/
module.directive('category', [function() {
return {
scope : {
node : '=',
level : '=',
selectedType : '=',
selectedId : '=',
showLabel : '=',
showChildren : '=',
unreadCount : '&',
tag : '='
},
restrict : 'E',
replace : true,
templateUrl : 'templates/_category.html',
controller : ['$scope', '$state', 'FeedService', 'CategoryService', 'SettingsService', 'MobileService',
function($scope, $state, FeedService, CategoryService, SettingsService, MobileService) {
$scope.settingsService = SettingsService;
module.directive("category", [
function () {
return {
scope: {
node: "=",
level: "=",
selectedType: "=",
selectedId: "=",
showLabel: "=",
showChildren: "=",
unreadCount: "&",
tag: "=",
},
restrict: "E",
replace: true,
templateUrl: "templates/_category.html",
controller: [
"$scope",
"$state",
"FeedService",
"CategoryService",
"SettingsService",
"MobileService",
function ($scope, $state, FeedService, CategoryService, SettingsService, MobileService) {
$scope.settingsService = SettingsService
$scope.getClass = function(level) {
if ($scope.showLabel) {
return 'indent' + level;
}
};
$scope.getClass = function (level) {
if ($scope.showLabel) {
return "indent" + level
}
}
$scope.categoryLabel = function(category) {
return $scope.showLabel !== true ? $scope.showLabel : category.name;
};
$scope.categoryLabel = function (category) {
return $scope.showLabel !== true ? $scope.showLabel : category.name
}
$scope.categoryCountLabel = function(category) {
var count = $scope.unreadCount({
category : category
});
var label = '';
if (count > 0) {
label += count;
}
return label;
};
$scope.categoryCountLabel = function (category) {
var count = $scope.unreadCount({
category: category,
})
var label = ""
if (count > 0) {
label += count
}
return label
}
$scope.feedCountLabel = function(feed) {
var label = '';
if (feed.unread > 0) {
label += feed.unread;
}
return label;
};
$scope.feedCountLabel = function (feed) {
var label = ""
if (feed.unread > 0) {
label += feed.unread
}
return label
}
$scope.feedClicked = function(id, event) {
// Could be called by a middle click
if (!event || (!event.ctrlKey && event.which == 1)) {
MobileService.toggleLeftMenu();
if ($scope.selectedType == 'feed' && id == $scope.selectedId) {
$scope.$emit('emitReload');
} else {
$state.transitionTo('feeds.view', {
_type : 'feed',
_id : id
});
}
$scope.feedClicked = function (id, event) {
// Could be called by a middle click
if (!event || (!event.ctrlKey && event.which == 1)) {
MobileService.toggleLeftMenu()
if ($scope.selectedType == "feed" && id == $scope.selectedId) {
$scope.$emit("emitReload")
} else {
$state.transitionTo("feeds.view", {
_type: "feed",
_id: id,
})
}
if (event) {
event.preventDefault();
event.stopPropagation();
}
}
};
if (event) {
event.preventDefault()
event.stopPropagation()
}
}
}
$scope.categoryClicked = function(id, isTag) {
MobileService.toggleLeftMenu();
var type = isTag ? 'tag' : 'category';
if ($scope.selectedType == type && id == $scope.selectedId) {
$scope.$emit('emitReload');
} else {
$state.transitionTo('feeds.view', {
_type : type,
_id : id
});
}
};
$scope.categoryClicked = function (id, isTag) {
MobileService.toggleLeftMenu()
var type = isTag ? "tag" : "category"
if ($scope.selectedType == type && id == $scope.selectedId) {
$scope.$emit("emitReload")
} else {
$state.transitionTo("feeds.view", {
_type: type,
_id: id,
})
}
}
$scope.showFeedDetails = function(feed) {
$state.transitionTo('feeds.feed_details', {
_id : feed.id
});
};
$scope.showFeedDetails = function (feed) {
$state.transitionTo("feeds.feed_details", {
_id: feed.id,
})
}
$scope.showCategoryDetails = function(id, isTag) {
if (isTag) {
$state.transitionTo('feeds.tag_details', {
_id : id
});
} else {
$state.transitionTo('feeds.category_details', {
_id : id
});
}
};
$scope.showCategoryDetails = function (id, isTag) {
if (isTag) {
$state.transitionTo("feeds.tag_details", {
_id: id,
})
} else {
$state.transitionTo("feeds.category_details", {
_id: id,
})
}
}
$scope.toggleCategory = function(category, event) {
event.preventDefault();
event.stopPropagation();
category.expanded = !category.expanded;
if (category.id == 'all') {
return;
}
CategoryService.collapse({
id : category.id,
collapse : !category.expanded
});
};
}]
};
}]);
$scope.toggleCategory = function (category, event) {
event.preventDefault()
event.stopPropagation()
category.expanded = !category.expanded
if (category.id == "all") {
return
}
CategoryService.collapse({
id: category.id,
collapse: !category.expanded,
})
}
},
],
}
},
])
module.directive('draggable', function() {
return {
restrict : 'A',
link : function(scope, element, attrs) {
element.draggable({
revert : 'invalid',
helper : 'clone',
distance : 10,
axis : 'y'
}).data('source', scope.$eval(attrs.draggable));
}
};
});
module.directive("draggable", function () {
return {
restrict: "A",
link: function (scope, element, attrs) {
element
.draggable({
revert: "invalid",
helper: "clone",
distance: 10,
axis: "y",
})
.data("source", scope.$eval(attrs.draggable))
},
}
})
module.directive('droppable', ['CategoryService', 'FeedService', function(CategoryService, FeedService) {
return {
restrict : 'A',
link : function(scope, element, attrs) {
element.droppable({
tolerance : 'pointer',
over : function(event, ui) {
module.directive("droppable", [
"CategoryService",
"FeedService",
function (CategoryService, FeedService) {
return {
restrict: "A",
link: function (scope, element, attrs) {
element.droppable({
tolerance: "pointer",
over: function (event, ui) {},
drop: function (event, ui) {
var draggable = angular.element(ui.draggable)
},
drop : function(event, ui) {
var draggable = angular.element(ui.draggable);
var source = draggable.data("source")
var target = scope.$eval(attrs.droppable)
var source = draggable.data('source');
var target = scope.$eval(attrs.droppable);
if (angular.equals(source, target)) {
return
}
if (angular.equals(source, target)) {
return;
}
var data = {
id: source.id,
name: source.name,
filter: source.filter,
}
var data = {
id : source.id,
name : source.name,
filter : source.filter
};
if (source.children) {
// source is a category
} else {
// source is a feed
if (source.children) {
// source is a category
if (target.children) {
// target is a category
data.categoryId = target.id
data.position = 0
} else {
// target is a feed
data.categoryId = target.categoryId
data.position = target.position
}
} else {
// source is a feed
FeedService.modify(data, function () {
CategoryService.init()
})
}
scope.$apply()
},
})
},
}
},
])
if (target.children) {
// target is a category
data.categoryId = target.id;
data.position = 0;
} else {
// target is a feed
data.categoryId = target.categoryId;
data.position = target.position;
}
module.directive("metricMeter", function () {
return {
scope: {
metric: "=",
label: "=",
},
restrict: "E",
templateUrl: "templates/_metrics.meter.html",
}
})
FeedService.modify(data, function() {
CategoryService.init();
});
}
scope.$apply();
}
});
}
};
}]);
module.directive("metricGauge", function () {
return {
scope: {
metric: "=",
label: "=",
},
restrict: "E",
templateUrl: "templates/_metrics.gauge.html",
}
})
module.directive('metricMeter', function() {
return {
scope : {
metric : '=',
label : '='
},
restrict : 'E',
templateUrl : 'templates/_metrics.meter.html'
};
});
module.directive('metricGauge', function() {
return {
scope : {
metric : '=',
label : '='
},
restrict : 'E',
templateUrl : 'templates/_metrics.gauge.html'
};
});
module.directive('metricTimer', function() {
return {
scope : {
metric : '=',
label : '='
},
restrict : 'E',
templateUrl : 'templates/_metrics.timer.html'
};
});
module.directive("metricTimer", function () {
return {
scope: {
metric: "=",
label: "=",
},
restrict: "E",
templateUrl: "templates/_metrics.timer.html",
}
})

View File

@@ -1,113 +1,119 @@
var module = angular.module('commafeed.filters', []);
var module = angular.module("commafeed.filters", [])
/**
* smart date formatter
*/
module.filter('entryDate', function() {
return function(timestamp, defaultValue) {
if (!timestamp) {
return defaultValue;
}
module.filter("entryDate", function () {
return function (timestamp, defaultValue) {
if (!timestamp) {
return defaultValue
}
var d = moment(timestamp);
var now = moment();
var formatted;
if (Math.abs(d.diff(now)) < 86400000) {
formatted = d.fromNow();
} else {
formatted = d.format('YYYY-MM-DD HH:mm');
}
return formatted;
};
});
var d = moment(timestamp)
var now = moment()
var formatted
if (Math.abs(d.diff(now)) < 86400000) {
formatted = d.fromNow()
} else {
formatted = d.format("YYYY-MM-DD HH:mm")
}
return formatted
}
})
/**
* rewrites iframes to use https if commafeed uses https
*/
module.filter('iframeHttpsRewrite', function() {
return function(html) {
var result = html;
if (location.protocol === 'https:') {
var wrapper = $('<div></div>').html(html);
$('iframe', wrapper).each(function(i, elem) {
var e = $(elem);
e.attr('src', e.attr('src').replace(/^http:\/\//i, 'https://'));
});
result = wrapper.html();
}
return result;
};
});
module.filter("iframeHttpsRewrite", function () {
return function (html) {
var result = html
if (location.protocol === "https:") {
var wrapper = $("<div></div>").html(html)
$("iframe", wrapper).each(function (i, elem) {
var e = $(elem)
e.attr("src", e.attr("src").replace(/^http:\/\//i, "https://"))
})
result = wrapper.html()
}
return result
}
})
/**
* inserts title or alt-text after images, if any
*/
module.filter('appendImageTitles', function() {
return function(html) {
var result = html;
var wrapper = $('<div></div>').html(html);
$('img', wrapper).each(function(i, elem) {
var e = $(elem);
var title = e.attr('title') || e.attr('alt');
if (title) {
var text = $('<span style="font-style: italic;"></span>').text(title);
e.after(text);
}
});
result = wrapper.html();
return result;
};
});
module.filter("appendImageTitles", function () {
return function (html) {
var result = html
var wrapper = $("<div></div>").html(html)
$("img", wrapper).each(function (i, elem) {
var e = $(elem)
var title = e.attr("title") || e.attr("alt")
if (title) {
var text = $('<span style="font-style: italic;"></span>').text(title)
e.after(text)
}
})
result = wrapper.html()
return result
}
})
/**
* escapes the url
*/
module.filter('escape', function() {
return encodeURIComponent;
});
module.filter("escape", function () {
return encodeURIComponent
})
/**
* returns a trusted html content
*/
module.filter('trustHtml', ['$sce', function($sce) {
return function(val) {
return $sce.trustAsHtml(val);
};
}]);
module.filter("trustHtml", [
"$sce",
function ($sce) {
return function (val) {
return $sce.trustAsHtml(val)
}
},
])
/**
* returns a trusted url
*/
module.filter('trustUrl', ['$sce', function($sce) {
return function(val) {
return $sce.trustAsResourceUrl(val);
};
}]);
module.filter("trustUrl", [
"$sce",
function ($sce) {
return function (val) {
return $sce.trustAsResourceUrl(val)
}
},
])
/**
* add the 'highlight-search' class to text matching keywords
*/
module.filter('highlight', function() {
return function(html, keywords) {
if (keywords) {
var handleKeyword = function(token, html) {
var expr = new RegExp(token, 'gi');
var container = $('<span>').html(html);
var elements = container.find('*').addBack();
var textNodes = elements.not('iframe').contents().not(elements);
textNodes.each(function() {
var replaced = this.nodeValue.replace(expr, '<span class="highlight-search">$&</span>');
$('<span>').html(replaced).insertBefore(this);
$(this).remove();
});
return container.html();
};
module.filter("highlight", function () {
return function (html, keywords) {
if (keywords) {
var handleKeyword = function (token, html) {
var expr = new RegExp(token, "gi")
var container = $("<span>").html(html)
var elements = container.find("*").addBack()
var textNodes = elements.not("iframe").contents().not(elements)
textNodes.each(function () {
var replaced = this.nodeValue.replace(expr, '<span class="highlight-search">$&</span>')
$("<span>").html(replaced).insertBefore(this)
$(this).remove()
})
return container.html()
}
var tokens = keywords.split(' ');
for (var i = 0; i < tokens.length; i++) {
html = handleKeyword(tokens[i], html);
}
}
return html;
};
});
var tokens = keywords.split(" ")
for (var i = 0; i < tokens.length; i++) {
html = handleKeyword(tokens[i], html)
}
}
return html
}
})

View File

@@ -1,35 +1,37 @@
var module = angular.module('commafeed.i18n', []);
var module = angular.module("commafeed.i18n", [])
module.service('LangService', [function() {
this.langs = {
'ar': 'العربية',
'ca': 'Català',
'en': 'English',
'es': 'Español',
'de': 'Deutsch',
'fa': 'فارسی',
'fr': 'Français',
'gl': 'Galician',
'glk': 'گیلکی',
'hu': 'Magyar',
'id': 'Indonesian',
'ja': '日本語',
'ko': '한국어',
'nl': 'Nederlands',
'nb': 'Norsk (bokmål)',
'nn': 'Norsk (nynorsk)',
'pt': 'Português',
'pl': 'Polski',
'ru': 'Русский',
'fi': 'Suomi',
'sv': 'Svenska',
'zh': '简体中文',
'it': 'Italiano',
'tr': 'Türkçe',
'cy': 'Cymraeg',
'sk': 'Slovenčina',
'da': 'Danish',
'cs': 'Čeština',
'ms': 'Bahasa Malaysian'
}
}]);
module.service("LangService", [
function () {
this.langs = {
ar: "العربية",
ca: "Català",
en: "English",
es: "Español",
de: "Deutsch",
fa: "فارسی",
fr: "Français",
gl: "Galician",
glk: "گیلکی",
hu: "Magyar",
id: "Indonesian",
ja: "日本語",
ko: "한국어",
nl: "Nederlands",
nb: "Norsk (bokmål)",
nn: "Norsk (nynorsk)",
pt: "Português",
pl: "Polski",
ru: "Русский",
fi: "Suomi",
sv: "Svenska",
zh: "简体中文",
it: "Italiano",
tr: "Türkçe",
cy: "Cymraeg",
sk: "Slovenčina",
da: "Danish",
cs: "Čeština",
ms: "Bahasa Malaysian",
}
},
])

View File

@@ -1,145 +1,172 @@
var app = angular.module('commafeed', ['ngRoute', 'ngTouch', 'ngAnimate', 'ui.utils', 'ui.bootstrap', 'ui.router', 'ui.select2',
'commafeed.directives', 'commafeed.controllers', 'commafeed.services', 'commafeed.filters', 'commafeed.i18n', 'ngSanitize',
'infinite-scroll', 'ngGrid', 'chieffancypants.loadingBar', 'pascalprecht.translate']);
var app = angular.module("commafeed", [
"ngRoute",
"ngTouch",
"ngAnimate",
"ui.utils",
"ui.bootstrap",
"ui.router",
"ui.select2",
"commafeed.directives",
"commafeed.controllers",
"commafeed.services",
"commafeed.filters",
"commafeed.i18n",
"ngSanitize",
"infinite-scroll",
"ngGrid",
"chieffancypants.loadingBar",
"pascalprecht.translate",
])
app.config([
'$routeProvider',
'$stateProvider',
'$urlRouterProvider',
'$httpProvider',
'$compileProvider',
'cfpLoadingBarProvider',
'$translateProvider',
function($routeProvider, $stateProvider, $urlRouterProvider, $httpProvider, $compileProvider, cfpLoadingBarProvider,
$translateProvider) {
$translateProvider.useStaticFilesLoader({
prefix : 'i18n/',
suffix : '.js'
});
$translateProvider.preferredLanguage('en');
"$routeProvider",
"$stateProvider",
"$urlRouterProvider",
"$httpProvider",
"$compileProvider",
"cfpLoadingBarProvider",
"$translateProvider",
function (
$routeProvider,
$stateProvider,
$urlRouterProvider,
$httpProvider,
$compileProvider,
cfpLoadingBarProvider,
$translateProvider
) {
$translateProvider.useStaticFilesLoader({
prefix: "i18n/",
suffix: ".js",
})
$translateProvider.preferredLanguage("en")
cfpLoadingBarProvider.includeSpinner = false;
cfpLoadingBarProvider.includeSpinner = false
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|javascript):/);
var interceptor = ['$rootScope', '$q', '$injector', function(scope, $q, $injector) {
var f = {};
f.response = function(response) {
return response;
};
f.responseError = function(response) {
var status = response.status;
if (status == 401) {
$injector.get('$state').transitionTo('welcome');
}
return $q.reject(response);
};
return f;
}];
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|javascript):/)
var interceptor = [
"$rootScope",
"$q",
"$injector",
function (scope, $q, $injector) {
var f = {}
$httpProvider.interceptors.push(interceptor);
f.response = function (response) {
return response
}
$stateProvider.state('feeds', {
'abstract' : true,
url : '/feeds',
templateUrl : 'templates/feeds.html'
});
$stateProvider.state('feeds.view', {
url : '/view/:_type/:_id',
templateUrl : 'templates/feeds.view.html',
controller : 'FeedListCtrl'
});
$stateProvider.state('feeds.subscribe', {
url : '/subscribe',
templateUrl : 'templates/feeds.subscribe.html',
controller : 'SubscribeCtrl'
});
$stateProvider.state('feeds.new_category', {
url : '/add_category',
templateUrl : 'templates/feeds.new_category.html',
controller : 'NewCategoryCtrl'
});
$stateProvider.state('feeds.import', {
url : '/import',
templateUrl : 'templates/feeds.import.html',
controller : 'ImportCtrl'
});
$stateProvider.state('feeds.search', {
url : '/search/:_keywords',
templateUrl : 'templates/feeds.view.html',
controller : 'FeedListCtrl'
});
$stateProvider.state('feeds.feed_details', {
url : '/details/feed/:_id',
templateUrl : 'templates/feeds.feed_details.html',
controller : 'FeedDetailsCtrl'
});
$stateProvider.state('feeds.category_details', {
url : '/details/category/:_id',
templateUrl : 'templates/feeds.category_details.html',
controller : 'CategoryDetailsCtrl'
});
$stateProvider.state('feeds.tag_details', {
url : '/details/tag/:_id',
templateUrl : 'templates/feeds.tag_details.html',
controller : 'TagDetailsCtrl'
});
$stateProvider.state('feeds.help', {
url : '/help',
templateUrl : 'templates/feeds.help.html',
controller : 'HelpController'
});
$stateProvider.state('feeds.settings', {
url : '/settings',
templateUrl : 'templates/settings.html',
controller : 'SettingsCtrl'
});
$stateProvider.state('feeds.profile', {
url : '/profile',
templateUrl : 'templates/profile.html',
controller : 'ProfileCtrl'
});
f.responseError = function (response) {
var status = response.status
if (status == 401) {
$injector.get("$state").transitionTo("welcome")
}
return $q.reject(response)
}
return f
},
]
$stateProvider.state('admin', {
'abstract' : true,
url : '/admin',
templateUrl : 'templates/admin.html'
});
$stateProvider.state('admin.userlist', {
url : '/user/list',
templateUrl : 'templates/admin.userlist.html',
controller : 'ManageUsersCtrl'
});
$stateProvider.state('admin.useradd', {
url : '/user/add',
templateUrl : 'templates/admin.useradd.html',
controller : 'ManageUserCtrl'
});
$stateProvider.state('admin.useredit', {
url : '/user/edit/:_id',
templateUrl : 'templates/admin.useredit.html',
controller : 'ManageUserCtrl'
});
$stateProvider.state('admin.settings', {
url : '/settings',
templateUrl : 'templates/admin.settings.html',
controller : 'ManageSettingsCtrl'
});
$stateProvider.state('admin.metrics', {
url : '/metrics',
templateUrl : 'templates/admin.metrics.html',
controller : 'MetricsCtrl'
});
$httpProvider.interceptors.push(interceptor)
$stateProvider.state('welcome', {
url : '/welcome',
templateUrl : 'templates/welcome.html'
});
$stateProvider.state("feeds", {
abstract: true,
url: "/feeds",
templateUrl: "templates/feeds.html",
})
$stateProvider.state("feeds.view", {
url: "/view/:_type/:_id",
templateUrl: "templates/feeds.view.html",
controller: "FeedListCtrl",
})
$stateProvider.state("feeds.subscribe", {
url: "/subscribe",
templateUrl: "templates/feeds.subscribe.html",
controller: "SubscribeCtrl",
})
$stateProvider.state("feeds.new_category", {
url: "/add_category",
templateUrl: "templates/feeds.new_category.html",
controller: "NewCategoryCtrl",
})
$stateProvider.state("feeds.import", {
url: "/import",
templateUrl: "templates/feeds.import.html",
controller: "ImportCtrl",
})
$stateProvider.state("feeds.search", {
url: "/search/:_keywords",
templateUrl: "templates/feeds.view.html",
controller: "FeedListCtrl",
})
$stateProvider.state("feeds.feed_details", {
url: "/details/feed/:_id",
templateUrl: "templates/feeds.feed_details.html",
controller: "FeedDetailsCtrl",
})
$stateProvider.state("feeds.category_details", {
url: "/details/category/:_id",
templateUrl: "templates/feeds.category_details.html",
controller: "CategoryDetailsCtrl",
})
$stateProvider.state("feeds.tag_details", {
url: "/details/tag/:_id",
templateUrl: "templates/feeds.tag_details.html",
controller: "TagDetailsCtrl",
})
$stateProvider.state("feeds.help", {
url: "/help",
templateUrl: "templates/feeds.help.html",
controller: "HelpController",
})
$stateProvider.state("feeds.settings", {
url: "/settings",
templateUrl: "templates/settings.html",
controller: "SettingsCtrl",
})
$stateProvider.state("feeds.profile", {
url: "/profile",
templateUrl: "templates/profile.html",
controller: "ProfileCtrl",
})
$urlRouterProvider.when('/', '/feeds/view/category/all');
$urlRouterProvider.when('/admin', '/admin/settings');
$urlRouterProvider.otherwise('/');
$stateProvider.state("admin", {
abstract: true,
url: "/admin",
templateUrl: "templates/admin.html",
})
$stateProvider.state("admin.userlist", {
url: "/user/list",
templateUrl: "templates/admin.userlist.html",
controller: "ManageUsersCtrl",
})
$stateProvider.state("admin.useradd", {
url: "/user/add",
templateUrl: "templates/admin.useradd.html",
controller: "ManageUserCtrl",
})
$stateProvider.state("admin.useredit", {
url: "/user/edit/:_id",
templateUrl: "templates/admin.useredit.html",
controller: "ManageUserCtrl",
})
$stateProvider.state("admin.settings", {
url: "/settings",
templateUrl: "templates/admin.settings.html",
controller: "ManageSettingsCtrl",
})
$stateProvider.state("admin.metrics", {
url: "/metrics",
templateUrl: "templates/admin.metrics.html",
controller: "MetricsCtrl",
})
}]);
$stateProvider.state("welcome", {
url: "/welcome",
templateUrl: "templates/welcome.html",
})
$urlRouterProvider.when("/", "/feeds/view/category/all")
$urlRouterProvider.when("/admin", "/admin/settings")
$urlRouterProvider.otherwise("/")
},
])

View File

@@ -1,336 +1,375 @@
var module = angular.module('commafeed.services', ['ngResource']);
var module = angular.module("commafeed.services", ["ngResource"])
module.service('AnalyticsService', ['$state', function($state) {
this.track = function(path) {
if (typeof ga === 'undefined') {
return;
}
path = path || $state.$current.url.prefix;
ga('send', 'pageview', {
page : path
});
};
}]);
module.service("AnalyticsService", [
"$state",
function ($state) {
this.track = function (path) {
if (typeof ga === "undefined") {
return
}
path = path || $state.$current.url.prefix
ga("send", "pageview", {
page: path,
})
}
},
])
module.service('MobileService', ['$state', function($state) {
this.leftMenu = false;
this.rightMenu = false;
this.toggleLeftMenu = function() {
this.leftMenu = !this.leftMenu;
$('body').toggleClass('left-menu-active');
};
this.toggleRightMenu = function() {
this.rightMenu = !this.rightMenu;
$('body').toggleClass('right-menu-active');
};
this.mobile = device.mobile() || device.tablet();
}]);
module.service("MobileService", [
"$state",
function ($state) {
this.leftMenu = false
this.rightMenu = false
this.toggleLeftMenu = function () {
this.leftMenu = !this.leftMenu
$("body").toggleClass("left-menu-active")
}
this.toggleRightMenu = function () {
this.rightMenu = !this.rightMenu
$("body").toggleClass("right-menu-active")
}
this.mobile = device.mobile() || device.tablet()
},
])
module.factory('ProfileService', ['$resource', function($resource) {
var res = $resource('rest/user/profile/');
res.deleteAccount = $resource('rest/user/profile/deleteAccount').save;
return res;
}]);
module.factory("ProfileService", [
"$resource",
function ($resource) {
var res = $resource("rest/user/profile/")
res.deleteAccount = $resource("rest/user/profile/deleteAccount").save
return res
},
])
module.factory('SessionService', ['$resource', function($resource) {
var res = {};
res.login = $resource('rest/user/login').save;
res.register = $resource('rest/user/register').save;
res.passwordReset = $resource('rest/user/passwordReset').save;
return res;
}]);
module.factory("SessionService", [
"$resource",
function ($resource) {
var res = {}
res.login = $resource("rest/user/login").save
res.register = $resource("rest/user/register").save
res.passwordReset = $resource("rest/user/passwordReset").save
return res
},
])
module.factory('SettingsService', ['$resource', '$translate', function($resource, $translate) {
var res = $resource('rest/user/settings');
module.factory("SettingsService", [
"$resource",
"$translate",
function ($resource, $translate) {
var res = $resource("rest/user/settings")
var s = {};
s.settings = {};
s.save = function(callback) {
res.save(s.settings, function(data) {
if (callback) {
callback(data);
}
});
};
s.init = function(callback) {
res.get(function(data) {
s.settings = data;
var lang = s.settings.language || 'en';
$translate.use(lang);
if (lang === 'zh') {
lang = 'zh-cn';
} else if (lang === 'ms') {
lang = 'ms-my';
}
moment.locale(lang, {});
if (callback) {
callback(data);
}
});
};
s.init();
return s;
}]);
var s = {}
s.settings = {}
s.save = function (callback) {
res.save(s.settings, function (data) {
if (callback) {
callback(data)
}
})
}
s.init = function (callback) {
res.get(function (data) {
s.settings = data
var lang = s.settings.language || "en"
$translate.use(lang)
if (lang === "zh") {
lang = "zh-cn"
} else if (lang === "ms") {
lang = "ms-my"
}
moment.locale(lang, {})
if (callback) {
callback(data)
}
})
}
s.init()
return s
},
])
module.factory('FeedService', ['$resource', '$http', function($resource, $http) {
var actions = {
entries : {
method : 'GET',
params : {
_method : 'entries'
}
},
fetch : {
method : 'POST',
params : {
_method : 'fetch'
}
},
mark : {
method : 'POST',
params : {
_method : 'mark'
}
},
refresh : {
method : 'POST',
params : {
_method : 'refresh'
}
},
refreshAll : {
method : 'GET',
params : {
_method : 'refreshAll'
}
},
subscribe : {
method : 'POST',
params : {
_method : 'subscribe'
}
},
unsubscribe : {
method : 'POST',
params : {
_method : 'unsubscribe'
}
},
modify : {
method : 'POST',
params : {
_method : 'modify'
}
}
};
var res = $resource('rest/feed/:_method', {}, actions);
res.get = $resource('rest/feed/get/:id').get;
return res;
}]);
module.factory("FeedService", [
"$resource",
"$http",
function ($resource, $http) {
var actions = {
entries: {
method: "GET",
params: {
_method: "entries",
},
},
fetch: {
method: "POST",
params: {
_method: "fetch",
},
},
mark: {
method: "POST",
params: {
_method: "mark",
},
},
refresh: {
method: "POST",
params: {
_method: "refresh",
},
},
refreshAll: {
method: "GET",
params: {
_method: "refreshAll",
},
},
subscribe: {
method: "POST",
params: {
_method: "subscribe",
},
},
unsubscribe: {
method: "POST",
params: {
_method: "unsubscribe",
},
},
modify: {
method: "POST",
params: {
_method: "modify",
},
},
}
var res = $resource("rest/feed/:_method", {}, actions)
res.get = $resource("rest/feed/get/:id").get
return res
},
])
module.factory('CategoryService', ['$resource', '$http', function($resource, $http) {
module.factory("CategoryService", [
"$resource",
"$http",
function ($resource, $http) {
var traverse = function (callback, category, parentName) {
callback(category, parentName)
var children = category.children
if (children) {
for (var c = 0; c < children.length; c++) {
traverse(callback, children[c], category.name)
}
}
}
var traverse = function(callback, category, parentName) {
callback(category, parentName);
var children = category.children;
if (children) {
for (var c = 0; c < children.length; c++) {
traverse(callback, children[c], category.name);
}
}
};
// flatten categories
var flatten = function (category) {
var array = []
var callback = function (category, parentName) {
var name = category.name
if (parentName) {
name += " (in " + parentName + ")"
}
array.push({
id: category.id,
name: name,
orig: category,
})
}
traverse(callback, category)
return array
}
// flatten categories
var flatten = function(category) {
var array = [];
var callback = function(category, parentName) {
var name = category.name;
if (parentName) {
name += (' (in ' + parentName + ')');
}
array.push({
id : category.id,
name : name,
orig : category
});
};
traverse(callback, category);
return array;
};
// flatten feeds
var flatFeeds = function (category) {
var subs = []
var callback = function (category) {
subs.push.apply(subs, category.feeds)
}
traverse(callback, category)
return subs
}
// flatten feeds
var flatFeeds = function(category) {
var subs = [];
var callback = function(category) {
subs.push.apply(subs, category.feeds);
};
traverse(callback, category);
return subs;
};
// flatten everything
var flatAll = function (category, a) {
a.push([category.id, "category"])
_.each(category.children, function (child) {
flatAll(child, a)
})
_.each(category.feeds, function (feed) {
a.push([feed.id, "feed"])
})
}
// flatten everything
var flatAll = function(category, a) {
a.push([category.id, 'category']);
_.each(category.children, function(child) {
flatAll(child, a);
});
_.each(category.feeds, function(feed) {
a.push([feed.id, 'feed']);
});
};
var actions = {
get: {
method: "GET",
ignoreLoadingBar: true,
params: {
_method: "get",
},
},
entries: {
method: "GET",
params: {
_method: "entries",
},
},
mark: {
method: "POST",
params: {
_method: "mark",
},
},
add: {
method: "POST",
params: {
_method: "add",
},
},
remove: {
method: "POST",
params: {
_method: "delete",
},
},
modify: {
method: "POST",
params: {
_method: "modify",
},
},
collapse: {
method: "POST",
params: {
_method: "collapse",
},
},
}
var res = $resource("rest/category/:_method", {}, actions)
res.subscriptions = {}
res.flatCategories = {}
res.feeds = []
var actions = {
get : {
method : 'GET',
ignoreLoadingBar : true,
params : {
_method : 'get'
}
},
entries : {
method : 'GET',
params : {
_method : 'entries'
}
},
mark : {
method : 'POST',
params : {
_method : 'mark'
}
},
add : {
method : 'POST',
params : {
_method : 'add'
}
},
remove : {
method : 'POST',
params : {
_method : 'delete'
}
},
modify : {
method : 'POST',
params : {
_method : 'modify'
}
},
collapse : {
method : 'POST',
params : {
_method : 'collapse'
}
}
};
var res = $resource('rest/category/:_method', {}, actions);
res.subscriptions = {};
res.flatCategories = {};
res.feeds = [];
res.init = function (callback) {
res.get(function (data) {
res.subscriptions = data
res.flatCategories = flatten(data)
res.feeds = flatFeeds(data)
res.init = function(callback) {
res.get(function(data) {
res.subscriptions = data;
res.flatCategories = flatten(data);
res.feeds = flatFeeds(data);
res.flatAll = []
flatAll(data, res.flatAll)
res.flatAll.splice(1, 0, ["starred", "category"])
res.flatAll = [];
flatAll(data, res.flatAll);
res.flatAll.splice(1, 0, ['starred', 'category']);
if (callback) callback(data)
})
}
res.refresh = function (success, error) {
res.get(
function (data) {
_.merge(res.subscriptions, data)
if (success) success(data)
},
function (data) {
if (error) error(data)
}
)
}
if (callback)
callback(data);
});
};
res.refresh = function(success, error) {
res.get(function(data) {
_.merge(res.subscriptions, data);
if (success)
success(data);
}, function(data) {
if (error)
error(data);
});
};
res.init()
return res
},
])
res.init();
return res;
}]);
module.factory("EntryService", [
"$resource",
"$http",
function ($resource, $http) {
var actions = {
search: {
method: "GET",
params: {
_method: "search",
},
},
mark: {
method: "POST",
ignoreLoadingBar: true,
params: {
_method: "mark",
},
},
markMultiple: {
method: "POST",
params: {
_method: "markMultiple",
},
},
star: {
method: "POST",
params: {
_method: "star",
},
},
tag: {
method: "POST",
params: {
_method: "tag",
},
},
}
var res = $resource("rest/entry/:_method", {}, actions)
res.tags = []
var initTags = function () {
$http.get("rest/entry/tags").success(function (data) {
res.tags = []
res.tags.push.apply(res.tags, data)
res.tags.sort()
})
}
var oldTag = res.tag
res.tag = function (data) {
oldTag(data, function () {
initTags()
})
}
initTags()
return res
},
])
module.factory('EntryService', ['$resource', '$http', function($resource, $http) {
var actions = {
search : {
method : 'GET',
params : {
_method : 'search'
}
},
mark : {
method : 'POST',
ignoreLoadingBar : true,
params : {
_method : 'mark'
}
},
markMultiple : {
method : 'POST',
params : {
_method : 'markMultiple'
}
},
star : {
method : 'POST',
params : {
_method : 'star'
}
},
tag : {
method : 'POST',
params : {
_method : 'tag'
}
}
};
var res = $resource('rest/entry/:_method', {}, actions);
res.tags = [];
var initTags = function() {
$http.get('rest/entry/tags').success(function(data) {
res.tags = [];
res.tags.push.apply(res.tags, data);
res.tags.sort();
});
};
var oldTag = res.tag;
res.tag = function(data) {
oldTag(data, function() {
initTags();
});
};
initTags();
return res;
}]);
module.factory("AdminUsersService", [
"$resource",
function ($resource) {
var res = {}
res.get = $resource("rest/admin/user/get/:id").get
res.getAll = $resource("rest/admin/user/getAll").query
res.save = $resource("rest/admin/user/save").save
res.remove = $resource("rest/admin/user/delete").save
return res
},
])
module.factory('AdminUsersService', ['$resource', function($resource) {
var res = {};
res.get = $resource('rest/admin/user/get/:id').get;
res.getAll = $resource('rest/admin/user/getAll').query;
res.save = $resource('rest/admin/user/save').save;
res.remove = $resource('rest/admin/user/delete').save;
return res;
}]);
module.factory("AdminSettingsService", [
"$resource",
function ($resource) {
var res = $resource("rest/admin/settings/")
return res
},
])
module.factory('AdminSettingsService', ['$resource', function($resource) {
var res = $resource('rest/admin/settings/');
return res;
}]);
module.factory("AdminMetricsService", [
"$resource",
function ($resource) {
var res = $resource("rest/admin/metrics/")
return res
},
])
module.factory('AdminMetricsService', ['$resource', function($resource) {
var res = $resource('rest/admin/metrics/');
return res;
}]);
module.factory('ServerService', ['$resource', function($resource) {
var res = $resource('rest/server/get');
return res;
}]);
module.factory("ServerService", [
"$resource",
function ($resource) {
var res = $resource("rest/server/get")
return res
},
])

View File

@@ -1,7 +1,7 @@
$(function() {
var reg = $('#register-panel');
if (!reg) {
return;
}
$('#login-panel').height(reg.height());
});
$(function () {
var reg = $("#register-panel")
if (!reg) {
return
}
$("#login-panel").height(reg.height())
})

View File

@@ -1,31 +1,32 @@
{
"name": "CommaFeed",
"icons": [
{
"src": "app-icon-72.png",
"sizes": "72x72",
"type": "image/png",
"density": "1.5"
},
{
"src": "app-icon-114.png",
"sizes": "96x96",
"type": "image/png",
"density": "2.0"
},
{
"src": "app-icon-144.png",
"sizes": "144x144",
"type": "image/png",
"density": "3.0"
},
{
"src": "app-icon-192.png",
"sizes": "192x192",
"type": "image/png",
"density": "4.0"
}
],
"start_url": "/",
"display": "standalone"
"name": "CommaFeed",
"icons": [
{
"src": "app-icon-72.png",
"sizes": "72x72",
"type": "image/png",
"density": "1.5"
},
{
"src": "app-icon-114.png",
"sizes": "96x96",
"type": "image/png",
"density": "2.0"
},
{
"src": "app-icon-144.png",
"sizes": "144x144",
"type": "image/png",
"density": "3.0"
},
{
"src": "app-icon-192.png",
"sizes": "192x192",
"type": "image/png",
"density": "4.0"
}
],
"scope": ".",
"start_url": "./",
"display": "standalone"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -8,7 +8,6 @@
@import "components/help";
@import "components/loading-bar";
@import "components/readabilicons";
@import "components/zocial";
@import "mobile/mobile";

View File

@@ -1,4 +1,4 @@
/* admin */
.admin .users-table {
height: 400px;
}
height: 400px;
}

View File

@@ -1,271 +1,279 @@
.main-content {
margin-left: 250px;
padding-left: 15px;
margin-left: 250px;
padding-left: 15px;
}
.full-screen .main-content {
width: 100%;
margin-left: 0;
width: 100%;
margin-left: 0;
}
.entryList {
padding-top: 50px;
padding-top: 50px;
}
/* entry list*/
.entrylist-header {
border-bottom: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.entrylist-header h3 {
margin: 0;
line-height: 40px;
margin: 0;
line-height: 40px;
}
.entrylist-header a {
color: inherit;
color: inherit;
}
.expanded .entry-header,.expanded .entry-body-content {
padding-left: 25px;
padding-right: 25px;
.expanded .entry-header,
.expanded .entry-body-content {
padding-left: 25px;
padding-right: 25px;
}
.expanded .entry-header {
max-width: 650px;
max-width: 650px;
}
.full-screen .expanded .entry-header {
max-width: 100%;
max-width: 100%;
}
.rtl .entry-header,.rtl .entry-body-content,.rtl.entry-name {
direction: rtl;
.rtl .entry-header,
.rtl .entry-body-content,
.rtl.entry-name {
direction: rtl;
}
.rtl ul,.rtl ol {
padding: 0;
margin: 0 25px 10px 0px;
.rtl ul,
.rtl ol {
padding: 0;
margin: 0 25px 10px 0px;
}
#feed-accordion .entry {
border-bottom: 1px solid #CCCCCC;
border-bottom: 1px solid #cccccc;
}
#feed-accordion .no-entries {
text-align: center;
font-weight: bold;
margin-top: 80px;
text-align: center;
font-weight: bold;
margin-top: 80px;
}
#feed-accordion .entry-heading {
background-color: #ebebeb;
background-color: #ebebeb;
}
#feed-accordion .unread .entry-heading:hover {
background-color: #ebebeb;
background-color: #ebebeb;
}
#feed-accordion .unread .entry-heading {
background-color: #fff;
background-color: #fff;
}
#feed-accordion .current.closed .entry-heading {
background-color: #ffc;
background-color: #ffc;
}
#feed-accordion .entry-heading-link {
color: black;
height: 32px;
display: block;
cursor: pointer;
padding: 6px 0px;
color: black;
height: 32px;
display: block;
cursor: pointer;
padding: 6px 0px;
}
#feed-accordion .entry-heading .feed-name {
color: #555;
display: block;
overflow: hidden;
white-space: nowrap;
position: absolute;
width: 145px;
text-overflow: ellipsis;
color: #555;
display: block;
overflow: hidden;
white-space: nowrap;
position: absolute;
width: 145px;
text-overflow: ellipsis;
}
#feed-accordion .entry-heading .entry-name {
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 150px;
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 150px;
}
#feed-accordion .unread .entry-heading .entry-name {
font-weight: bold;
font-weight: bold;
}
#feed-accordion .entry-heading .shrink {
margin-left: 150px;
margin-left: 150px;
}
#feed-accordion .entry-heading .entry-date {
display: block;
position: absolute;
right: 45px;
display: block;
position: absolute;
right: 45px;
}
#feed-accordion a.entry-heading-link:hover {
text-decoration: none;
text-decoration: none;
}
#feed-accordion .entry-external-link {
position: absolute;
right: 25px;
margin-top: -25px;
color: black;
position: absolute;
right: 25px;
margin-top: -25px;
color: black;
}
#feed-accordion .entry-external-link:hover {
text-decoration: none;
text-decoration: none;
}
#feed-accordion .entry-body .entry-title {
margin-top: 5px;
margin-bottom: 10px;
font-size: 130%;
font-weight: bold;
margin-top: 5px;
margin-bottom: 10px;
font-size: 130%;
font-weight: bold;
}
#feed-accordion .entry-body .entry-subtitle {
display: block;
font-size: 14px;
font-weight: normal;
display: block;
font-size: 14px;
font-weight: normal;
}
#feed-accordion .entry-body-content {
max-width: 650px;
color: black;
padding-bottom: 10px;
#feed-accordion .entry-body-content {
max-width: 650px;
color: black;
padding-bottom: 10px;
}
.full-screen #feed-accordion .entry-body-content {
max-width: 100%;
.full-screen #feed-accordion .entry-body-content {
max-width: 100%;
}
#feed-accordion .entry-enclosure {
clear: both;
padding-top: 10px;
clear: both;
padding-top: 10px;
}
#feed-accordion .entry-media-description {
padding-top: 10px;
}
#feed-accordion .entry-buttons {
clear: both;
background-color: #fafafa;
padding: 3px 0px;
border-top: 1px solid #ebebeb;
clear: both;
background-color: #fafafa;
padding: 3px 0px;
border-top: 1px solid #ebebeb;
}
#feed-accordion .entry-buttons .checkbox.inline {
padding-top: 0px;
margin-left: 5px;
padding-top: 0px;
margin-left: 5px;
}
#feed-accordion .entry-buttons .keep-unread label {
display: inline;
font-weight: inherit;
display: inline;
font-weight: inherit;
}
#feed-accordion .share-buttons a {
color: #333333;
padding-left: 5px;
color: #333333;
padding-left: 5px;
}
#feed-accordion .share-buttons a:hover {
text-decoration: none;
text-decoration: none;
}
#feed-accordion .tags-panel {
margin-left: 30px;
margin-left: 30px;
}
#feed-accordion .tags-panel .label{
margin-left: 5px;
#feed-accordion .tags-panel .label {
margin-left: 5px;
}
.select2-container-multi .select2-choices .select2-search-field input {
padding: 2px
padding: 2px;
}
#feed-accordion .tag-input {
margin: 0 0 0 5px;
padding: 0;
width: 200px;
margin: 0 0 0 5px;
padding: 0;
width: 200px;
}
#feed-accordion .entry-buttons label {
margin-bottom: 0px;
font-size: 12px;
margin-bottom: 0px;
font-size: 12px;
}
#feed-accordion a.mark-up-to {
color: #333333;
position: absolute;
right: 30px;
color: #333333;
position: absolute;
right: 30px;
}
#feed-accordion a.mark-up-to:hover {
text-decoration: none;
cursor: pointer;
text-decoration: none;
cursor: pointer;
}
#feed-accordion .star {
text-decoration: none;
padding: 0px 5px;
text-decoration: none;
padding: 0px 5px;
}
#feed-accordion .icon-star-yellow {
color: gold;
text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
color: gold;
text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
}
#feed-accordion .icon-star-empty {
color: #555;
color: #555;
}
#feed-accordion.expanded .entry {
margin-bottom: 40px;
border: 1px solid #ddd;
box-shadow: 0 0 4px #e3e5eb;
margin-bottom: 40px;
border: 1px solid #ddd;
box-shadow: 0 0 4px #e3e5eb;
}
#feed-accordion.expanded .current {
border-left: 1px solid rgb(77, 144, 240);
border-left: 1px solid rgb(77, 144, 240);
}
#feed-accordion .current.entry-font-size-0 {
font-size: 14px;
font-size: 14px;
}
#feed-accordion .current.entry-font-size-1 {
font-size: 15px;
font-size: 15px;
}
#feed-accordion .current.entry-font-size-2 {
font-size: 16px;
font-size: 16px;
}
#feed-accordion .current.entry-font-size-3 {
font-size: 17px;
font-size: 17px;
}
#feed-accordion .current.entry-font-size-4 {
font-size: 18px;
font-size: 18px;
}
#feed-accordion .current.entry-font-size-5 {
font-size: 19px;
font-size: 19px;
}
#feed-accordion .highlight-search {
background-color: rgba(255, 255, 140, 0.5);
color: #333;
}
background-color: rgba(255, 255, 140, 0.5);
color: #333;
}

View File

@@ -1,23 +1,22 @@
.help {
font-size: 85%;
line-height: 15px;
font-size: 85%;
line-height: 15px;
}
.help .bookmarklet-select {
margin: 0;
padding: 0;
height: auto;
margin: 0;
padding: 0;
height: auto;
}
.help .about-module {
margin-bottom: 40px;
margin-bottom: 40px;
}
.donate-action {
margin-top:20px;
margin-top: 20px;
}
.donate-image {
padding-bottom:10px;
padding-right:16px;
padding-bottom: 10px;
padding-right: 16px;
}

View File

@@ -1,15 +1,15 @@
#loading-bar .bar {
background: #2c3e50;
height: 101px;
top: -100px;
position: fixed;
background: #2c3e50;
height: 101px;
top: -100px;
position: fixed;
}
#loading-bar .peg {
box-shadow: 0 0 10px #2c3e50, 0 0 5px #2c3e50;
box-shadow: 0 0 10px #2c3e50, 0 0 5px #2c3e50;
}
#loading-bar-spinner .spinner-icon {
border-top-color: #2c3e50;
border-left-color: #2c3e50;
border-top-color: #2c3e50;
border-left-color: #2c3e50;
}

View File

@@ -1,159 +1,161 @@
/* feed search dialog */
.feed-search-dialog .modal-body {
overflow: hidden;
overflow: hidden;
}
.feed-search-dialog .filter-input {
width: 90%;
width: 90%;
}
.feed-search-dialog .feed-link {
font-size: large;
font-size: large;
}
.feed-search-dialog a:hover {
text-decoration: none;
text-decoration: none;
}
.feed-search-dialog .focus a {
color: black;
color: black;
}
/* tree*/
.sidebar-nav-fixed {
margin-top: 10px;
width: 250px;
position: fixed;
top: 0;
bottom: 0;
overflow: hidden;
margin-top: 10px;
width: 250px;
position: fixed;
top: 0;
bottom: 0;
overflow: hidden;
}
.sidebar-nav-fixed:hover {
overflow-y: auto;
overflow-y: auto;
}
.sidebar-nav-fixed .ui-resizable-e {
width: 5px;
right: 0;
width: 5px;
right: 0;
}
.full-screen .left-menu {
display: none;
display: none;
}
.css-treeview {
margin-top: 15px;
margin-bottom: 30px;
font-family: inherit;
font-size: 13px;
white-space: nowrap;
margin-top: 15px;
margin-bottom: 30px;
font-family: inherit;
font-size: 13px;
white-space: nowrap;
}
.css-treeview ul {
list-style: none;
margin-left: 0px;
padding: 0;
list-style: none;
margin-left: 0px;
padding: 0;
}
.css-treeview li {
line-height: 20px;
line-height: 20px;
}
.css-treeview .fldr {
cursor: pointer;
display: inline-block;
width: 14px;
height: 14px;
line-height: 14px;
vertical-align: text-top;
margin-top: 1px;
cursor: pointer;
display: inline-block;
width: 14px;
height: 14px;
line-height: 14px;
vertical-align: text-top;
margin-top: 1px;
}
.css-treeview .error {
color: red;
font-style: italic;
color: red;
font-style: italic;
}
.css-treeview label {
overflow: hidden;
text-overflow: ellipsis;
display: block;
margin: 3px 0px 3px;
overflow: hidden;
text-overflow: ellipsis;
display: block;
margin: 3px 0px 3px;
}
.css-treeview label,.css-treeview a,.css-treeview label::before {
font-family: inherit;
font-size: 12px;
white-space: nowrap;
.css-treeview label,
.css-treeview a,
.css-treeview label::before {
font-family: inherit;
font-size: 12px;
white-space: nowrap;
}
.css-treeview .selected {
color: #d14836;
color: #d14836;
}
.css-treeview .unread {
font-weight: bold;
font-weight: bold;
}
.css-treeview .unread-counter {
color: #666;
font-size: 11px;
color: #666;
font-size: 11px;
}
.css-treeview .unread ~ .unread-counter::before {
content: '(';
content: "(";
}
.css-treeview .unread ~ .unread-counter::after {
content: ')';
content: ")";
}
.css-treeview a {
cursor: pointer;
color: black;
display: block;
overflow: hidden;
text-overflow: ellipsis;
cursor: pointer;
color: black;
display: block;
overflow: hidden;
text-overflow: ellipsis;
}
.css-treeview a:hover {
text-decoration: none;
text-decoration: none;
}
.css-treeview li .tree-item:hover {
background-color: #EBEBEB;
text-decoration: none;
background-color: #ebebeb;
text-decoration: none;
}
.css-treeview .config {
display: none;
display: none;
}
.css-treeview .tree-item:hover .config {
display: block;
padding-top: 3px;
margin-right: 5px;
width: 16px;
height: 16px;
display: block;
padding-top: 3px;
margin-right: 5px;
width: 16px;
height: 16px;
}
.css-treeview .indent1 {
padding-left: 16px;
padding-left: 16px;
}
.css-treeview .indent2 {
padding-left: 32px;
padding-left: 32px;
}
.css-treeview .indent3 {
padding-left: 48px;
padding-left: 48px;
}
.css-treeview .indent4 {
padding-left: 64px;
padding-left: 64px;
}
.css-treeview .indent5 {
padding-left: 80px;
}
padding-left: 80px;
}

View File

@@ -1,16 +1,16 @@
.toolbar {
padding-top: 10px;
padding-bottom: 10px;
width: 100%;
z-index: 10;
position: fixed;
background-color: #FFF;
padding-top: 10px;
padding-bottom: 10px;
width: 100%;
z-index: 10;
position: fixed;
background-color: #fff;
}
.toolbar .donate {
display: inline-block;
display: inline-block;
}
.toolbar .keywords {
width: 244px;
}
width: 244px;
}

View File

@@ -1,16 +0,0 @@
@font-face {
font-family: 'readabilicons';
src: url('../font/readabilicons-regular.eot'); /* IE9 Compat Modes */
src: url('../font/readabilicons-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('../font/readabilicons-regular.woff') format('woff'), /* Modern Browsers */
url('../font/readabilicons-regular.ttf') format('truetype'), /* Safari, Android, iOS */
url('../font/readabilicons-regular.svg#readabiliconsregular') format('svg'); /* Legacy iOS */
font-style: normal;
font-weight: 400;
}
.icon-couch::before {
content: "\e018";
font-family: "readabilicons";
-webkit-font-smoothing: antialiased;
}

View File

@@ -1,148 +1,153 @@
a:focus {
outline: none;
text-decoration: none;
outline: none;
text-decoration: none;
}
.container-full {
width: 100%;
margin: 0 auto;
padding-right: 20px;
padding-left: 20px;
width: 100%;
margin: 0 auto;
padding-right: 20px;
padding-left: 20px;
}
body img {
max-width: 100%;
height: auto;
max-width: 100%;
height: auto;
}
body .modal {
display: block;
display: block;
}
body .modal-backdrop {
opacity: 0.5;
opacity: 0.5;
}
label {
font-weight: inherit;
font-weight: inherit;
}
.pointer {
cursor: pointer;
cursor: pointer;
}
.nolink {
color: inherit;
color: inherit;
}
.nolink:hover {
text-decoration: none;
color: inherit;
text-decoration: none;
color: inherit;
}
.clear-both {
clear: both;
clear: both;
}
.block {
display: block;
display: block;
}
.pre-wrap {
white-space: pre-wrap;
white-space: pre-wrap;
}
.form-horizontal .control-group {
margin-bottom: 10px;
margin-bottom: 10px;
}
.bidi-embed {
unicode-bidi: embed;
unicode-bidi: embed;
}
.bs-fb ul {
margin-bottom: 0px;
margin-bottom: 0px;
}
.horizontal-align {
padding-top: 5px;
line-height: 20px
padding-top: 5px;
line-height: 20px;
}
.welcome .container-fluid {
margin-right: auto;
margin-left: auto;
max-width: 950px;
margin-right: auto;
margin-left: auto;
max-width: 950px;
}
.welcome .header {
margin: 20px 0 20px 0;
margin: 20px 0 20px 0;
}
.welcome h3 {
margin-top: 0;
margin-top: 0;
}
.welcome .tagline {
color: #B3B3B3;
font-size: 28px;
padding-top: 110px;
color: #b3b3b3;
font-size: 28px;
padding-top: 110px;
}
.welcome .preview {
margin-top: 20px;
margin-bottom: 20px;
margin-top: 20px;
margin-bottom: 20px;
}
.welcome .demo {
font-size: 24px;
color: #B3B3B3;
display: block;
font-size: 24px;
color: #b3b3b3;
display: block;
}
.main .spinner {
display: inline-block;
margin-left: 11px;
top: -4px;
display: inline-block;
margin-left: 11px;
top: -4px;
}
.icon {
width: 14px;
height: 14px;
display: block;
width: 14px;
height: 14px;
display: block;
}
.main .dropdown-menu a {
cursor: pointer;
cursor: pointer;
}
.favicon {
width: 16px;
height: 16px;
width: 16px;
height: 16px;
}
blockquote p {
font-size: 14px;
font-size: 14px;
}
.form-group {
margin-bottom: 10px;
margin-bottom: 10px;
}
.btn, .btn-large, .btn-small, .btn-mini {
border-top-left-radius: 2px;
border-top-right-radius: 2px;
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
.btn,
.btn-large,
.btn-small,
.btn-mini {
border-top-left-radius: 2px;
border-top-right-radius: 2px;
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
.btn-group>.btn:first-child, .btn-group>.btn-large:first-child {
border-top-left-radius: 2px;
border-bottom-left-radius: 2px;
.btn-group > .btn:first-child,
.btn-group > .btn-large:first-child {
border-top-left-radius: 2px;
border-bottom-left-radius: 2px;
}
.btn-group>.btn:last-child, .btn-group>.btn-large:last-child, .btn-group>.dropdown-toggle
{
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
}
.btn-group > .btn:last-child,
.btn-group > .btn-large:last-child,
.btn-group > .dropdown-toggle {
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
}

View File

@@ -1,21 +1,21 @@
::-webkit-scrollbar {
height: 8px;
width: 8px;
height: 8px;
width: 8px;
}
::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
background: rgba(0, 0, 0, 0.1);
}
::-webkit-scrollbar-track:hover {
background-color: rgba(0, 0, 0, .05);
box-shadow: inset 1px 0 0 rgba(0, 0, 0, .1)
background-color: rgba(0, 0, 0, 0.05);
box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.1);
}
::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.2);
background: rgba(0, 0, 0, 0.2);
}
::-webkit-scrollbar-thumb:hover {
background: rgba(0, 0, 0, 0.5);
}
background: rgba(0, 0, 0, 0.5);
}

Some files were not shown because too many files have changed in this diff Show More