Compare commits
145 commits
v1.2.0-doc
...
master
Author | SHA1 | Date | |
---|---|---|---|
36bef95804 | |||
49cc36a5c8 | |||
|
776789da6c | ||
|
9665f098db | ||
|
b775ab99eb | ||
|
00d3149360 | ||
|
623395064f | ||
|
9ac51e0523 | ||
|
89e756819d | ||
|
0bb2dede4d | ||
|
65263d4ca0 | ||
|
161cfc3187 | ||
|
72bbd8d046 | ||
|
92451f15ea | ||
|
c1a7ede3bc | ||
|
1aa4b42c0c | ||
|
54132c7218 | ||
|
b439cf27d7 | ||
|
bbdacffc7d | ||
|
72e11c425e | ||
|
34e9dd31e4 | ||
|
4aeb468fe1 | ||
|
e6245524a4 | ||
|
17e4e5570e | ||
|
ad2ff5236b | ||
|
67186f6910 | ||
|
25f1ff3188 | ||
|
6b7bf70ec1 | ||
|
8dc9b50d38 | ||
|
cc053c88a1 | ||
|
d01570a451 | ||
|
92166b921e | ||
|
03a24c883b | ||
|
f938e60c2e | ||
|
7532af8a80 | ||
|
c20c0b4ff9 | ||
|
1d79aa4c21 | ||
|
39f022d2dd | ||
|
e994eb074a | ||
|
f1cfc0c08c | ||
|
6d1a7c7e09 | ||
|
9fa47ecfd5 | ||
|
0baffcc5cf | ||
|
352095a6d2 | ||
|
6c9aa05cbb | ||
|
7210e8e1e1 | ||
|
8eab76ed20 | ||
|
780db2ae07 | ||
|
0c080a2237 | ||
|
fcb64f23eb | ||
|
f497b7b87b | ||
|
bdc617ffef | ||
|
e05dc0b173 | ||
|
a6019319a2 | ||
|
71f67d506e | ||
|
b67c9b3415 | ||
|
e059544e90 | ||
|
3a8494417e | ||
|
d33ff8f984 | ||
|
007aea9b10 | ||
|
52835db8db | ||
|
fb937319db | ||
|
5e45579ef1 | ||
|
42f1992c97 | ||
|
655b982f9d | ||
|
1b0c92bb31 | ||
|
e2d8082c1f | ||
|
23617b21bc | ||
|
41c273b962 | ||
|
60b094d5fa | ||
|
01a3860d73 | ||
|
999998b60b | ||
|
474efd25f3 | ||
|
bc694dc6a0 | ||
|
8330a1ce98 | ||
|
e10db31a00 | ||
|
d50341259d | ||
|
432b8d307a | ||
|
5d051c1b0e | ||
|
319d3d6138 | ||
|
297cf418c0 | ||
|
ac65f5ee70 | ||
|
edca0cc8cc | ||
|
9773669684 | ||
|
f632bf2de5 | ||
|
e0dc2622c2 | ||
|
39da838ebd | ||
|
d82f8e8011 | ||
|
4e91eeb3ab | ||
|
01a6fb914f | ||
|
339e2eee36 | ||
|
2c4ce6cb50 | ||
|
9947a5f033 | ||
|
cb491341df | ||
|
6d1928da70 | ||
|
331465857c | ||
|
e9c09311fe | ||
|
681f4c3c83 | ||
|
75b705ee2c | ||
|
08ee5eaf39 | ||
|
078237c7ec | ||
|
05d583f17f | ||
|
fda6e3d811 | ||
|
ce709fec80 | ||
|
5d041ff6f8 | ||
|
bd28332252 | ||
|
c9279b8f1d | ||
|
da3916bb99 | ||
|
ee86c8cdd5 | ||
|
c68179d83e | ||
|
1a08ae769b | ||
|
95a28acb6a | ||
|
b2d723cb62 | ||
|
dc515eab7a | ||
|
0a9f5a9f30 | ||
|
2586db7a6f | ||
|
23f9765b3a | ||
|
a1d9e971e3 | ||
|
bc626fa918 | ||
|
a9a9886450 | ||
|
6271448248 | ||
|
2fdfa5e232 | ||
|
7eb917f115 | ||
|
a880398ee3 | ||
|
b3802a8994 | ||
|
d8461432be | ||
|
6e6e26ad26 | ||
|
fbca74ccec | ||
|
fe2e50b3b6 | ||
|
ac67c0fae1 | ||
|
7ebcd0aca1 | ||
|
4be3b056c3 | ||
|
9343b9a115 | ||
|
fe81cb784e | ||
|
c242062cd9 | ||
|
c910225e7d | ||
|
352182ae10 | ||
|
c3c863b446 | ||
|
e8a2557c4a | ||
|
5568943994 | ||
|
30f64e386d | ||
|
f40a680877 | ||
|
c703df1deb | ||
|
f58b17f585 | ||
|
1922a1a697 |
3
.gitignore
vendored
|
@ -1,2 +1 @@
|
||||||
*.txt
|
*~
|
||||||
*.html
|
|
||||||
|
|
11
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
image: php:7.0
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- bash ci/docker_install.sh > /dev/null
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- test
|
||||||
|
|
||||||
|
test:
|
||||||
|
script:
|
||||||
|
- phpunit tests/
|
191
CHANGELOG.md
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
- [S] = stable release
|
||||||
|
- [B] = beta release
|
||||||
|
- [D] = development release
|
||||||
|
|
||||||
|
|
||||||
|
- [S] release are always compared to the previous [S] release.
|
||||||
|
|
||||||
|
## Version 1.5.0 (2016-08-03) [S]
|
||||||
|
|
||||||
|
- **[FEATURE]** Ability to only show post excerpts on overview pages
|
||||||
|
- **[FIX]** Fixed twitter username not specified in connfig.yaml
|
||||||
|
- **[FIX]** Fixed wrong OpenGraph meta tags
|
||||||
|
- **[CODE]** Further improved code style
|
||||||
|
- **[CODE]** Added unit tests for Config.php and ArticleGenerator.php
|
||||||
|
- **[NOTE]** If you have own language file, please update them. See also the upgrade guide
|
||||||
|
|
||||||
|
## Version 1.4.4 (2016-06-03) [S]
|
||||||
|
- **[FIX]** Error when trying to create a feed
|
||||||
|
|
||||||
|
## Version 1.4.3 (2016-05-21) [S]
|
||||||
|
- **[FIX]** Missing space in drawer between "Blogs on" and blogname
|
||||||
|
- **[FIX]** Background layer was not removed if drawer was closed
|
||||||
|
- **[FEATURE]** nextDESIGN theme added to delivered themes
|
||||||
|
- **[NOTE]** The update script to 1.4.3 works with 1.4.0, 1.4.1 and 1.4.2
|
||||||
|
|
||||||
|
## Version 1.4.2 (2016-05-18) [S]
|
||||||
|
- [FIX]: Password verification not implemented in RCC login page
|
||||||
|
|
||||||
|
## Version 1.4.1 (2016-05-18) [S]
|
||||||
|
- Switch to HTTP Basic Auth for the RCC API
|
||||||
|
- Store password as hash
|
||||||
|
- Require SSL for using the RCC and the RCC API
|
||||||
|
- [FIX] Drawer "Go back" does not work
|
||||||
|
- [FIX] Missing nodejs dependencies
|
||||||
|
- [FIX] Disqus not completly migrated to new config
|
||||||
|
|
||||||
|
## Version 1.4.0 (2016-05-07) [S]
|
||||||
|
|
||||||
|
- Fix: Feeds contain no text
|
||||||
|
- Switch to YAML as config language
|
||||||
|
- Scripts for
|
||||||
|
- Switching from config.php to config.yaml
|
||||||
|
- Initializing RCC
|
||||||
|
- Initializing Rangitaki
|
||||||
|
- Rangitaki API
|
||||||
|
- Switch from JavaScript to CoffeeScript
|
||||||
|
- Switch from CSS to SASS
|
||||||
|
- Building and minimizing with Gulp
|
||||||
|
- Open links in articles in a new tab
|
||||||
|
- Better code style: PSR-2
|
||||||
|
|
||||||
|
## Version 1.4.0-beta (2016-04-27) [B]
|
||||||
|
|
||||||
|
- Fix: Feeds contain no text
|
||||||
|
- Switch to YAML as config language
|
||||||
|
- Scripts for
|
||||||
|
- Switching from config.php to config.yaml
|
||||||
|
- Initializing RCC
|
||||||
|
- Initializing Rangitaki
|
||||||
|
- Rangitaki API
|
||||||
|
- Switch from JavaScript to CoffeeScript
|
||||||
|
- Switch from CSS to SASS
|
||||||
|
- Building and minimizing with Gulp
|
||||||
|
- Open links in articles in a new tab
|
||||||
|
- Better code style: PSR-2
|
||||||
|
|
||||||
|
|
||||||
|
## Version 1.3.0 (2016-02-16) [S]
|
||||||
|
|
||||||
|
- Respecting do-not-track
|
||||||
|
- Atom feed
|
||||||
|
- Title fix
|
||||||
|
- Switch to composer
|
||||||
|
|
||||||
|
## Version 1.2.1 (2016-01-11) [S]
|
||||||
|
|
||||||
|
- Support for PHP 7
|
||||||
|
|
||||||
|
## Version 1.2.0 (2015-12-24) [S]
|
||||||
|
|
||||||
|
- Pagination: Split your blog posts over several page
|
||||||
|
- JavaScript Extension Support
|
||||||
|
- RCC: Write Posts
|
||||||
|
- RCC: Delete Posts
|
||||||
|
- RCC: Upload Media
|
||||||
|
- RCC: Edit Posts
|
||||||
|
|
||||||
|
## Version 1.1.90 (2015-12-21) [B]
|
||||||
|
|
||||||
|
- BUGFIX: ArticleGenerator error when no tags set
|
||||||
|
- Pagination: Localized strings
|
||||||
|
|
||||||
|
## Version 1.1.2 (2015-12-20) [D]
|
||||||
|
|
||||||
|
- Pagination
|
||||||
|
- Code style imporvements
|
||||||
|
|
||||||
|
## Version 1.1.1 (2015-12-07) [D]
|
||||||
|
|
||||||
|
- BUGFIX: RCC: new post: post title was the blog title
|
||||||
|
- BUGFIX: RCC: new post filename just the date without the time.
|
||||||
|
- Code highlight css themable
|
||||||
|
- JavaScript extension support. Just put your extension into ./extensions/
|
||||||
|
- Link in RCC to go directly to the blog
|
||||||
|
- RCC: Delete posts
|
||||||
|
- RCC: Edit posts
|
||||||
|
|
||||||
|
## Version 1.1.0 (2015-11-22) [D]
|
||||||
|
|
||||||
|
- RCC: Write blog posts
|
||||||
|
- RCC: Media Upload
|
||||||
|
- Drawer: Key listener ('ESC' to close, 'm; to open)
|
||||||
|
- Drawer: Highlight Blogs when hovering
|
||||||
|
- Drawer: 'X' button
|
||||||
|
- Metatags / Title based on subblog and / or article
|
||||||
|
- Update script
|
||||||
|
|
||||||
|
## Version 1.0.0 (2015-08-22) [S]
|
||||||
|
|
||||||
|
- Post writing in Markdown with a few keywords for the title, tags, date and the author (all optional)
|
||||||
|
- Multiple blogs
|
||||||
|
- A Subpages for each article with a comment box (Disqus; can be disabled)
|
||||||
|
- Share buttons (FAB; can be disabled)
|
||||||
|
- Disqus integration (can be disabled)
|
||||||
|
- Fast and easy configuration
|
||||||
|
- Google Analytics (optional)
|
||||||
|
- Twitter and OpenGraph meta tags
|
||||||
|
- Different themes
|
||||||
|
- Easy localization (just 3 (!) strings)
|
||||||
|
- Custom footer
|
||||||
|
- Navigation drawer (can be disabled)
|
||||||
|
- Tags
|
||||||
|
- Set author and date
|
||||||
|
- Mobile-first
|
||||||
|
- Rangitaki Control Center (aka RCC; optional, Read the RCC Documentation)
|
||||||
|
- Online post upload
|
||||||
|
|
||||||
|
## Version 0.9.0 (2015-07-25) [B]
|
||||||
|
|
||||||
|
- BUGFIX: 'Blogs of {BLOG NAME}' always shown (even if there are no other blogs)
|
||||||
|
- pictures in articles not centred
|
||||||
|
- long links longer than article card (especially a problem on mobile devices)
|
||||||
|
- Localization strings are now grouped in one array
|
||||||
|
- Better code (in some parts)
|
||||||
|
|
||||||
|
## Version 0.8.0 (2015-07-14) [B]
|
||||||
|
|
||||||
|
- Bugfixes and other improvements
|
||||||
|
|
||||||
|
## Version 0.7.0 (2015-07-05) [D]
|
||||||
|
|
||||||
|
## Version 0.6.0 (2015-07-03) [D]
|
||||||
|
|
||||||
|
- Localization support. More information will follow soon
|
||||||
|
- Theme support. More information will follow (hopefully) soon
|
||||||
|
- Various improvements (Check the commits for more)
|
||||||
|
|
||||||
|
## Version 0.5.0 (2015-06-16) [D]
|
||||||
|
|
||||||
|
- Improvements to the Rangitaki Control Center (rcc)
|
||||||
|
- Material Design (Blog and rcc)
|
||||||
|
|
||||||
|
## Version 0.4 (2015-06-14) [D]
|
||||||
|
|
||||||
|
- Multiple Blogs
|
||||||
|
- Online post upload (optional)
|
||||||
|
- Tags
|
||||||
|
- Author
|
||||||
|
|
||||||
|
## Version 0.3 (2015-06-11) [D]
|
||||||
|
|
||||||
|
- Portation of all main features of Version 0.2.2
|
||||||
|
- Code highlighting
|
||||||
|
|
||||||
|
*The first release with the name Rangitaki.
|
||||||
|
The following releases are of pBlog.*
|
||||||
|
|
||||||
|
## Version 0.2.2 (2015-05-13) [S]
|
||||||
|
|
||||||
|
- Links are now underlined, when you hover over them
|
||||||
|
- Simplified it to add the disqus comments
|
||||||
|
- Added and configuration option for setting a favicon
|
||||||
|
- Added the option to use Google Analytics
|
||||||
|
|
||||||
|
## Version 0.2.1 / pBlog 2.1 (2015-03-29) [S]
|
||||||
|
|
||||||
|
- Fix problems when creating article links
|
||||||
|
|
||||||
|
TODO: previous releases
|
22
LICENSE
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 - 2016 Marcel Kapfer
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
92
README.md
|
@ -1,5 +1,91 @@
|
||||||
# Rangitaki Documentation Files
|
# Rangitaki PHP blogging engine
|
||||||
|
|
||||||
These are the Markdown files of the Rangitaki Documentation.
|
[![Join the chat at https://gitter.im/rangitaki/rangitaki](https://badges.gitter.im/canax/view.svg)](https://gitter.im/rangitaki/view?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
|
|
||||||
You can convert them to html code using my PHP script [md2html](https://github.com/mmk2410/php-scripts/tree/master/md2html)
|
Rangitaki is a simple to use and easy to configure blogging engine, written in PHP and it has absolutely no database dependencies.
|
||||||
|
|
||||||
|
Tested with PHP version 5.5 until 7.0.
|
||||||
|
|
||||||
|
![Rangitaki](https://gitlab.com/mmk2410/rangitaki/raw/master/feature-graphic.png)
|
||||||
|
|
||||||
|
[Wiki](https://gitlab.com/mmk2410/rangitaki/wikis/home)
|
||||||
|
|
||||||
|
[About](https://gitlab.com/mmk2410/rangitaki/wikis/about)
|
||||||
|
|
||||||
|
[Documentation](https://gitlab.com/mmk2410/rangitaki/wikis/docs)
|
||||||
|
|
||||||
|
[Quick Starting Guide](https://gitlab.com/mmk2410/rangitaki/wikis/docs/quickstart)
|
||||||
|
|
||||||
|
## What is it?
|
||||||
|
|
||||||
|
My goal for Rangitaki was (and still is) to create a blogging engine without database dependencies (so you don't have to create database and tables and all that stuff) which is extremely easy and fast to setup and to learn. Rangitaki doesn't require any knowledge concerning PHP, JavaScript, HTML or CSS. You just need to know, how to upload something to your web server. There is also no need to compile anything, you just have to fill out twelve setting properties and then you can start writing your articles.
|
||||||
|
|
||||||
|
## So, what can it do?
|
||||||
|
|
||||||
|
- Post writing in Markdown with a few keywords for the title, tags, date and the author (all optional)
|
||||||
|
- Multiple blogs
|
||||||
|
- A Subpages for each article with a comment box (Disqus; can be disabled)
|
||||||
|
- Share buttons (FAB; can be disabled)
|
||||||
|
- Disqus integration (can be disabled)
|
||||||
|
- Fast and easy configuration
|
||||||
|
- Google Analytics (optional)
|
||||||
|
- Twitter and OpenGraph meta tags
|
||||||
|
- Different themes
|
||||||
|
- Easy localization (just a few strings)
|
||||||
|
- Custom footer
|
||||||
|
- Navigation drawer (can be disabled)
|
||||||
|
- Tags
|
||||||
|
- Set author and date
|
||||||
|
- Mobile-first
|
||||||
|
- JavaScript Extension Support
|
||||||
|
- Pagination support
|
||||||
|
- Atom feed generation
|
||||||
|
- Rangitaki Control Center (RCC; optional, read the [RCC Documentation](https://gitlab.com/mmk2410/rangitaki/wikis/docs/rcc)
|
||||||
|
- Have a look under 'What is that RCC?' in this readme
|
||||||
|
|
||||||
|
## Did you say 'themes'?
|
||||||
|
|
||||||
|
Yes. Rangitaki has a theme support which makes it easy to customize your blog concerning design.
|
||||||
|
|
||||||
|
[Read the theme guide](https://gitlab.com/mmk2410/rangitaki/wikis/docs/themes)
|
||||||
|
|
||||||
|
## What is that RCC?
|
||||||
|
|
||||||
|
**This is disabled by default. Do not enable it without carefully reading the RCC documentation.**
|
||||||
|
|
||||||
|
It has the following features:
|
||||||
|
- Post upload
|
||||||
|
- Post deleting
|
||||||
|
- Post editing
|
||||||
|
- Media upload
|
||||||
|
- Atom feed generation
|
||||||
|
|
||||||
|
[Read the RCC documentation](https://gitlab.com/mmk2410/rangitaki/wikis/docs/rcc)
|
||||||
|
|
||||||
|
## Used Libraries
|
||||||
|
|
||||||
|
- For converting the Markdown blog articles into HTML code Rangitaki uses [Parsedown](http://parsedown.org).
|
||||||
|
- For creating the atom feeds Rangitaki uses [picoFeed](https://github.com/fguillot/picoFeed)
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
## Issues, Requests, etc.
|
||||||
|
|
||||||
|
For bug reports, feature requests and all other questions or recommendations feel free to create an issue here at [GitLab](https://gitlab.com/mmk2410/rangitaki/issues).
|
||||||
|
|
||||||
|
## Code
|
||||||
|
|
||||||
|
1. Fork it
|
||||||
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
||||||
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
||||||
|
4. Push to the branch (`git push origin my-new-feature`)
|
||||||
|
5. Create new merge request
|
||||||
|
|
||||||
|
Read also the [contributing documentation](https://gitlab.com/mmk2410/rangitaki/wikis/docs/contribute)
|
||||||
|
|
||||||
|
## Social
|
||||||
|
|
||||||
|
You can follow me on Twitter or subscribe my blog to receive news about Rangitaki.
|
||||||
|
|
||||||
|
- [Twitter @mmk2410](https://twitter.com/mmk2410)
|
||||||
|
- [Blog mmk2410.org](https://mmk2410.org/), you can view the current posts about Rangitaki on [this page](https://mmk2410.org/tag/rangitaki/).
|
||||||
|
|
9
articles/example/2015-07-24-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 1
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/example/2015-07-25-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 2
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/example/2015-07-26-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 3
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/example/2015-07-27-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 4
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/example/2015-07-28-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 5
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/main/2015-07-24-example.md
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 1
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/main/2015-07-25-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 2
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/main/2015-07-26-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 3
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/main/2015-07-27-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 4
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
9
articles/main/2015-07-28-example.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: The Rangitaki logo 5
|
||||||
|
%DATE: 24 July 2015
|
||||||
|
%TAGS: design, artwork, logo
|
||||||
|
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
67
bin/config.php
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
<?php
|
||||||
|
// Marcel Kapfer (mmk2410)
|
||||||
|
// Script for moving from config.php to config.yaml
|
||||||
|
// License: MIT
|
||||||
|
|
||||||
|
require 'res/php/Config.php';
|
||||||
|
|
||||||
|
require 'config.php';
|
||||||
|
|
||||||
|
use mmk2410\rbe\config\Config as Config;
|
||||||
|
|
||||||
|
if ($bloghome == "yes") {
|
||||||
|
$bloghome = "on";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($blogintro == "yes") {
|
||||||
|
$blogintro = "on";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($sharefab == "yes") {
|
||||||
|
$sharefab = "on";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($rcc == "yes") {
|
||||||
|
$rcc = "on";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($nav_drawer == "yes") {
|
||||||
|
$nav_drawer = "on";
|
||||||
|
}
|
||||||
|
|
||||||
|
$yaml = array(
|
||||||
|
"blog" => array(
|
||||||
|
"title" => $blogtitle,
|
||||||
|
"author" => $blogauthor,
|
||||||
|
"description" => $blogdescription,
|
||||||
|
"home" => $bloghome,
|
||||||
|
"homeurl" => $bloghomeurl,
|
||||||
|
"homename" => $bloghomename,
|
||||||
|
"mainname" => $blogmainname,
|
||||||
|
"intro" => $blogintro,
|
||||||
|
"disqus" => $blogdisqus,
|
||||||
|
"analytics" => $bloganalytics,
|
||||||
|
"footer" => $blogfooter,
|
||||||
|
"url" => $blogurl
|
||||||
|
),
|
||||||
|
"design" => array(
|
||||||
|
"fab" => $sharefab,
|
||||||
|
"drawer" => $nav_drawer,
|
||||||
|
"theme" => $theme,
|
||||||
|
"pagination" => $pagination,
|
||||||
|
"favicon" => $favicon,
|
||||||
|
),
|
||||||
|
"rcc" => array(
|
||||||
|
"rcc" => "off",
|
||||||
|
"api" => "off",
|
||||||
|
),
|
||||||
|
"language" => $language,
|
||||||
|
);
|
||||||
|
|
||||||
|
$config = new Config('config.yaml', 'vendor/autoload.php');
|
||||||
|
|
||||||
|
if ($config->writeConfig($yaml)) {
|
||||||
|
echo "YAML config saved.\nYou can delete the config.php file\n";
|
||||||
|
} else {
|
||||||
|
echo "Failed to save YAML config.";
|
||||||
|
}
|
112
bin/init.php
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
<?php
|
||||||
|
// Marcel Kapfer (mmk2410)
|
||||||
|
// PHP script for initializing Rangitaki
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
error_reporting(0);
|
||||||
|
|
||||||
|
require 'res/php/Config.php';
|
||||||
|
|
||||||
|
use mmk2410\rbe\config\Config as Config;
|
||||||
|
|
||||||
|
$config = new Config('config.yaml', 'vendor/autoload.php');
|
||||||
|
|
||||||
|
if (!file_exists('config.yaml')) {
|
||||||
|
$yaml = array();
|
||||||
|
} else {
|
||||||
|
$yaml = $config->getConfig();
|
||||||
|
}
|
||||||
|
|
||||||
|
// blog part
|
||||||
|
$yaml["blog"]["title"] = get("Title of your blog", $yaml["blog"]["title"], "Example Blog");
|
||||||
|
$yaml["blog"]["author"] = get("Your name:", $yaml["blog"]["author"], "John");
|
||||||
|
$yaml["blog"]["description"] = get("A description of your blog:", $yaml["blog"]["description"], "A short description of your blog");
|
||||||
|
$yaml["blog"]["home"] = getBool("Do you have a top site? (on/off)", $yaml["blog"]["home"], "on");
|
||||||
|
if ($yaml["blog"]["home"] == "on") {
|
||||||
|
$yaml["blog"]["homeurl"] = get("Path / Url to home page", $yaml["blog"]["homeurl"], "../");
|
||||||
|
$yaml["blog"]["homename"] = get("Name of your home page", $yaml["blog"]["homename"], "Home");
|
||||||
|
}
|
||||||
|
$yaml["blog"]["mainname"] = get("Name of the main blog (if empty, the blog title will be used)", "");
|
||||||
|
$yaml["blog"]["intro"] = getBool("Do you want a blog intro text? (on/off)", $yaml["blog"]["intro"], "on");
|
||||||
|
$yaml["blog"]["disqus"] = get("Your Disqus shortname (Leave empty to disable)", $yaml["blog"]["disqus"], "");
|
||||||
|
$yaml["blog"]["analytics"] = get("Google Analytics ID (Leave empty to disable)", $yaml["blog"]["analytics"], "");
|
||||||
|
$yaml["blog"]["footer"] = get("The footer of your blog", $yaml["blog"]["footer"], "Example Blog 2016 CC-BY-SA 4.0");
|
||||||
|
|
||||||
|
// design part
|
||||||
|
$yaml["design"]["fab"] = getBool("Would you like to use the share buttons (on/off)", $yaml["design"]["blog"], "on");
|
||||||
|
$yaml["design"]["drawer"] = getBool("Would you like the use the navigation drawer? (on/off)", $yaml["design"]["drawer"], "on");
|
||||||
|
$themes = getDir('./themes');
|
||||||
|
$yaml["design"]["theme"] = get("Which theme would you like to use? (" . $themes . ")", $yaml["design"]["theme"], "material-light");
|
||||||
|
$yaml["design"]["pagination"] =
|
||||||
|
get("Which posts should be displayed on one page (0 to disable)", $yaml["design"]["pagination"], "0");
|
||||||
|
$yaml["design"]["excerpt"] =
|
||||||
|
getBool("Should be overview pages only show a excerpt of the full posts? (on/off)", $yaml["design"]["excerpt"], "off");
|
||||||
|
$yaml["design"]["favicon"] = get("URL to your favicon", $yaml["design"]["favicon"], "https://example.com/fav.ico");
|
||||||
|
|
||||||
|
// rcc
|
||||||
|
$yaml["rcc"]["rcc"] = "off";
|
||||||
|
$yaml["rcc"]["api"] = "off";
|
||||||
|
|
||||||
|
// languages
|
||||||
|
$langs = getDir('./lang');
|
||||||
|
$yaml["language"] = get("Choose a language (" . $langs . ")", $yaml["language"], "en");
|
||||||
|
|
||||||
|
// social media
|
||||||
|
$yaml["social"]["twitter"] = get("Your Twitter username:", $yaml["social"]["twitter"], "");
|
||||||
|
|
||||||
|
$config->writeConfig($yaml);
|
||||||
|
|
||||||
|
function get($question, $value, $default)
|
||||||
|
{
|
||||||
|
if (isset($value) && $value != "") {
|
||||||
|
$input = readline($question . " (" . $value . "): ");
|
||||||
|
if ($input == "") {
|
||||||
|
return $value;
|
||||||
|
} else {
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$input = readline($question . " (" . $default . ")" . ": ");
|
||||||
|
if ($input == "") {
|
||||||
|
return $default;
|
||||||
|
} else {
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getBool($question, $value, $default)
|
||||||
|
{
|
||||||
|
if (isset($value) && $value != "") {
|
||||||
|
$input = "someval";
|
||||||
|
while (!in_array($input, array("on", "off", ""))) {
|
||||||
|
$input = readline($question . " (" . $value . "): ");
|
||||||
|
}
|
||||||
|
if ($input == "") {
|
||||||
|
return $value;
|
||||||
|
} else {
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$input = "";
|
||||||
|
while (!in_array($input, array("on", "off"))) {
|
||||||
|
$input = readline($question . " (" . $default . ")" . ": ");
|
||||||
|
}
|
||||||
|
if ($input == "") {
|
||||||
|
return $default;
|
||||||
|
} else {
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDir($path)
|
||||||
|
{
|
||||||
|
$dir = scandir($path, SCANDIR_SORT_DESCENDING);
|
||||||
|
|
||||||
|
unset($dir[sizeof($dir) - 1]);
|
||||||
|
unset($dir[sizeof($dir) - 1]);
|
||||||
|
|
||||||
|
return implode(", ", $dir);
|
||||||
|
}
|
76
bin/init_rcc.php
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
<?php
|
||||||
|
// Marcel Kapfer (mmk2410)
|
||||||
|
// PHP script for initializing the RCC
|
||||||
|
// License: MIT
|
||||||
|
|
||||||
|
require 'res/php/Config.php';
|
||||||
|
|
||||||
|
use mmk2410\rbe\config\Config as Config;
|
||||||
|
|
||||||
|
echo 'RCC Initializion Script' . "\n";
|
||||||
|
$username = readline("Username: ");
|
||||||
|
|
||||||
|
if ($username == "") {
|
||||||
|
echo "No username given. Aborting...\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
echo 'Password: ';
|
||||||
|
$password = readline("Password: ");
|
||||||
|
|
||||||
|
if ($password == "") {
|
||||||
|
echo "No password given. Aborting...\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'cost' => 12
|
||||||
|
];
|
||||||
|
|
||||||
|
$password = password_hash($password, PASSWORD_BCRYPT, $options);
|
||||||
|
|
||||||
|
$username = '$username = "' . $username . '";';
|
||||||
|
$password = '$password = \'' . $password . '\';';
|
||||||
|
|
||||||
|
$file = '<?php' . "\n" . $username . "\n" . $password . "\n";
|
||||||
|
|
||||||
|
if (file_put_contents('./rcc/password.php', $file)) {
|
||||||
|
chmod('./rcc/password.php', 0640);
|
||||||
|
echo "\nPassword successfully saved.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$config = new Config('config.yaml', 'vendor/autoload.php');
|
||||||
|
|
||||||
|
$yaml = $config->getConfig();
|
||||||
|
|
||||||
|
$rccOn = "";
|
||||||
|
|
||||||
|
while (!(in_array($rccOn, array("y", "Y", "n", "N")))) {
|
||||||
|
$rccOn = readline("Enable RCC: (y/n) ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_array($rccOn, array("y", "Y"))) {
|
||||||
|
$yaml["rcc"]["rcc"] = "on";
|
||||||
|
} else {
|
||||||
|
$yaml["rcc"]["rcc"] = "off";
|
||||||
|
}
|
||||||
|
|
||||||
|
$apiOn = "";
|
||||||
|
|
||||||
|
while (!(in_array($apiOn, array("Y", "y", "n", "N")))) {
|
||||||
|
$apiOn = readline("Enable RCC API: (y/n) ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (in_array($apiOn, array("y", "Y"))) {
|
||||||
|
$yaml["rcc"]["api"] = "on";
|
||||||
|
} else {
|
||||||
|
$yaml["rcc"]["api"] = "off";
|
||||||
|
}
|
||||||
|
|
||||||
|
$config = new Config('config.yaml', 'vendor/autoload.php');
|
||||||
|
|
||||||
|
if ($config->writeConfig($yaml)) {
|
||||||
|
echo "Changes saved.\n";
|
||||||
|
} else {
|
||||||
|
echo "Failed to save changes.\n";
|
||||||
|
}
|
1
blogs/example.md
Normal file
|
@ -0,0 +1 @@
|
||||||
|
%TITLE: Example
|
2
blogs/external.md
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
%TITLE: Docs
|
||||||
|
%URL: https://mmk2410.org/rangitaki/docs/
|
9
blogs/main.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
%TITLE: main
|
||||||
|
|
||||||
|
This is the Blog of the Blog Engine **Rangitaki**
|
||||||
|
|
||||||
|
Rangitaki is based on PHP and Markdown. It is easy to install and to configure.
|
||||||
|
|
||||||
|
The latest version of Rangitaki is 1.4.3.
|
||||||
|
|
||||||
|
You can find the source code on [GitLab](https://gitlab.com/mmk2410/rangitaki).
|
15
ci/docker_install.sh
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Only install dependencies for Docker
|
||||||
|
[[ ! -e /.dockerenv ]] && [[ ! -e /.dockerinit ]] && exit 0
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
# Install git
|
||||||
|
apt-get update -yqq
|
||||||
|
apt-get install git -yqq
|
||||||
|
|
||||||
|
# Install phpunit
|
||||||
|
curl -o /usr/local/bin/phpunit https://phar.phpunit.de/phpunit.phar
|
||||||
|
chmod +x /usr/local/bin/phpunit
|
||||||
|
|
20
composer.json
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"name": "mmk2410/rangitaki",
|
||||||
|
"description": "A simple PHP blogging engine without any database requirements",
|
||||||
|
"type": "project",
|
||||||
|
"require": {
|
||||||
|
"erusev/parsedown": "^1.6",
|
||||||
|
"fguillot/picofeed": "^0.1.18",
|
||||||
|
"slim/slim": "^3.0",
|
||||||
|
"symfony/yaml": "^3.0",
|
||||||
|
"codeguy/upload": "^1.3"
|
||||||
|
},
|
||||||
|
"license": "MIT License",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Marcel Kapfer (mmk2410)",
|
||||||
|
"email": "marcelmichaelkapfer@yahoo.co.nz"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"minimum-stability": "stable"
|
||||||
|
}
|
496
composer.lock
generated
Normal file
|
@ -0,0 +1,496 @@
|
||||||
|
{
|
||||||
|
"_readme": [
|
||||||
|
"This file locks the dependencies of your project to a known state",
|
||||||
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
|
"This file is @generated automatically"
|
||||||
|
],
|
||||||
|
"content-hash": "ccdcfdb56ed68253e2388261fbb6d1b3",
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "codeguy/upload",
|
||||||
|
"version": "1.3.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/codeguy/Upload.git",
|
||||||
|
"reference": "6a9e5e1fb58d65346d0e557db2d46fb25efd3e37"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/codeguy/Upload/zipball/6a9e5e1fb58d65346d0e557db2d46fb25efd3e37",
|
||||||
|
"reference": "6a9e5e1fb58d65346d0e557db2d46fb25efd3e37",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-fileinfo": "*",
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "3.7.*"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"Upload": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Josh Lockhart",
|
||||||
|
"email": "info@joshlockhart.com",
|
||||||
|
"homepage": "http://www.joshlockhart.com/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Handle file uploads with extensible validation and storage strategies",
|
||||||
|
"homepage": "http://github.com/codeguy/Upload",
|
||||||
|
"keywords": [
|
||||||
|
"file",
|
||||||
|
"upload",
|
||||||
|
"validation"
|
||||||
|
],
|
||||||
|
"time": "2013-07-07T17:01:41+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "container-interop/container-interop",
|
||||||
|
"version": "1.1.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/container-interop/container-interop.git",
|
||||||
|
"reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e",
|
||||||
|
"reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Interop\\Container\\": "src/Interop/Container/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
|
||||||
|
"time": "2014-12-30T15:22:37+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "erusev/parsedown",
|
||||||
|
"version": "1.6.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/erusev/parsedown.git",
|
||||||
|
"reference": "20ff8bbb57205368b4b42d094642a3e52dac85fb"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/erusev/parsedown/zipball/20ff8bbb57205368b4b42d094642a3e52dac85fb",
|
||||||
|
"reference": "20ff8bbb57205368b4b42d094642a3e52dac85fb",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"Parsedown": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Emanuil Rusev",
|
||||||
|
"email": "hello@erusev.com",
|
||||||
|
"homepage": "http://erusev.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Parser for Markdown.",
|
||||||
|
"homepage": "http://parsedown.org",
|
||||||
|
"keywords": [
|
||||||
|
"markdown",
|
||||||
|
"parser"
|
||||||
|
],
|
||||||
|
"time": "2016-11-02T15:56:58+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fguillot/picofeed",
|
||||||
|
"version": "v0.1.28",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/fguillot/picoFeed.git",
|
||||||
|
"reference": "9da506c308bcb40b6fc630f9123466028c03170b"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/fguillot/picoFeed/zipball/9da506c308bcb40b6fc630f9123466028c03170b",
|
||||||
|
"reference": "9da506c308bcb40b6fc630f9123466028c03170b",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-dom": "*",
|
||||||
|
"ext-iconv": "*",
|
||||||
|
"ext-libxml": "*",
|
||||||
|
"ext-simplexml": "*",
|
||||||
|
"ext-xml": "*",
|
||||||
|
"php": ">=5.3.0",
|
||||||
|
"zendframework/zendxml": "^1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpdocumentor/reflection-docblock": "2.0.4",
|
||||||
|
"phpunit/phpunit": "4.8.26",
|
||||||
|
"symfony/yaml": "2.8.7"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-curl": "PicoFeed will use cURL if present"
|
||||||
|
},
|
||||||
|
"bin": [
|
||||||
|
"picofeed"
|
||||||
|
],
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"PicoFeed": "lib/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frédéric Guillot"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Modern library to handle RSS/Atom feeds",
|
||||||
|
"homepage": "https://github.com/fguillot/picoFeed",
|
||||||
|
"time": "2016-12-29T00:06:41+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nikic/fast-route",
|
||||||
|
"version": "v1.1.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/nikic/FastRoute.git",
|
||||||
|
"reference": "f3dcf5130e634b6123d40727d612ec6aa4f61fb3"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/nikic/FastRoute/zipball/f3dcf5130e634b6123d40727d612ec6aa4f61fb3",
|
||||||
|
"reference": "f3dcf5130e634b6123d40727d612ec6aa4f61fb3",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.4.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"FastRoute\\": "src/"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src/functions.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD-3-Clause"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nikita Popov",
|
||||||
|
"email": "nikic@php.net"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Fast request router for PHP",
|
||||||
|
"keywords": [
|
||||||
|
"router",
|
||||||
|
"routing"
|
||||||
|
],
|
||||||
|
"time": "2016-10-20T17:36:47+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pimple/pimple",
|
||||||
|
"version": "v3.0.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/silexphp/Pimple.git",
|
||||||
|
"reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a",
|
||||||
|
"reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"Pimple": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Pimple, a simple Dependency Injection Container",
|
||||||
|
"homepage": "http://pimple.sensiolabs.org",
|
||||||
|
"keywords": [
|
||||||
|
"container",
|
||||||
|
"dependency injection"
|
||||||
|
],
|
||||||
|
"time": "2015-09-11T15:10:35+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-message",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
|
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||||
|
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "http://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP messages",
|
||||||
|
"homepage": "https://github.com/php-fig/http-message",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"http-message",
|
||||||
|
"psr",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
],
|
||||||
|
"time": "2016-08-06T14:39:51+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "slim/slim",
|
||||||
|
"version": "3.7.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/slimphp/Slim.git",
|
||||||
|
"reference": "4254e40d81559e35cdf856bcbaca5f3af468b7ef"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/slimphp/Slim/zipball/4254e40d81559e35cdf856bcbaca5f3af468b7ef",
|
||||||
|
"reference": "4254e40d81559e35cdf856bcbaca5f3af468b7ef",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"container-interop/container-interop": "^1.1",
|
||||||
|
"nikic/fast-route": "^1.0",
|
||||||
|
"php": ">=5.5.0",
|
||||||
|
"pimple/pimple": "^3.0",
|
||||||
|
"psr/http-message": "^1.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"psr/http-message-implementation": "1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^4.0",
|
||||||
|
"squizlabs/php_codesniffer": "^2.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Slim\\": "Slim"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Rob Allen",
|
||||||
|
"email": "rob@akrabat.com",
|
||||||
|
"homepage": "http://akrabat.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Josh Lockhart",
|
||||||
|
"email": "hello@joshlockhart.com",
|
||||||
|
"homepage": "https://joshlockhart.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gabriel Manricks",
|
||||||
|
"email": "gmanricks@me.com",
|
||||||
|
"homepage": "http://gabrielmanricks.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Andrew Smith",
|
||||||
|
"email": "a.smith@silentworks.co.uk",
|
||||||
|
"homepage": "http://silentworks.co.uk"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
|
||||||
|
"homepage": "https://slimframework.com",
|
||||||
|
"keywords": [
|
||||||
|
"api",
|
||||||
|
"framework",
|
||||||
|
"micro",
|
||||||
|
"router"
|
||||||
|
],
|
||||||
|
"time": "2016-12-20T20:30:47+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/yaml",
|
||||||
|
"version": "v3.2.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/yaml.git",
|
||||||
|
"reference": "a7095af4b97a0955f85c8989106c249fa649011f"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/yaml/zipball/a7095af4b97a0955f85c8989106c249fa649011f",
|
||||||
|
"reference": "a7095af4b97a0955f85c8989106c249fa649011f",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.5.9"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"symfony/console": "~2.8|~3.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"symfony/console": "For validating YAML files using the lint command"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.2-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Component\\Yaml\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Symfony Yaml Component",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"time": "2016-12-10T10:07:06+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "zendframework/zendxml",
|
||||||
|
"version": "1.0.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/zendframework/ZendXml.git",
|
||||||
|
"reference": "7b64507bc35d841c9c5802d67f6f87ef8e1a58c9"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/zendframework/ZendXml/zipball/7b64507bc35d841c9c5802d67f6f87ef8e1a58c9",
|
||||||
|
"reference": "7b64507bc35d841c9c5802d67f6f87ef8e1a58c9",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^5.3.3 || ^7.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^3.7 || ^4.0",
|
||||||
|
"squizlabs/php_codesniffer": "^1.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"ZendXml\\": "library/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"BSD-3-Clause"
|
||||||
|
],
|
||||||
|
"description": "Utility library for XML usage, best practices, and security in PHP",
|
||||||
|
"homepage": "http://packages.zendframework.com/",
|
||||||
|
"keywords": [
|
||||||
|
"security",
|
||||||
|
"xml",
|
||||||
|
"zf2"
|
||||||
|
],
|
||||||
|
"time": "2016-02-04T21:02:08+00:00"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": [],
|
||||||
|
"aliases": [],
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"stability-flags": [],
|
||||||
|
"prefer-stable": false,
|
||||||
|
"prefer-lowest": false,
|
||||||
|
"platform": [],
|
||||||
|
"platform-dev": []
|
||||||
|
}
|
27
config.yaml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
blog:
|
||||||
|
title: 'Example Blog'
|
||||||
|
author: John
|
||||||
|
description: 'A short description of your blog'
|
||||||
|
home: 'on'
|
||||||
|
homeurl: ../
|
||||||
|
homename: Home
|
||||||
|
mainname: ''
|
||||||
|
intro: 'on'
|
||||||
|
disqus: rangitaki
|
||||||
|
analytics: ''
|
||||||
|
footer: "Rangitaki 2016 <a href=\"https://gitlab.com/mmk2410/rangitaki\" target=\"blank\">\n gitlab.com/mmk2410/rangitaki</a>"
|
||||||
|
url: 'https://example.com/blog/'
|
||||||
|
design:
|
||||||
|
excerpt: "off"
|
||||||
|
fab: 'on'
|
||||||
|
drawer: 'on'
|
||||||
|
theme: material-light
|
||||||
|
pagination: 0
|
||||||
|
excerpt: 'off'
|
||||||
|
favicon: 'http://example.com/res/img/favicon.png'
|
||||||
|
rcc:
|
||||||
|
rcc: 'on'
|
||||||
|
api: 'on'
|
||||||
|
language: en
|
||||||
|
social:
|
||||||
|
twitter: ''
|
|
@ -1,47 +0,0 @@
|
||||||
# Contributing
|
|
||||||
|
|
||||||
You want to help the Rangitaki project? There is always a way you can do that. Spreading Rangitaki on social networks would be one possibility, but there are more.
|
|
||||||
|
|
||||||
## Content
|
|
||||||
|
|
||||||
1. Bugs
|
|
||||||
|
|
||||||
2. Code
|
|
||||||
|
|
||||||
3. Localization
|
|
||||||
|
|
||||||
4. Documentation
|
|
||||||
|
|
||||||
5. Team
|
|
||||||
|
|
||||||
## 1 Bugs
|
|
||||||
|
|
||||||
You found a bug in Rangitaki? Report it in the Rangitaki bug tracker on GitHub. <!--TODO link-->
|
|
||||||
|
|
||||||
## 2 Code
|
|
||||||
|
|
||||||
To contribute some code to the Rangitaki project follow these steps
|
|
||||||
|
|
||||||
1. Fork the GitHub repository
|
|
||||||
|
|
||||||
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
||||||
|
|
||||||
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
||||||
|
|
||||||
4. Push to the branch (`git push origin my-new-feature`)
|
|
||||||
|
|
||||||
5. Create New Pull Request
|
|
||||||
|
|
||||||
<!-- TODO links-->
|
|
||||||
|
|
||||||
## 3 Localization
|
|
||||||
|
|
||||||
The Rangitaki project is always glad if someone translates the few strings. Commit your new translation in GitHub just like a code change. Read the localization documentation for more information. If you don't have a GitHub account you can also send me the translated file at marcelmichaelkapfer@yahoo.co.nz. <!--TODO Link-->
|
|
||||||
|
|
||||||
## 4 Documentation
|
|
||||||
|
|
||||||
If you want to correct or improve this documentation follow the steps of *2. Code* but with the branch **Documentation**.
|
|
||||||
|
|
||||||
## 5 Team
|
|
||||||
|
|
||||||
You want to join the Rangitaki team and invest more time into coding this blogging engine? Write me a mail at marcelmichaelkapfer@yahoo.co.nz
|
|
262
documentation.md
|
@ -1,262 +0,0 @@
|
||||||
# Documentation
|
|
||||||
|
|
||||||
##### For Rangitaki Version 1.0.0
|
|
||||||
|
|
||||||
This is the full documentation for Rangitaki 1.0. If you're new to Rangitaki I recommend you to read the Quick Starting Guide <!--TODO link--> first.
|
|
||||||
|
|
||||||
This documentation covers anything concerning usage, setup and structure. For information on how to create themes, how to use RCC, how to localize or how to contribute look in the documentations for these topics.
|
|
||||||
<!--TODO link-->
|
|
||||||
|
|
||||||
## Content
|
|
||||||
|
|
||||||
1. Requirements
|
|
||||||
|
|
||||||
1. Server
|
|
||||||
|
|
||||||
2. Home Computer
|
|
||||||
|
|
||||||
3. Personal Skills
|
|
||||||
|
|
||||||
2. Setup
|
|
||||||
|
|
||||||
1. Installation
|
|
||||||
|
|
||||||
2. Configuration
|
|
||||||
|
|
||||||
3. Usage
|
|
||||||
|
|
||||||
1. Blog posts
|
|
||||||
|
|
||||||
2. Blogs
|
|
||||||
|
|
||||||
3. Media
|
|
||||||
|
|
||||||
4. Structure
|
|
||||||
|
|
||||||
1. /
|
|
||||||
|
|
||||||
2. /articles/
|
|
||||||
|
|
||||||
3. /blogs/
|
|
||||||
|
|
||||||
4. /lang/
|
|
||||||
|
|
||||||
5. /media/
|
|
||||||
|
|
||||||
6. /rcc/
|
|
||||||
|
|
||||||
7. /res/
|
|
||||||
|
|
||||||
8. /themes/
|
|
||||||
|
|
||||||
## 1 Requirements
|
|
||||||
|
|
||||||
In this chapter I will outline the requirements of Rangitaki concerning your web server, your home computer and your personal skills. Since Rangitaki is built to be simple and easy, the following paragraphs won't be that long.
|
|
||||||
|
|
||||||
### 1.1 Web server
|
|
||||||
|
|
||||||
Rangitaki itself requires a **web server** like the Apache HTTP Server or nginx, with a **PHP** installation. (For the installation and configuration read the manual of your distribution). You don't need to install any kind of database programs on your server.
|
|
||||||
|
|
||||||
It is recommended to use (or enable) SSH access to the server, because the Rangitaki project may provides software in the future that will access your web server over SSH.
|
|
||||||
|
|
||||||
### 1.2 Home computer
|
|
||||||
|
|
||||||
You don't need any special software on your home computer. Just a simple text editor for writing the blog posts is needed. It is recommended (but certainly not necessary) to use an editor with syntax highlighting for Markdown.
|
|
||||||
|
|
||||||
### 1.3 Personal skills
|
|
||||||
|
|
||||||
Since Rangitaki tries to be as simple as possible, you don't need much skills. You should be able to upload files and directories to your server and a few basics in Markdown, which is the Markup language in which the blog posts are written. If you don't know any Markdown yet, it is very easy to learn and this can be done at <!--TODO Link-->.
|
|
||||||
|
|
||||||
## 2 Setup
|
|
||||||
|
|
||||||
If you're new to Rangitaki, I recommend you to start with the quick starting guide <!--TODO link--> and come back to this page if you need more information.
|
|
||||||
|
|
||||||
### 2.1 Installation
|
|
||||||
|
|
||||||
There are two ways of installing Rangitaki:
|
|
||||||
|
|
||||||
The first one is to ownload the latest release of Rangitaki from GitHub <!--TODO link-->, unpack it and upload it to your server.
|
|
||||||
|
|
||||||
You can also download Rangitaki directly to your server using `curl` or `wget` and unpack it right there.
|
|
||||||
|
|
||||||
You can saftly delete ever file with the name example, but I recommend you to look at these files to see how things are done in Rangitaki.
|
|
||||||
|
|
||||||
### 2.2 Configuration
|
|
||||||
|
|
||||||
Configuring Rangitaki is quite easy and done by editing one file: the `config.php` in the source of your Rangitaki installation.
|
|
||||||
|
|
||||||
In the following lines I will describe, what you can do with each option. Mind ALWAYS the semicolor at the and and the marks around the value.
|
|
||||||
|
|
||||||
`$blogtitle = "Divide through zero";`
|
|
||||||
|
|
||||||
This is the name of your blog. Set it to something you thing is right. Rangitaki takes this value at every call, so you don't have to re-generate something, if you change it.
|
|
||||||
|
|
||||||
`$blogauthor = "Big Zero";`
|
|
||||||
|
|
||||||
Set here you're name. This will not shown on the Rangitaki blog itself, but I is shown if you share the blog or a article in a social network.
|
|
||||||
|
|
||||||
`$blogdescription = "Some wrong facts about the world";`
|
|
||||||
|
|
||||||
Set here a short description of the blog. This value is also only used for sharing.
|
|
||||||
|
|
||||||
`$bloghome = "yes";`
|
|
||||||
|
|
||||||
Set here *yes* if your blog is a subdirectory of a website and *no* if it isn't.
|
|
||||||
|
|
||||||
`$bloghomeurl = "/dev/null";`
|
|
||||||
|
|
||||||
This is the URL to your main page. Only used if `$bloghome` is set to *yes*
|
|
||||||
|
|
||||||
`$bloghomename = "Deep and Dark...";`
|
|
||||||
|
|
||||||
This is the name of your main page as shown in the Rangitaki navigation drawer. Only used if `$bloghome` is set to *yes*
|
|
||||||
|
|
||||||
`$blogmainname = "The complete Pi!";`
|
|
||||||
|
|
||||||
The name of your main blog. By default this is empty and the `$blogtitle` is used for that. But in some cases it comes in quite handy.
|
|
||||||
|
|
||||||
`$blogintro = "yes";`
|
|
||||||
|
|
||||||
Set to *no* if you don't want to show any blog intro. Read 3.2 Blogs for more information.
|
|
||||||
|
|
||||||
`$blogdisqus = "thelostkeyboard";`
|
|
||||||
|
|
||||||
Set here the Disqus ID for this site if you have one. Leave empty to disable.
|
|
||||||
|
|
||||||
`$sharefab = "yes";`
|
|
||||||
|
|
||||||
This disables (*no*) and enables (*yes*) the share floating action button in the bottom right corner. Enabled by default.
|
|
||||||
|
|
||||||
`$bloganalytics = "TrAcK00mE";`
|
|
||||||
|
|
||||||
Set here the ID of your Google Analytics property. Leave empty to disable it.
|
|
||||||
|
|
||||||
`$blogfooter = "This is the end!";`
|
|
||||||
|
|
||||||
Set here a text for your footer. You can also write some PHP here if you know any.
|
|
||||||
|
|
||||||
`$rcc = "no";`
|
|
||||||
|
|
||||||
Disables / Enables the RCC. Read the RCC documentation for more. <!--TODO link-->
|
|
||||||
|
|
||||||
`$nav_drawer = "yes";`
|
|
||||||
|
|
||||||
With *no* you can disable the navigation drawer on the left side.
|
|
||||||
|
|
||||||
`$theme = "material-light";`
|
|
||||||
|
|
||||||
Set here the name of the theme you wan't to use. All themes are in the folder `themes`
|
|
||||||
|
|
||||||
`$language = "js";`
|
|
||||||
|
|
||||||
Set here the language of your blog. All languages are in the folder `lang`. You can easily translate it to your own language since there aren't many strings. Read also the localization doc. <!--TODO link-->
|
|
||||||
|
|
||||||
`$favicon = "http://trash.your.icon/facicon.png";`
|
|
||||||
|
|
||||||
Set here the weburl to your favicon.
|
|
||||||
|
|
||||||
## 3 Usage
|
|
||||||
|
|
||||||
In the following paragraphs I describe the details of using Rangitaki.
|
|
||||||
|
|
||||||
### 3.1 Blog posts
|
|
||||||
|
|
||||||
Every post is saved in the directory /articles/name-of-the-blog/YYYY-MM-DD-hh-mm-title.md
|
|
||||||
|
|
||||||
You can drop the hh-mm if you don't write more than one blog post a day. Rangitaki will use this timestamp to sort your blogpost and to show them chronologically in your blog. The title doesn't need to be the complete title of your blog post.
|
|
||||||
|
|
||||||
The blog posts itself consists of two parts. The Rangitaki keywords and the main content
|
|
||||||
|
|
||||||
**Rangitaki Keywords**
|
|
||||||
|
|
||||||
There are four Rangitaki keywords you can set for everey post. Each one of them is not necessary, but the most should be set.
|
|
||||||
|
|
||||||
A keyword starts with a `%` followed by the keyword (all uppercase letters), a space, a `=`, another space and the value. Mind also the order of the keywords. It cannot changed.
|
|
||||||
|
|
||||||
`%TITLE = How to control the whole world. Pt. 1`
|
|
||||||
|
|
||||||
The first keyword is the title of your posts.
|
|
||||||
|
|
||||||
`%DATE = 6 June 666 06:06`
|
|
||||||
|
|
||||||
The second one is the date. The format is completly free to choose.
|
|
||||||
|
|
||||||
`%AUTHER = The Devil`
|
|
||||||
|
|
||||||
The author of the blog post.
|
|
||||||
|
|
||||||
`%TAGS = world, evil`
|
|
||||||
|
|
||||||
The tags of a post. Seperated by a colon and a space.
|
|
||||||
|
|
||||||
Leave then on line emtpy and start writing your blog post. For formatting the text, use Markdown.
|
|
||||||
|
|
||||||
### 3.2 Blogs
|
|
||||||
|
|
||||||
Rangitaki supports multiple subblogs in one blog. The *main* blog is also just a subblog, but it is used as the default one.
|
|
||||||
|
|
||||||
To create a blog, just create a directory in articles with the name of your blog and a file with the same name and an *.md* extension in `/blogs`.
|
|
||||||
|
|
||||||
The `blogname.md` is the so called blogfile. In this file you have to set one keyword. And in Rangitaki 1.0.0 there is also just one keyword available.
|
|
||||||
|
|
||||||
`%TITLE = Power off`
|
|
||||||
|
|
||||||
The keyword is set exactly the same way as in the blog posts.
|
|
||||||
|
|
||||||
Another special thing that Rangitaki has are blog intros. Text that are at the beginning a blog, before th first blog posts. The blog intros support also Markdown and you can write them in your blogfile. Leave one line empty after the *%TITLE* keyword and start writing your blog intro.
|
|
||||||
|
|
||||||
### 3.3 Media
|
|
||||||
|
|
||||||
How you save your media files is up to you. Rangitaki has a `/media` directory to store that stuff if you want. There is only one important thing: If you include some media in your blog post with relative paths, then the paths begin not in your articles directory but in the Rangitaki source directory.
|
|
||||||
|
|
||||||
## 4 Structure
|
|
||||||
|
|
||||||
Here I will explain the structur of the Rangitaki blogging engine. The root directory is the root directory of the blog, not of your computer.
|
|
||||||
|
|
||||||
### 4.1 /
|
|
||||||
|
|
||||||
In the root directory of Rangitaki you will find the following files:
|
|
||||||
|
|
||||||
- config.php
|
|
||||||
|
|
||||||
The file where the settings for your Rangitaki blog are stored. All the options are discussed earlier.
|
|
||||||
|
|
||||||
- index.php
|
|
||||||
|
|
||||||
The file which creates your blog, if you visit it in the web.
|
|
||||||
|
|
||||||
- LICENSE
|
|
||||||
|
|
||||||
The license of Rangitaki
|
|
||||||
|
|
||||||
- README.md
|
|
||||||
|
|
||||||
A short readme
|
|
||||||
|
|
||||||
### 4.2 /articles/
|
|
||||||
|
|
||||||
In the articles directory are the directory for you subblogs (at least one, the main blog). These directories are filled with your blog posts.
|
|
||||||
|
|
||||||
### 4.3 /blogs/
|
|
||||||
|
|
||||||
In this directory all your blog files are listed. At least you need the *main.md*.
|
|
||||||
|
|
||||||
### 4.4 /lang/
|
|
||||||
|
|
||||||
Here you can find the language files that Rangitaki uses to localize some strings. Read more in the localization documentation. <!--TODO link-->
|
|
||||||
|
|
||||||
### 4.5 /media/
|
|
||||||
|
|
||||||
A directory where you can store your images, videos or other stuff.
|
|
||||||
|
|
||||||
### 4.6 /rcc/
|
|
||||||
|
|
||||||
The directory of the Rangitaki Control Center (RCC). Read the RCC documentation for more information. <!--TODO link-->
|
|
||||||
|
|
||||||
### 4.7 /res/
|
|
||||||
|
|
||||||
Here are some important files for the blog like images (e.g. the share buttons), the base style sheet, some JavaScripts and a few PHP files.
|
|
||||||
|
|
||||||
### 4.8 /themes/
|
|
||||||
|
|
||||||
This is the directory where the Rangitaki themes are stored. If you found another Rangitaki theme online, save it into this directory and choose it in your config.php.
|
|
1
extensions/example.js
Normal file
|
@ -0,0 +1 @@
|
||||||
|
(function(){var e;e=function(){return console.log("Welcome Developer! \nYou're seeing the output of a\nJavaScript extension for the Rangitaki blogging engine.")},$(document).ready(e())}).call(this);
|
BIN
feature-graphic.png
Normal file
After Width: | Height: | Size: 63 KiB |
14
feed/.atom
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
<generator uri="https://github.com/fguillot/picoFeed">PicoFeed</generator>
|
||||||
|
<title>Example Blog</title>
|
||||||
|
<id>https://marcel-kapfer.de/rangitaki/blog/</id>
|
||||||
|
<updated>2016-02-16T10:52:47+00:00</updated>
|
||||||
|
<link rel="alternate" type="text/html" href="https://marcel-kapfer.de/rangitaki/blog/"/>
|
||||||
|
<link rel="self" type="application/atom+xml" href="https://marcel-kapfer.de/rangitaki/blog//feed/feed.atom"/>
|
||||||
|
<author>
|
||||||
|
<name>John</name>
|
||||||
|
<email></email>
|
||||||
|
<uri>https://marcel-kapfer.de/rangitaki/blog/</uri>
|
||||||
|
</author>
|
||||||
|
</feed>
|
67
gulpfile.coffee
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
###
|
||||||
|
|
||||||
|
2015 - 2016 (c) by Marcel Kapfer (mmk2410)
|
||||||
|
|
||||||
|
Licensed under MIT License
|
||||||
|
|
||||||
|
Rangitaki Gulp File
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
gulp = require 'gulp'
|
||||||
|
sass = require 'gulp-sass'
|
||||||
|
sourcemaps = require 'gulp-sourcemaps'
|
||||||
|
minifyCss = require 'gulp-csso'
|
||||||
|
coffee = require 'gulp-coffee'
|
||||||
|
coffeelint = require 'gulp-coffeelint'
|
||||||
|
uglify = require 'gulp-uglify'
|
||||||
|
merge = require 'merge-stream'
|
||||||
|
del = require 'del'
|
||||||
|
size = require 'gulp-size'
|
||||||
|
|
||||||
|
gulp.task 'coffee', ->
|
||||||
|
main = gulp.src './src/coffee/*.coffee'
|
||||||
|
.pipe coffeelint()
|
||||||
|
.pipe coffeelint.reporter()
|
||||||
|
.pipe coffee()
|
||||||
|
.pipe uglify()
|
||||||
|
.pipe gulp.dest './res/js/'
|
||||||
|
|
||||||
|
extensions = gulp.src './src/coffee-extensions/*.coffee'
|
||||||
|
.pipe coffeelint()
|
||||||
|
.pipe coffeelint.reporter()
|
||||||
|
.pipe coffee()
|
||||||
|
.pipe uglify()
|
||||||
|
.pipe gulp.dest './extensions/'
|
||||||
|
|
||||||
|
merge(main, extensions)
|
||||||
|
.pipe size {title: 'Coffee'}
|
||||||
|
|
||||||
|
gulp.task 'sass', ->
|
||||||
|
main = gulp.src './src/sass/*.sass'
|
||||||
|
.pipe sourcemaps.init()
|
||||||
|
.pipe sass {
|
||||||
|
outputStyle: 'compressed'
|
||||||
|
}
|
||||||
|
.pipe sourcemaps.write './'
|
||||||
|
.pipe gulp.dest './res/css/'
|
||||||
|
|
||||||
|
theme = gulp.src './src/sass-themes/*.sass'
|
||||||
|
.pipe sourcemaps.init()
|
||||||
|
.pipe sass {
|
||||||
|
outputStyle: 'compressed'
|
||||||
|
}
|
||||||
|
.pipe sourcemaps.write './'
|
||||||
|
.pipe gulp.dest './themes/'
|
||||||
|
|
||||||
|
merge(theme, main)
|
||||||
|
.pipe size {title: 'SASS'}
|
||||||
|
|
||||||
|
gulp.task 'clean', del.bind null, ['res/css/no-nav.css', 'res/css/rangitaki.css', 'themes/', 'res/js/app.js']
|
||||||
|
|
||||||
|
gulp.task 'init', ['coffee', 'sass']
|
||||||
|
|
||||||
|
gulp.task 'default', ->
|
||||||
|
gulp.watch './src/**/*.sass', ['sass']
|
||||||
|
gulp.watch './src/**/*.coffee', ['coffee']
|
||||||
|
|
455
index.php
Normal file
|
@ -0,0 +1,455 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Rangitaki Blogging Engine
|
||||||
|
Code: https://gitlab.com/mmk2410/rangitaki
|
||||||
|
Issus and Project Management: https://phab.mmk2410.org
|
||||||
|
Web: https://marcel-kapfer.de/rangitaki
|
||||||
|
2015 - 2016 Marcel Kapfer (mmk2410)
|
||||||
|
License: MIT
|
||||||
|
-->
|
||||||
|
<html>
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 5.6
|
||||||
|
*
|
||||||
|
* Rangitaki PHP Blogging engine
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rbe
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT https://opensource.org/licenses/MIT
|
||||||
|
* @link https://marcel-kapfer.de/rangitaki
|
||||||
|
*/
|
||||||
|
// Getting necessary php files
|
||||||
|
date_default_timezone_set('UTC');
|
||||||
|
require __DIR__ . '/vendor/autoload.php'; // loading composer libs
|
||||||
|
|
||||||
|
require './res/php/Config.php';
|
||||||
|
require_once './res/php/BlogListGenerator.php';
|
||||||
|
|
||||||
|
use mmk2410\rbe\config\Config as Config;
|
||||||
|
use mmk2410\rbe\BlogListGenerator\BlogListGenerator as BlogListGenerator;
|
||||||
|
|
||||||
|
$configParser = new Config('config.yaml', 'vendor/autoload.php');
|
||||||
|
|
||||||
|
$config = $configParser->getConfig();
|
||||||
|
|
||||||
|
require './lang/' . $config["language"] . ".php"; // Language file
|
||||||
|
require_once 'res/php/ArticleGenerator.php'; // The article generator
|
||||||
|
|
||||||
|
|
||||||
|
// Getting some variables ($_GET and $_SERVER)
|
||||||
|
$getblog = filter_input(INPUT_GET, "blog"); // get the blog variable
|
||||||
|
$getarticle = filter_input(INPUT_GET, "article"); // get the article variable
|
||||||
|
$gettag = filter_input(INPUT_GET, "tag"); // getting the tag variable
|
||||||
|
$url = "http://" . filter_input(INPUT_SERVER, "HTTP_HOST") .
|
||||||
|
filter_input(INPUT_SERVER, "REQUEST_URI"); // get the url (used for sharing)
|
||||||
|
$pagenumber = filter_input(INPUT_GET, "page"); // get the pagenumber
|
||||||
|
|
||||||
|
// Pagination algorithm
|
||||||
|
if ($config["design"]["pagination"] == 0) {
|
||||||
|
$config["design"]["pagination"] = false;
|
||||||
|
} else {
|
||||||
|
// pag_max: the newest post to show on a page
|
||||||
|
$pag_max = $config["design"]["pagination"] * ( $pagenumber + 1 );
|
||||||
|
// pag_min: the oldest post to show on a page
|
||||||
|
$pag_min = $pag_max - $config["design"]["pagination"];
|
||||||
|
if ($pagenumber > 0) {
|
||||||
|
// Disable the blog intro if not on first page
|
||||||
|
$config["blog"]["intro"] = "off";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fetching necessary information about the current article
|
||||||
|
// Set blog to "main" if on main blog, else to $getblog.
|
||||||
|
// This variable is needed later
|
||||||
|
if ($getblog == "") {
|
||||||
|
$blog = "main";
|
||||||
|
} else {
|
||||||
|
$blog = $getblog;
|
||||||
|
}
|
||||||
|
|
||||||
|
// generate a variable with the articles directory
|
||||||
|
$articlesdir = "./articles/$blog/";
|
||||||
|
// Fetching the articles title
|
||||||
|
if (isset($getarticle)) {
|
||||||
|
$articletitle
|
||||||
|
= ArticleGenerator::getTitle($articlesdir, $getarticle . '.md');
|
||||||
|
}
|
||||||
|
// Make sure that the entry has a title, because main.md hasn't one
|
||||||
|
if (empty($config["blog"]["mainname"])) {
|
||||||
|
$blogmaintitle = $config["blog"]["title"];
|
||||||
|
} else {
|
||||||
|
$blogmaintitle = $config["blog"]["mainname"];
|
||||||
|
}
|
||||||
|
if (isset($getblog)) {
|
||||||
|
$subblogtitle = BlogListGenerator::getName('./blogs/' . $getblog . '.md');
|
||||||
|
} else {
|
||||||
|
$subblogtitle = $blogmaintitle;
|
||||||
|
}
|
||||||
|
// Generate title for the html head
|
||||||
|
if (isset($getarticle)) {
|
||||||
|
$hd_subblog_title = $articletitle . ' - ' . $subblogtitle;
|
||||||
|
} else {
|
||||||
|
$hd_subblog_title = $subblogtitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
// url of the feed
|
||||||
|
$feedurl = $config["blog"]["url"] . "/feed/" . $blog . ".atom";
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title><?php echo $config["blog"]["title"] . " » " .$hd_subblog_title; ?></title>
|
||||||
|
<!--Metatags-->
|
||||||
|
<meta name="author"
|
||||||
|
content="<?php echo $config["blog"]["author"]; // Set the blog author ?>"/>
|
||||||
|
<meta name="description"
|
||||||
|
content="<?php echo $config["blog"]["description"]; // the blog description ?>"/>
|
||||||
|
<!-- Meta tag for responsive ui-->
|
||||||
|
<meta name='viewport'
|
||||||
|
content='width=device-width, initial-scale=1.0,
|
||||||
|
maximum-scale=1.0, user-scalable=0'/>
|
||||||
|
<!-- OpenGraph meta tags -->
|
||||||
|
<meta property="og:title" content="<?php echo $hd_subblog_title; ?>"/>
|
||||||
|
<meta property="og:type" content="website"/>
|
||||||
|
<meta property="og:url" content="<?php echo $url; ?>"/>
|
||||||
|
<meta property="og:image" content="<?php echo $config['design']['favicon']; ?>"/>
|
||||||
|
<meta property="og:description" content="<?php echo $config['blog']['description']; ?>"/>
|
||||||
|
<!-- Twitter meta tags -->
|
||||||
|
<meta name="twitter:card" content="summary"/>
|
||||||
|
<meta name="twitter:site" content="<?php echo $config['social']['twitter']; ?>"/>
|
||||||
|
<meta name="twitter:title" content="<?php echo $hd_subblog_title; ?>"/>
|
||||||
|
<meta name="twitter:description" content="<?php echo $config['blog']['description']; ?>"/>
|
||||||
|
<meta name="twitter:image" content="<?php echo $config['design']['favicon']; ?>"/>
|
||||||
|
<meta name="twitter:url" content="<?php echo $url; ?>"/>
|
||||||
|
<!-- atom feed -->
|
||||||
|
<?php
|
||||||
|
if (file_exists("feed/" . $blog . ".atom")) {
|
||||||
|
?>
|
||||||
|
<link rel='alternate' type='application/atom+xml' title='Atom 0.3' href=
|
||||||
|
'<?php
|
||||||
|
echo $feedurl;
|
||||||
|
?>'>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!--CSS files-->
|
||||||
|
<link rel="stylesheet" type="text/css" href="res/css/rangitaki.css"/>
|
||||||
|
<!-- stylesheet for code highlighting-->
|
||||||
|
<link rel="stylesheet" href="./res/css/github-gist.css">
|
||||||
|
<link rel="stylesheet" type="text/css"
|
||||||
|
href="themes/<?php echo $config['design']['theme']; // getting the theme stylesheet?>.css"/>
|
||||||
|
<?php
|
||||||
|
// Checking if the drawer is enabled
|
||||||
|
if ($config["design"]["drawer"] != 'on') {
|
||||||
|
// Loading additional stylesheet for disabling the drawer?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="res/css/no-nav.css"/>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<link href='//fonts.googleapis.com/css?family=Roboto:400,500,700,300,
|
||||||
|
400italic,100,100italic,900' rel='stylesheet'
|
||||||
|
type='text/css'> <!--Font-->
|
||||||
|
<!--Favicons-->
|
||||||
|
<link rel="shortcut icon" type="image/x-icon"
|
||||||
|
href="<?php echo $config['design']['favicon']; ?>"/>
|
||||||
|
<link rel="apple-touch-icon-precomposed" href="<?php echo $config['design']['favicon']; ?>">
|
||||||
|
<!-- JavaScript Pt. 1: HightlightJS (get and load): Code highlighting-->
|
||||||
|
<script src="./res/js/highlight.pack.js"></script>
|
||||||
|
<script>hljs.initHighlightingOnLoad();</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<?php
|
||||||
|
// Checking if the navigation drawer is enabled. If not -> skip it
|
||||||
|
if ($config["design"]["drawer"] == "on") {
|
||||||
|
?>
|
||||||
|
<!--
|
||||||
|
Darken the background when fading the drawer in. See also the JS file
|
||||||
|
-->
|
||||||
|
<div class="overlay"></div>
|
||||||
|
<div class="nav">
|
||||||
|
<div class="nav-close">
|
||||||
|
<img src="./res/img/close-dark.svg" class="nav-close-img"
|
||||||
|
alt="Close"/>
|
||||||
|
</div>
|
||||||
|
<div class="divider"></div>
|
||||||
|
<?php
|
||||||
|
// Getting everything from the blog directory
|
||||||
|
$blogs = scandir("./blogs/");
|
||||||
|
// Checking if not in article or tag view and if there are more the one
|
||||||
|
// blog. The 3 is for these three array entries: 'main.md', '.', '..'
|
||||||
|
if (!isset($getarticle) && !isset($gettag) && sizeof($blogs) > 3) {
|
||||||
|
echo "<section>";
|
||||||
|
// 1. Set localized string 2. Set blogtitle
|
||||||
|
echo "<div class='nav-item-static'>" .
|
||||||
|
$BLOGLANG['Blogs on'] . " " . $config["blog"]["title"] .
|
||||||
|
":</div>";
|
||||||
|
// iterating through the blogs/ directory
|
||||||
|
foreach ($blogs as $navblog) {
|
||||||
|
// check if filename is larger than three chars and if the
|
||||||
|
// file ends with ".md"
|
||||||
|
if (strlen($navblog) >= 3 && substr($navblog, -3) == ".md") {
|
||||||
|
if ($getblog == "") { // Run when on main blog
|
||||||
|
if ($navblog != "main.md") { // excluding main blog
|
||||||
|
// creating navigation item
|
||||||
|
echo BlogListGenerator::listBlog(
|
||||||
|
"./blogs/",
|
||||||
|
$navblog,
|
||||||
|
$config["blog"]["title"]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Check if $blog is current blog
|
||||||
|
// -> this blog will be excluded
|
||||||
|
if ($getblog . ".md" != $navblog) {
|
||||||
|
// creating navigation item
|
||||||
|
echo BlogListGenerator::listBlog(
|
||||||
|
"./blogs/",
|
||||||
|
$navblog,
|
||||||
|
$blogmaintitle
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo "</section>";
|
||||||
|
} elseif (isset($getarticle) || isset($gettag)) {
|
||||||
|
// If viewing a blog or a tag
|
||||||
|
?>
|
||||||
|
<!-- Set a back item instead of the blogs. -->
|
||||||
|
<a class="nav-item" onclick="history.go(-1);">Go back</a>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
if ($config["blog"]["home"] == "on") { // If a blog home is existend
|
||||||
|
?>
|
||||||
|
<div class="divider"></div>
|
||||||
|
<a class="nav-item" href="<?php echo $config['blog']['homeurl']; ?>">
|
||||||
|
<?php echo $config['blog']['homename']; ?>
|
||||||
|
</a>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
if (file_exists("feed/" . $blog . ".atom")) { ?>
|
||||||
|
<div class="divider"></div>
|
||||||
|
<a class="nav-item" href=
|
||||||
|
'<?php
|
||||||
|
echo $feedurl;
|
||||||
|
?>'>Feed</a><?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div> <!-- End of the navigation drawer-->
|
||||||
|
<?php
|
||||||
|
} // Endif from line 97; Yes, I really should think about alternative syntax...
|
||||||
|
|
||||||
|
?>
|
||||||
|
<div class="main"> <!-- Main page with content -->
|
||||||
|
<div class="header">
|
||||||
|
<!--
|
||||||
|
Action Bar, but since there isn't much action I call it header.
|
||||||
|
One day a search feature would be nice...
|
||||||
|
-->
|
||||||
|
<!-- Ham,ham,hamburger-->
|
||||||
|
<img src="./res/img/menu.svg" class="nav-img"/>
|
||||||
|
<!-- Blog title with subblog title and links to each one-->
|
||||||
|
<!-- link to main blog-->
|
||||||
|
<nobr><span class="title"><a href="./"><?php echo $config["blog"]["title"]; ?>
|
||||||
|
<?php
|
||||||
|
if (empty($getblog)) { // if not on a subblog
|
||||||
|
if (!empty($config['blog']['mainname'])) {
|
||||||
|
// If you see a › (square) here : This is not a bug,
|
||||||
|
// but a missing sign in your font
|
||||||
|
echo "›" . $config['blog']['mainname'];
|
||||||
|
}
|
||||||
|
} else { // On subblog: set also a link to the subblog
|
||||||
|
?>
|
||||||
|
</a>
|
||||||
|
› <a href="<?php echo "./?blog=$getblog" ?>">
|
||||||
|
<?php
|
||||||
|
// get the blog name
|
||||||
|
echo BlogListGenerator::getName("./blogs/$getblog.md");
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</nobr>
|
||||||
|
<div class="fadeout"></div>
|
||||||
|
<!--
|
||||||
|
if the blog name is to long (especially on mobile devices), a fadeout
|
||||||
|
fades the text out at the end of the header
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
// Blog Intro text
|
||||||
|
if (file_exists("blogs/$blog.md")
|
||||||
|
&& $getarticle == ""
|
||||||
|
&& $config["blog"]["intro"] == "on"
|
||||||
|
&& $gettag == ""
|
||||||
|
) {
|
||||||
|
// only shown if not in article or tag view
|
||||||
|
// and if the blogintro is enabled
|
||||||
|
// get content of the blog file
|
||||||
|
$file = file_get_contents("blogs/$blog.md");
|
||||||
|
// add a line break. necessary if the editor didn't make
|
||||||
|
// one while saving
|
||||||
|
$file = $file . "\n";
|
||||||
|
// basically removing the first line, which contains the blog title
|
||||||
|
$file = substr($file, strpos($file, "\n"));
|
||||||
|
if (strlen($file) > 3) { // if there is no content, don't show the intro
|
||||||
|
?>
|
||||||
|
<section class="card" id="intro">
|
||||||
|
<div class="articletext">
|
||||||
|
<?php // generate the html text from the markdown file
|
||||||
|
$intro = Parsedown::instance()
|
||||||
|
->setBreaksEnabled(true)// with linebreaks
|
||||||
|
->text($file);
|
||||||
|
echo $intro; // PRINTS THE SH****
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TAG VIEW
|
||||||
|
if (isset($gettag)) { // if there's a tag -> tag view
|
||||||
|
// save the content of the directory in the articles variable
|
||||||
|
$articles = scandir($articlesdir, 1);
|
||||||
|
// iterate through all articles
|
||||||
|
foreach ($articles as $article) {
|
||||||
|
// get the article tags
|
||||||
|
$tags = ArticleGenerator::getTags($articlesdir, $article);
|
||||||
|
// if the article has the requested tag
|
||||||
|
if (in_array($gettag, $tags)) {
|
||||||
|
// check if the file is a article file
|
||||||
|
if (strlen($article) >= 3 && substr($article, -3) == ".md") {
|
||||||
|
// generate the article
|
||||||
|
ArticleGenerator::newArticle(
|
||||||
|
$articlesdir,
|
||||||
|
$article,
|
||||||
|
$getblog,
|
||||||
|
$config["design"]["excerpt"],
|
||||||
|
$BLOGLANG["Read More"]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} elseif ($getarticle == "") {
|
||||||
|
// NORMAL VIEW if there's no article request -> normal view
|
||||||
|
// save the content of the directory in the articles variable
|
||||||
|
$articles = scandir($articlesdir, 1);
|
||||||
|
// iterate through this variable
|
||||||
|
$posts_amount = 0;
|
||||||
|
foreach ($articles as $article) {
|
||||||
|
// check if the file is a article file
|
||||||
|
if (strlen($article) >= 3 && substr($article, -3) == ".md") {
|
||||||
|
// generate the article
|
||||||
|
if ($config["design"]["pagination"]) {
|
||||||
|
if ($posts_amount < $pag_max && $posts_amount >= $pag_min) {
|
||||||
|
ArticleGenerator::newArticle(
|
||||||
|
$articlesdir,
|
||||||
|
$article,
|
||||||
|
$getblog,
|
||||||
|
$config["design"]["excerpt"],
|
||||||
|
$BLOGLANG["Read More"]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ArticleGenerator::newArticle(
|
||||||
|
$articlesdir,
|
||||||
|
$article,
|
||||||
|
$getblog,
|
||||||
|
$config["design"]["excerpt"],
|
||||||
|
$BLOGLANG["Read More"]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$posts_amount++;
|
||||||
|
}
|
||||||
|
if ($config["design"]["pagination"]) {
|
||||||
|
include './res/php/Pagination.php';
|
||||||
|
}
|
||||||
|
} elseif (isset($getarticle)) { // ARTICLE VIEW
|
||||||
|
// generate the requested article
|
||||||
|
ArticleGenerator::newArticle(
|
||||||
|
$articlesdir,
|
||||||
|
$getarticle . ".md",
|
||||||
|
$getblog,
|
||||||
|
'off',
|
||||||
|
$BLOGLANG["Read More"]
|
||||||
|
);
|
||||||
|
include './res/php/Disqus.php'; // include disques
|
||||||
|
} else { // SOMETHING STRANGE: THIS SHOULDN'T HAPPEN
|
||||||
|
echo "Some error occured, please go back.";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="footer">
|
||||||
|
<?php echo $config["blog"]["footer"]; //print the blog footer?>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
// show the fab if it's enabled
|
||||||
|
if ($config["design"]["fab"] == "on") {
|
||||||
|
?>
|
||||||
|
<div class="fabmenu">
|
||||||
|
<div class="subfab"><!--Email subfab-->
|
||||||
|
<a href='mailto:?subject=<?php
|
||||||
|
echo $config["blog"]["title"];
|
||||||
|
?>&body=<?php
|
||||||
|
echo $BLOGLANG['Check out this blog'];
|
||||||
|
?>: <?php
|
||||||
|
echo $url;
|
||||||
|
?>' target="blank">
|
||||||
|
<img src="./res/img/email.svg" class="subfab-img"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="subfab"><!--twitter subfav-->
|
||||||
|
<a href='https://twitter.com/intent/tweet?text=<?php
|
||||||
|
echo $BLOGLANG['Check out'];
|
||||||
|
?>: <?php
|
||||||
|
echo $url;
|
||||||
|
?>&original_referer=' target="blank">
|
||||||
|
<img src="./res/img/twitter.svg" class="subfab-img"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="subfab"><!--gplus subfab-->
|
||||||
|
<a href='https://plus.google.com/share?url=<?php
|
||||||
|
echo $url;
|
||||||
|
?>&hl=en-US' target="blank">
|
||||||
|
<img src="./res/img/gplus.svg" class="subfab-img"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="subfab"><!--facebook subfab-->
|
||||||
|
<a href='https://www.facebook.com/sharer/sharer.php?u=<?php
|
||||||
|
echo $url;
|
||||||
|
?>&t=<?php
|
||||||
|
echo "echo " . $config["blog"]["title"];
|
||||||
|
?>' target="blank">
|
||||||
|
<img src="./res/img/facebook.svg" class="subfab-img"/>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="fab"><!-- share fab-->
|
||||||
|
<img src="./res/img/share.svg" class="fab-img" alt="Share"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<script src="./res/js/jquery-2.1.4.min.js"></script> <!-- include jquery-->
|
||||||
|
<script src="./res/js/app.js"></script> <!--include main javascript-->
|
||||||
|
<!-- JS extension support -->
|
||||||
|
<?php
|
||||||
|
if (file_exists("./extensions")) {
|
||||||
|
$extensions = scandir('./extensions');
|
||||||
|
foreach ($extensions as $extension) {
|
||||||
|
if (substr($extension, -3) == ".js") {
|
||||||
|
echo "<script src='./extensions/$extension'></script>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
require './res/php/GoogleAnalytics.php'; // include google analytics
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
12
lang/de.php
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?php
|
||||||
|
// Rangitaki Project
|
||||||
|
// LANGUAGE: GERMAN
|
||||||
|
|
||||||
|
$BLOGLANG = [
|
||||||
|
"Blogs on" => "Blogs auf",
|
||||||
|
"Check out this blog" => "Schau dir diesen Blog an:",
|
||||||
|
"Check out" => "Schau dir das an:",
|
||||||
|
"Next Page" => "Nächste Seite",
|
||||||
|
"Previous Page" => "Vorherige Seite",
|
||||||
|
"Read More" => "Weiterlesen",
|
||||||
|
];
|
12
lang/en.php
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<?php
|
||||||
|
// Rangitaki Project
|
||||||
|
// LANGUAGE: ENGLISH
|
||||||
|
|
||||||
|
$BLOGLANG = [
|
||||||
|
"Blogs on" => "Blogs on",
|
||||||
|
"Check out this blog" => "Check out this blog:",
|
||||||
|
"Check out" => "Check out:",
|
||||||
|
"Next Page" => "Next Page",
|
||||||
|
"Previous Page" => "Previous Page",
|
||||||
|
"Read More" => "Read More",
|
||||||
|
];
|
|
@ -1,25 +0,0 @@
|
||||||
# Localization
|
|
||||||
|
|
||||||
##### For Rangitaki version 1.0.0
|
|
||||||
|
|
||||||
Translating Rangitaki in another language is quite simple, because most of the stuff is set in the config.php. There are just a few strings that are left to translate. Three to be exact.
|
|
||||||
|
|
||||||
A language file looks like this:
|
|
||||||
|
|
||||||
```
|
|
||||||
<?php
|
|
||||||
// Rangitaki Project
|
|
||||||
// LANGUAGE: ENGLISH
|
|
||||||
|
|
||||||
$BLOGLANG = [
|
|
||||||
"Blogs on" => "Blogs on",
|
|
||||||
"Check out this blog" => "Check out this blog:",
|
|
||||||
"Check out" => "Check out:",
|
|
||||||
];
|
|
||||||
```
|
|
||||||
|
|
||||||
The only thing that need to be translated are the words between the marks on the right side of the arrows. NEVER change anyting else.
|
|
||||||
|
|
||||||
Save the translated file as *ln.php*, where ln is your language in short form, just two letters (e.g. en for english, de for german).
|
|
||||||
|
|
||||||
Then commit your changes to GitHub (see the contributing documentation <!--TODO link-->) or send it to marcelmichaelkapfer@yahoo.co.nz.
|
|
BIN
media/example.png
Normal file
After Width: | Height: | Size: 63 KiB |
37
package.json
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
"name": "rangitaki",
|
||||||
|
"version": "1.5.0",
|
||||||
|
"description": "A simple PHP blogging engine without any database dependencies",
|
||||||
|
"main": "index.php",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+ssh://git@gitlab.com/mmk2410/rangitaki.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"blogging",
|
||||||
|
"php"
|
||||||
|
],
|
||||||
|
"author": "Marcel Kapfer (mmk2410)",
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://gitlab.com/mmk2410/rangitaki/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://gitlab.com/mmk2410/rangitaki#README",
|
||||||
|
"devDependencies": {
|
||||||
|
"coffee-script": "^1.10.0",
|
||||||
|
"del": "^2.2.0",
|
||||||
|
"gulp": "^3.9.1",
|
||||||
|
"gulp-coffee": "^2.3.2",
|
||||||
|
"gulp-coffeelint": "^0.6.0",
|
||||||
|
"gulp-csso": "^2.0.0",
|
||||||
|
"gulp-sass": "^2.3.1",
|
||||||
|
"gulp-size": "^2.1.0",
|
||||||
|
"gulp-sourcemaps": "^2.0.0-alpha",
|
||||||
|
"gulp-uglify": "^1.5.3",
|
||||||
|
"merge-stream": "^1.0.0",
|
||||||
|
"node-sass": "^3.7.0"
|
||||||
|
}
|
||||||
|
}
|
234
quick.md
|
@ -1,234 +0,0 @@
|
||||||
# Quick start Guide
|
|
||||||
|
|
||||||
##### For Rangitaki version 1.0
|
|
||||||
|
|
||||||
This guide shows you how to setup Rangitaki and it teaches you the basic use. After this guide you're ready to use Rangitaki as your blogging engine. Since this is a quick starting guide I won't explain every single option. Please read the full documentation <!--TODO Link to full documentation--> for more information.
|
|
||||||
|
|
||||||
To fully customize your Rangitaki installation read also the localization guide and the theming guide. <!--TODO links to both -->
|
|
||||||
|
|
||||||
For more professional blogging (like online blog post upload) read the RCC documentation. <!--TODO link -->
|
|
||||||
|
|
||||||
## Content
|
|
||||||
1. Requirements
|
|
||||||
|
|
||||||
2. Installation
|
|
||||||
|
|
||||||
1. Download
|
|
||||||
|
|
||||||
2. Extract
|
|
||||||
|
|
||||||
3. Setup
|
|
||||||
|
|
||||||
1. Configuration
|
|
||||||
|
|
||||||
2. Files and Directories
|
|
||||||
|
|
||||||
4. Writing blog posts
|
|
||||||
|
|
||||||
1. Tags
|
|
||||||
|
|
||||||
2. Markdown
|
|
||||||
|
|
||||||
5. Publishing
|
|
||||||
|
|
||||||
|
|
||||||
## 1. Requirements
|
|
||||||
|
|
||||||
#### Software
|
|
||||||
|
|
||||||
Rangitaki needs just a **Web Server** like the Apache HTTP Server or nginx and a **PHP** installation. You *don't need a MySQL (or any other database) installation*.
|
|
||||||
|
|
||||||
To test if you're server has a PHP installation, create a file name `info.php` and copy the follwing code into it, upload the file to your web directory and access it through a browser.
|
|
||||||
|
|
||||||
```
|
|
||||||
<?php phpinfo(); ?>
|
|
||||||
```
|
|
||||||
|
|
||||||
If you're seeing an white, empty page you have no PHP installation. Otherwise you have one and you can get many information about this from this page.
|
|
||||||
|
|
||||||
Furthermore you need a good text editor for editing the configuration files a nd writing blog posts.. Either on your private computer, if you configure your Rangitaki installation at home, or on your server.
|
|
||||||
|
|
||||||
#### Skills
|
|
||||||
|
|
||||||
You must know how to upload files and directories to your server and how to use a text editor. That's all.
|
|
||||||
|
|
||||||
## 2. Installation
|
|
||||||
|
|
||||||
### 1. Download
|
|
||||||
|
|
||||||
Download the current version of Rangitaki either from [here](http://marcel-kapfer.de/rangitaki) <!--TODO add link --> or from the [GitHub releases page](https://github.com/mmk2410/Rangitaki/releases). I recommend you to download a release version and not to clone the project from GitHub (at least not for daily use), because of possible security and instability.
|
|
||||||
|
|
||||||
### 2. Extract
|
|
||||||
|
|
||||||
#### Linux
|
|
||||||
|
|
||||||
If you got a `.tar.gz` file:
|
|
||||||
|
|
||||||
Fire up a terminal and run this:
|
|
||||||
|
|
||||||
```
|
|
||||||
tar -xvzf rangitaki.tar.gz
|
|
||||||
```
|
|
||||||
|
|
||||||
If you got a `.zip` file:
|
|
||||||
|
|
||||||
Fire up a terminal and run this:
|
|
||||||
|
|
||||||
```
|
|
||||||
unzip rangitaki.zip
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Mac
|
|
||||||
|
|
||||||
Just double click the archive.
|
|
||||||
|
|
||||||
#### Windows
|
|
||||||
|
|
||||||
If you got a `.zip` file:
|
|
||||||
|
|
||||||
Just right click that archive and click extract.
|
|
||||||
|
|
||||||
If you got a `.tar.gz` file:
|
|
||||||
|
|
||||||
Download and install [7-zip](http://www.7-zip.org/).
|
|
||||||
|
|
||||||
Right click the archive. 7-Zip > Extract here
|
|
||||||
|
|
||||||
## 3. Setup
|
|
||||||
|
|
||||||
The setup of Rangitaki is as easy as downloading it.
|
|
||||||
|
|
||||||
Again, I will only explain a few options here. For more, read the full documentation <!--TODO link to full documentation-->
|
|
||||||
|
|
||||||
|
|
||||||
### 1. Configuration
|
|
||||||
|
|
||||||
There one configuration file for Rangitaki. It is located at the root of the extracted Rangitaki folder and has the name `config.php`. Open it with a text editor of your choice.
|
|
||||||
|
|
||||||
The different options in the file follow this structure:
|
|
||||||
|
|
||||||
```
|
|
||||||
// Comment describing the following option
|
|
||||||
$option = 'some text or yes or no. mind the marks and the semicolon';
|
|
||||||
```
|
|
||||||
|
|
||||||
Don't delete the marks or the semicolon. Otherwise your Rangitaki installation will not work! Also don't delete the `<?php` at the beginning of the file.
|
|
||||||
|
|
||||||
The important and necessary options for your blog are:
|
|
||||||
|
|
||||||
#### $blogtitle
|
|
||||||
|
|
||||||
Set here the title of your blog. This name will appear in the blog header and is also the page title.
|
|
||||||
|
|
||||||
#### $blogauthor
|
|
||||||
|
|
||||||
Set here your name - or the name of the person who writes the blog. This setting is mainly used if the blog is shared in social networks. The author of blog posts can be set directly in the blog post.
|
|
||||||
|
|
||||||
#### $blogdescription
|
|
||||||
|
|
||||||
Write here a short blog description. This description will appear if the blog is shared in a social network.
|
|
||||||
|
|
||||||
#### $bloghome
|
|
||||||
|
|
||||||
Set 'yes' if you have a main page and the blog is just a subpage. If the blog is the main page, then set 'no'.
|
|
||||||
|
|
||||||
#### $bloghomeurl
|
|
||||||
|
|
||||||
Only necessary if $bloghome is set to 'yes'.
|
|
||||||
|
|
||||||
Set here the path to your main page. Either relative (e.g. `../`) or absolute (e.g. `/www/`) or as a link (e.g `http://marcel-kapfer.de/rangitaki`).
|
|
||||||
|
|
||||||
#### $blogintro
|
|
||||||
|
|
||||||
If set to 'yes', the text of the blog markdown file is shown at the beginning of the blog. If you don't want this, then change it to 'no'.
|
|
||||||
|
|
||||||
#### $blogfooter
|
|
||||||
|
|
||||||
Set here your own personal footer text. It is shown at the bottom of every page.
|
|
||||||
|
|
||||||
#### $language
|
|
||||||
|
|
||||||
Set here the language of your blog (e.g. 'en', 'de', ...). If your language is available, it will be used, otherwise English is used. You can also translate it Rangitaki into your language, which is quite simple and quickly done. Read the localization guide for more <!--TODO link to localization guide-->.
|
|
||||||
|
|
||||||
#### $favicon
|
|
||||||
|
|
||||||
Set here the URL to your favicon. Not a relative path or a absolute one, but the URL (e.g. 'http://example.com/favicon.png').
|
|
||||||
|
|
||||||
|
|
||||||
### 2. Files and Directories
|
|
||||||
|
|
||||||
Here a few words about some files and directories in Rangitaki. All directories and files are covered in the full documentation <!--TODO link to full documentation -->
|
|
||||||
|
|
||||||
#### /articles
|
|
||||||
|
|
||||||
This is the directory where the blog post for the different blogs are stored. There are already a few example directories, which you can delete if you don't need them.
|
|
||||||
|
|
||||||
#### /articles/blog (e.g. /articles/main)
|
|
||||||
|
|
||||||
The directory where the articles for that blog are stored. You have at least one directory name 'main' where the markdown files for your main blog are stored.
|
|
||||||
|
|
||||||
There are already a few example blog posts. You can look at them to learn how Rangitaki blog posts are written or you can simply delete them.
|
|
||||||
|
|
||||||
#### /blogs
|
|
||||||
|
|
||||||
The files for your different blogs are stored here. You can have a look at them to learn how to create a new subblog or simply delete them, but **DON'T DELETE THE main.md!**
|
|
||||||
|
|
||||||
#### /media
|
|
||||||
|
|
||||||
This is a directory where you can store your used assets. You don't have to store them but it is recommended since it keeps the whole system organized.
|
|
||||||
|
|
||||||
**When you are including a image, video, whatever in your Markdown blog post you have to use a relative path based from the Rangitaki blog main directory, not from the directory of your Markdown file**
|
|
||||||
|
|
||||||
You can delete the example file.
|
|
||||||
|
|
||||||
#### config.php
|
|
||||||
|
|
||||||
This is the configuration file. I already explained that one.
|
|
||||||
|
|
||||||
## 4. Writing blog posts
|
|
||||||
|
|
||||||
Writing blog posts in Rangitaki is quite simple. The text is written in markdown and important information about blog posts are written with special tags.
|
|
||||||
|
|
||||||
### 1. Tags
|
|
||||||
|
|
||||||
In Rangitaki 1.0 there are four tags you can use. You don't have to use any tags.
|
|
||||||
|
|
||||||
Tags have to following structure:
|
|
||||||
|
|
||||||
```
|
|
||||||
%TAGNAME: Some text
|
|
||||||
```
|
|
||||||
|
|
||||||
#### %TITLE
|
|
||||||
|
|
||||||
Set here the title of your blog post.
|
|
||||||
|
|
||||||
#### %DATE
|
|
||||||
|
|
||||||
Set here the date of your blog post. You don't have to care about some format. Just set it like you want
|
|
||||||
|
|
||||||
#### %AUTHOR
|
|
||||||
|
|
||||||
Set here the name of the author of the blog post.
|
|
||||||
|
|
||||||
#### %TAGS
|
|
||||||
|
|
||||||
Set here some tags, that descripe the blog post.
|
|
||||||
|
|
||||||
There separated through a ', ' (mind the space).
|
|
||||||
|
|
||||||
### 2. Markdown
|
|
||||||
|
|
||||||
Writing the text itself is also very simple. The blogging engine supports Markdown and also GitHub flavored markdown <!--TODO links to both of them-->. But you can also just wite a blogpost and don't care about formatting.
|
|
||||||
|
|
||||||
## 5. Publishing
|
|
||||||
|
|
||||||
You are now done with the setup of the blog and you also wrote a first blog post. If you did this stuff directly on your server, visit this page with a web broswer and you see your Rangitaki blog.
|
|
||||||
|
|
||||||
If you did this on your private machine, then upload the content of the Rangitaki directory to your server.
|
|
||||||
|
|
||||||
You're done now! You're Rangitaki blog is running.
|
|
||||||
|
|
||||||
For more information, read the full documentation, the FAQ and the other documentations.
|
|
||||||
|
|
||||||
<!--TODO links-->
|
|
23
rcc.md
|
@ -1,23 +0,0 @@
|
||||||
# RCC Documentation
|
|
||||||
|
|
||||||
##### For Rangitaki version 1.0.0
|
|
||||||
|
|
||||||
## Content
|
|
||||||
|
|
||||||
1. Initializing
|
|
||||||
|
|
||||||
2. Usage
|
|
||||||
|
|
||||||
## 1 Initializing
|
|
||||||
|
|
||||||
The RCC is not enabled by default, because you have to set a password first.
|
|
||||||
|
|
||||||
Open the file at `/rcc/password.php` and change the password variable to your password. Storing your password in this PHP file secure, because your PHP web server renders the file if someone accesses it and since the password is just saved in a variable but not printed, no one can see it through the web.
|
|
||||||
|
|
||||||
After you set the password open your `/config.php` and enable the RCC by setting `$rcc = "yes";`
|
|
||||||
|
|
||||||
Access now the website at *http://yourdomain.tl/blog/rcc* and see if it works.
|
|
||||||
|
|
||||||
## 2 Usage
|
|
||||||
|
|
||||||
In Rangitaki 1.0.0 the RCC has only one functionality: Uploading posts files (*.md*). Select the blog first and the click on "Browse", select your file and click on upload. You see a message, if the upload was possible.
|
|
22
rcc/api/auth/auth.php
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
// Marcel Kapfer (mmk2410)
|
||||||
|
// License: MIT License
|
||||||
|
// HTTP Basic Auth for the API
|
||||||
|
|
||||||
|
$basedir = "../../../";
|
||||||
|
|
||||||
|
require '../../ssl.php';
|
||||||
|
|
||||||
|
require '../../password.php';
|
||||||
|
|
||||||
|
if (!isset($_SERVER['PHP_AUTH_USER'])) {
|
||||||
|
header('WWW-Authenticate: Basic realm="RCC API"');
|
||||||
|
header('HTTP/1.1 401 Unauthorized');
|
||||||
|
echo "Access denied to the RCC API!";
|
||||||
|
exit;
|
||||||
|
} elseif ($_SERVER['PHP_AUTH_USER'] != $username ||
|
||||||
|
!password_verify($_SERVER['PHP_AUTH_PW'], $password)) {
|
||||||
|
header('HTTP/1.1 401 Unauthorized');
|
||||||
|
echo "Wrong credentials: Access denied!";
|
||||||
|
exit;
|
||||||
|
}
|
59
rcc/api/list/index.php
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
// Marcel Kapfer (mmk2410)
|
||||||
|
// License: MIT License
|
||||||
|
// api for fetching various lists
|
||||||
|
|
||||||
|
use \Psr\Http\Message\ServerRequestInterface as Request;
|
||||||
|
use \Psr\Http\Message\ResponseInterface as Response;
|
||||||
|
|
||||||
|
require '../../../vendor/autoload.php';
|
||||||
|
require '../../../res/php/Config.php';
|
||||||
|
|
||||||
|
use \mmk2410\rbe\config\Config as Config;
|
||||||
|
|
||||||
|
$config = new Config("../../../config.yaml", '../../../vendor/autoload.php');
|
||||||
|
$settings = $config->getConfig();
|
||||||
|
|
||||||
|
include '../auth/auth.php';
|
||||||
|
|
||||||
|
if ($settings["rcc"]["api"] == "on" && $settings["rcc"]["rcc"] == "on") {
|
||||||
|
$app = new \Slim\App();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* api for get the list of blogs and if $_GET["blog"] is set the list of
|
||||||
|
* blogs posts in that blog
|
||||||
|
*
|
||||||
|
* @param string $_GET["blog"] optional name of the blog
|
||||||
|
*
|
||||||
|
* @return JSON json string containing the blogs / blog posts
|
||||||
|
*/
|
||||||
|
$app->get('/', function (Request $request, Response $response) {
|
||||||
|
$blog = $_GET["blog"];
|
||||||
|
|
||||||
|
|
||||||
|
if (!isset($blog)) {
|
||||||
|
$files = scandir('../../../blogs/', SCANDIR_SORT_DESCENDING);
|
||||||
|
|
||||||
|
unset($files[sizeof($files) - 1]);
|
||||||
|
unset($files[sizeof($files) - 1]);
|
||||||
|
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($files, 201);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
$path = "../../../articles/" . $blog . "/";
|
||||||
|
|
||||||
|
$files = scandir($path, SCANDIR_SORT_DESCENDING);
|
||||||
|
|
||||||
|
unset($files[sizeof($files) - 1]);
|
||||||
|
unset($files[sizeof($files) - 1]);
|
||||||
|
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($files, 201);
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
});
|
||||||
|
|
||||||
|
$app->run();
|
||||||
|
}
|
48
rcc/api/media/index.php
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
// Marcel Kapfer (mmk2410)
|
||||||
|
// License: MIT License
|
||||||
|
// api for uploading files
|
||||||
|
|
||||||
|
use \Psr\Http\Message\ServerRequestInterface as Request;
|
||||||
|
use \Psr\Http\Message\ResponseInterface as Response;
|
||||||
|
|
||||||
|
require '../../../vendor/autoload.php';
|
||||||
|
require '../../../res/php/Config.php';
|
||||||
|
require '../../../res/php/ArticleGenerator.php';
|
||||||
|
|
||||||
|
use \mmk2410\rbe\config\Config as Config;
|
||||||
|
|
||||||
|
$config = new Config("../../../config.yaml", '../../../vendor/autoload.php');
|
||||||
|
$settings = $config->getConfig();
|
||||||
|
|
||||||
|
include '../auth/auth.php';
|
||||||
|
|
||||||
|
if ($settings["rcc"]["api"] == "on" && $settings["rcc"]["rcc"] == "on") {
|
||||||
|
$app = new \Slim\App();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* api for uploading files
|
||||||
|
*
|
||||||
|
* @return JSON json string with status
|
||||||
|
*/
|
||||||
|
$app->post('/', function (Request $request, Response $response) {
|
||||||
|
$storage = new \Upload\Storage\FileSystem('../../../media/');
|
||||||
|
$file = new \Upload\File('file', $storage);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$file->upload();
|
||||||
|
$data = array("code" => 201);
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 201);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$errors = $file->getErrors();
|
||||||
|
$data = array("code" => 500, "error" => $Errors);
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
});
|
||||||
|
|
||||||
|
$app->run();
|
||||||
|
}
|
141
rcc/api/post/index.php
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
<?php
|
||||||
|
// Marcel Kapfer (mmk2410)
|
||||||
|
// License: MIT License
|
||||||
|
// api for accessing blog posts
|
||||||
|
|
||||||
|
use \Psr\Http\Message\ServerRequestInterface as Request;
|
||||||
|
use \Psr\Http\Message\ResponseInterface as Response;
|
||||||
|
|
||||||
|
require '../../../vendor/autoload.php';
|
||||||
|
require '../../../res/php/Config.php';
|
||||||
|
require '../../../res/php/ArticleGenerator.php';
|
||||||
|
|
||||||
|
use \mmk2410\rbe\config\Config as Config;
|
||||||
|
|
||||||
|
$config = new Config("../../../config.yaml", '../../../vendor/autoload.php');
|
||||||
|
$settings = $config->getConfig();
|
||||||
|
|
||||||
|
include '../auth/auth.php';
|
||||||
|
|
||||||
|
if ($settings["rcc"]["api"] == "on" && $settings["rcc"]["rcc"] == "on") {
|
||||||
|
$app = new \Slim\App();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* api for fetching a blog post
|
||||||
|
*
|
||||||
|
* @param string $_GET["blog"] name of the blog
|
||||||
|
* @param string $_GET["post"] filename of the blog post
|
||||||
|
*
|
||||||
|
* @return JSON json string containing the blog post
|
||||||
|
*/
|
||||||
|
$app->get('/', function (Request $request, Response $response) {
|
||||||
|
$blog = $_GET["blog"];
|
||||||
|
$post = $_GET["post"];
|
||||||
|
|
||||||
|
if (!isset($blog) || !isset($post)) {
|
||||||
|
$data = array('code' => 400, 'status' => 'Bad Request', 'error' => 'Not enough arguments');
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 400);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
$path = "../../../articles/" . $blog . "/";
|
||||||
|
$data =
|
||||||
|
ArticleGenerator::getArray($path, $post);
|
||||||
|
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 201);
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* api for changing/creating a blog post
|
||||||
|
*
|
||||||
|
* @param string $_POST["data"] all data
|
||||||
|
*/
|
||||||
|
$app->post('/', function (Request $request, Response $response) {
|
||||||
|
$blog = $_POST["blog"];
|
||||||
|
$post = $_POST["post"];
|
||||||
|
$title = $_POST["title"];
|
||||||
|
$author = $_POST["author"];
|
||||||
|
$date = $_POST["date"];
|
||||||
|
$tags = $_POST["tags"];
|
||||||
|
$text = $_POST["text"];
|
||||||
|
|
||||||
|
if (!isset($blog) || !isset($post) || (!isset($title) && !isset($text))) {
|
||||||
|
$data = array('code' => 400, 'status' => 'Bad Request', 'error' => 'Not enough arguments');
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 400);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
$text = str_replace('\n', '<br>', $text);
|
||||||
|
|
||||||
|
$md = <<<EOD
|
||||||
|
%TITLE: $title
|
||||||
|
%DATE: $date
|
||||||
|
%AUTHOR: $author
|
||||||
|
%TAGS: $tags
|
||||||
|
|
||||||
|
$text
|
||||||
|
EOD;
|
||||||
|
|
||||||
|
$path = "../../../articles/$blog/$post";
|
||||||
|
if (file_put_contents($path, $md)) {
|
||||||
|
$data = array('code' => 201, 'status' => 'Post created successfully');
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 201);
|
||||||
|
} else {
|
||||||
|
$data = array('code' => 500, 'status' => 'Internal server error');
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* api for deleting a blog post
|
||||||
|
*
|
||||||
|
* @param string $_GET["blog"] name of the blog
|
||||||
|
* @param string $_GET["post"] filename of the blog post
|
||||||
|
*
|
||||||
|
* @return JSON json string containing the blog post
|
||||||
|
*/
|
||||||
|
$app->delete('/', function (Request $request, Response $response) {
|
||||||
|
$blog = $_GET["blog"];
|
||||||
|
$post = $_GET["post"];
|
||||||
|
|
||||||
|
if (!isset($blog) || !isset($post)) {
|
||||||
|
$data = array('code' => 400, 'status' => 'Bad Request', 'error' => 'Not enough arguments');
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 400);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
$path = "../../../articles/$blog/$post";
|
||||||
|
|
||||||
|
if (!file_exists($path)) {
|
||||||
|
$data = array('code' => 400, 'status' => 'Bad Request', 'error' => 'No such file');
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 400);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!unlink($path)) {
|
||||||
|
$data = array('code' => 500, 'status' => 'Bad Request', 'error' => 'Internal server error');
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 500);
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = array('code' => 201, 'status' => 'File successfully deleted');
|
||||||
|
$response = $response->withHeader('Content-type', 'application/json');
|
||||||
|
$response = $response->withJson($data, 201);
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
});
|
||||||
|
|
||||||
|
$app->run();
|
||||||
|
}
|
172
rcc/edit/index.php
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://mmk2410.org/rangitaki
|
||||||
|
*
|
||||||
|
* Edit page of RCC (Rangitaki Control Center)
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
date_default_timezone_set('UTC');
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>Rangitaki Control Center</title>
|
||||||
|
|
||||||
|
<meta name="robots" content="nofollow, noindex, noarchive, nosnippet">
|
||||||
|
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
|
||||||
|
user-scalable=0" name="viewport"/>
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#383838">
|
||||||
|
<meta name="description" content="Rangitaki Control Center (RCC)">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../res/rcc.css"/>
|
||||||
|
|
||||||
|
<link href='//fonts.googleapis.com/css?family=Roboto:400,500,700,300,
|
||||||
|
400italic,100,100italic,900' rel='stylesheet'
|
||||||
|
type='text/css'> <!--Font-->
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="header">
|
||||||
|
<a href="../" class="title">Rangitaki Control Center</a>
|
||||||
|
</div>
|
||||||
|
<div class="main">
|
||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
if ($_SESSION['login']) {
|
||||||
|
include_once "../../res/php/ArticleGenerator.php";
|
||||||
|
$directory = "./../../articles/" . $_GET['blog'] . "/";
|
||||||
|
$article = $_GET['post'] . ".md";
|
||||||
|
?>
|
||||||
|
<!-- Edit Post -->
|
||||||
|
<section class="card">
|
||||||
|
|
||||||
|
<div class="headline">Edit Post</div>
|
||||||
|
|
||||||
|
<p>Title:
|
||||||
|
<br><br>
|
||||||
|
<input type="text" class="itextfield"
|
||||||
|
value="<?php
|
||||||
|
echo ArticleGenerator::getTitle($directory, $article);
|
||||||
|
?>" name="title" id="title"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Date:
|
||||||
|
<br><br>
|
||||||
|
<input type="text" class="itextfield"
|
||||||
|
value="<?php
|
||||||
|
echo ArticleGenerator::getDate($directory, $article);
|
||||||
|
?>" name="date" id="date"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Author:
|
||||||
|
<br><br>
|
||||||
|
<input type="text" class="itextfield"
|
||||||
|
value="<?php
|
||||||
|
echo ArticleGenerator::getAuthor($directory, $article);
|
||||||
|
?>" name="author" id="author"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Tags:
|
||||||
|
<br><br>
|
||||||
|
<input type="text" class="itextfield"
|
||||||
|
value="<?php
|
||||||
|
$tags = "";
|
||||||
|
foreach (
|
||||||
|
ArticleGenerator::getTags($directory, $article)
|
||||||
|
as $tag) {
|
||||||
|
$tags = $tags . ', ' . $tag;
|
||||||
|
}
|
||||||
|
$tags = substr($tags, 2);
|
||||||
|
echo $tags;
|
||||||
|
?>" name="tags" id="tags"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Text:</p>
|
||||||
|
<textarea class="itextarea" name="text" id="text">
|
||||||
|
<?php
|
||||||
|
echo ArticleGenerator::getText($directory, $article);
|
||||||
|
?>
|
||||||
|
</textarea>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
<a class="button" id="save_changes">SAVE CHANGES</a>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Go Back -->
|
||||||
|
<section class="card">
|
||||||
|
|
||||||
|
<div class="headline">Back</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Go back to the RCC home. All changes will be lost.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a class="button" href="../">BACK</a>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- Access denied -->
|
||||||
|
<section class="card">
|
||||||
|
|
||||||
|
<div class="headline">Access denied</div>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The access to this area is not granted. Make sure you're logged
|
||||||
|
in.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a class="button" href="../">BACK</a>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var getVariables = <?php echo json_encode($_GET); ?>;
|
||||||
|
</script>
|
||||||
|
<script src="../../res/js/jquery-2.1.4.min.js"></script>
|
||||||
|
<script src="../res/rcc.js"></script>
|
||||||
|
<script src="../res/edit.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
148
rcc/feed/index.php
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Atom_Feed
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://gitlab.com/mmk2410/rangitaki
|
||||||
|
*
|
||||||
|
* Feed Generator
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 - 2016 (c) mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
date_default_timezone_set('UTC');
|
||||||
|
|
||||||
|
require "../../vendor/autoload.php";
|
||||||
|
require "../../res/php/Config.php";
|
||||||
|
require_once "../../res/php/ArticleGenerator.php";
|
||||||
|
use PicoFeed\Syndication\AtomFeedBuilder;
|
||||||
|
use PicoFeed\Syndication\AtomItemBuilder;
|
||||||
|
use \mmk2410\rbe\config\Config as Config;
|
||||||
|
|
||||||
|
$config = new Config('../../config.yaml', '../../vendor/autoload.php');
|
||||||
|
$settings = $config->getConfig();
|
||||||
|
|
||||||
|
include '../ssl.php';
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
if ($_SESSION['login']) {
|
||||||
|
$art_dir = "./../../articles/" . $_GET['blog'] . "/";
|
||||||
|
$feed_path = "./../../feed/" . $_GET['blog'] . ".atom";
|
||||||
|
|
||||||
|
if ($_GET['blog'] == "main") {
|
||||||
|
$blogtitle = $settings['blog']['title'];
|
||||||
|
} else {
|
||||||
|
$blogtitl = $settings['blog']['title'] . " - " . ucwords($_GET['blog']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$feedBuilder = AtomFeedBuilder::create()
|
||||||
|
->withTitle($blogtitle)
|
||||||
|
->withAuthor($settings['blog']['author'])
|
||||||
|
->withFeedUrl($settings['blog']['url'] . "/feed/" . $_GET['blog'] . ".atom")
|
||||||
|
->withSiteUrl($settings['blog']['url'])
|
||||||
|
->withDate(new DateTime(date(DATE_ATOM)));
|
||||||
|
|
||||||
|
$articles = scandir($art_dir, 1);
|
||||||
|
|
||||||
|
$amount = 0;
|
||||||
|
|
||||||
|
foreach ($articles as $article) {
|
||||||
|
if (strlen($article) >= 3 && substr($article, -3) == ".md") {
|
||||||
|
if ($amount == 10) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
$file = ArticleGenerator::getText($art_dir, $article);
|
||||||
|
$text = Parsedown::instance()
|
||||||
|
->setBreaksEnabled(true)// with linebreaks
|
||||||
|
->text($file);
|
||||||
|
if (new DateTime(date(DATE_ATOM, strtotime($datestring))) != null) {
|
||||||
|
$date = new DateTime(
|
||||||
|
date(
|
||||||
|
DATE_ATOM,
|
||||||
|
strtotime($datestring)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$date = new DateTime(date(DATE_ATOM));
|
||||||
|
}
|
||||||
|
$date = new DateTime(date(DATE_ATOM));
|
||||||
|
$feedBuilder
|
||||||
|
->withItem(AtomItemBuilder::create($feedBuilder)
|
||||||
|
->withTitle(
|
||||||
|
ArticleGenerator::getTitle($art_dir, $article)
|
||||||
|
)
|
||||||
|
->withUrl(
|
||||||
|
$settings['blog']['url'] . "./?article=" . substr($article, 0, strlen($article) - 3)
|
||||||
|
)
|
||||||
|
->withAuthor(
|
||||||
|
ArticleGenerator::getAuthor($art_dir, $article)
|
||||||
|
)
|
||||||
|
->withPublishedDate(
|
||||||
|
parseDate(ArticleGenerator::getDate($art_dir, $article))
|
||||||
|
)
|
||||||
|
->withUpdatedDate(
|
||||||
|
parseDate(ArticleGenerator::getDate($art_dir, $article))
|
||||||
|
)
|
||||||
|
->withSummary(
|
||||||
|
ArticleGenerator::getSummary($art_dir, $article)
|
||||||
|
)
|
||||||
|
->withContent($text));
|
||||||
|
$amount += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$feed = $feedBuilder->build();
|
||||||
|
|
||||||
|
$file = fopen($feed_path, "w");
|
||||||
|
|
||||||
|
if (fwrite($file, $feed) === false) {
|
||||||
|
echo "-1";
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose($file);
|
||||||
|
|
||||||
|
echo "0";
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseDate($datestring)
|
||||||
|
{
|
||||||
|
$datetime = new DateTime(date(DATE_ATOM));
|
||||||
|
try {
|
||||||
|
$datetime = new DateTime(
|
||||||
|
date(
|
||||||
|
DATE_ATOM,
|
||||||
|
strtotime($datestring)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$datetime = new DateTime(date(DATE_ATOM));
|
||||||
|
}
|
||||||
|
return $datetime;
|
||||||
|
}
|
326
rcc/index.php
Normal file
|
@ -0,0 +1,326 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://mmk2410.org/rangitaki
|
||||||
|
*
|
||||||
|
* Main page of RCC (Rangitaki Control Center)
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require '../vendor/autoload.php';
|
||||||
|
require '../res/php/Config.php';
|
||||||
|
require "./../res/php/BlogListGenerator.php";
|
||||||
|
|
||||||
|
use \mmk2410\rbe\config\Config as Config;
|
||||||
|
use mmk2410\rbe\BlogListGenerator\BlogListGenerator as BlogListGenerator;
|
||||||
|
|
||||||
|
$config = new Config("../config.yaml", '../vendor/autoload.php');
|
||||||
|
$settings = $config->getConfig();
|
||||||
|
|
||||||
|
include './ssl.php';
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>Rangitaki Control Center</title>
|
||||||
|
|
||||||
|
<meta name="robots" content="nofollow, noindex, noarchive, nosnippet">
|
||||||
|
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
|
||||||
|
user-scalable=0" name="viewport"/>
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#383838">
|
||||||
|
<meta name="description" content="Rangitaki Control Center (RCC)">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="./res/rcc.css"/>
|
||||||
|
|
||||||
|
<link href='//fonts.googleapis.com/css?family=Roboto:400,500,700,300,
|
||||||
|
400italic,100,100italic,900' rel='stylesheet'
|
||||||
|
type='text/css'> <!--Font-->
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<a href="./" class="title">Rangitaki Control Center</a>
|
||||||
|
<a href="../" class="back">Back to the blog</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="main">
|
||||||
|
<?php
|
||||||
|
$config = $settings;
|
||||||
|
|
||||||
|
if ($config["rcc"]["rcc"] == "on") {
|
||||||
|
include 'password.php';
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
if (isset($_POST['passwd'])) {
|
||||||
|
$passwd = $_POST['passwd'];
|
||||||
|
$_SESSION['passwd'] = $_POST['passwd'];
|
||||||
|
} elseif (isset($_SESSION['passwd'])) {
|
||||||
|
$passwd = $_SESSION['passwd'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($passwd == "") {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- Login Card -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Log In</div>
|
||||||
|
<form action="./" method="post">
|
||||||
|
<p>Password:
|
||||||
|
<br><br>
|
||||||
|
<input type="password" class="itextfield" name="passwd"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<input type="Submit" class="button" value="Log in"/>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
if (password_verify($passwd, $password)) {
|
||||||
|
$_SESSION['login'] = true;
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- Post Upload -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Post Upload</div>
|
||||||
|
<form enctype="multipart/form-data" action="uploaded/"
|
||||||
|
method="POST">
|
||||||
|
|
||||||
|
<select name="blog">
|
||||||
|
<?php
|
||||||
|
$blogs = scandir("../blogs/");
|
||||||
|
foreach ($blogs as $blog) {
|
||||||
|
if (strlen($blog) >= 3 && substr($blog, -3) == ".md") {
|
||||||
|
if (BlogListGenerator::getExternalLink($blog, '../') == null) {
|
||||||
|
$blog = substr($blog, 0, -3);
|
||||||
|
echo "<option value='$blog'>$blog</option>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<input type="hidden" name="MAX_FILE_SIZE" value="100000"/>
|
||||||
|
<input id="" name="userfile" type="file" value="Choose a file"/>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<input id="button" type="submit" value="Upload" class="button"/>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- New Post -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">New Post</div>
|
||||||
|
<form action="newpost/" method="POST">
|
||||||
|
<p>Blog:</p>
|
||||||
|
<select name="blog">
|
||||||
|
<?php
|
||||||
|
$blogs = scandir("../blogs/");
|
||||||
|
foreach ($blogs as $blog) {
|
||||||
|
if (strlen($blog) >= 3 && substr($blog, -3) == ".md") {
|
||||||
|
if (BlogListGenerator::getExternalLink($blog, '../') == null) {
|
||||||
|
$blog = substr($blog, 0, -3);
|
||||||
|
echo "<option value='$blog'>$blog</option>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<p>Title:
|
||||||
|
<br><br>
|
||||||
|
<input type="text" class="itextfield" name="title"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Date:
|
||||||
|
<br><br>
|
||||||
|
<input type="text" class="itextfield" name="date"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Author:
|
||||||
|
<br><br>
|
||||||
|
<input type="text" class="itextfield" name="author"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Tags:
|
||||||
|
<br><br>
|
||||||
|
<input type="text" class="itextfield" name="tags"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>Text:</p>
|
||||||
|
<textarea class="itextarea" name="text"></textarea>
|
||||||
|
<br><br>
|
||||||
|
<input id="button" type="submit" value="Post"
|
||||||
|
class="button"/>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Edit post -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Edit post</div>
|
||||||
|
<p>
|
||||||
|
First select the blog of the post you wan't to edit.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p id="edit_select_blog">
|
||||||
|
<select name="blog" id="edit_selected_blog">
|
||||||
|
<?php
|
||||||
|
$blogs = scandir("../blogs/");
|
||||||
|
foreach ($blogs as $blog) {
|
||||||
|
if (strlen($blog) >= 3 && substr($blog, -3) == ".md") {
|
||||||
|
if (BlogListGenerator::getExternalLink($blog, '../') == null) {
|
||||||
|
$blog = substr($blog, 0, -3);
|
||||||
|
echo "<option value='$blog'>$blog</option>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</p>
|
||||||
|
<a class="button" id="edit_get_posts">GET POSTS</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Delete Post -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Delete Post</div>
|
||||||
|
<p>
|
||||||
|
First select the subblog of the post you want to delete.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p id="delete_select_blog">
|
||||||
|
<select name="blog" id="delete_selected_blog">
|
||||||
|
<?php
|
||||||
|
$blogs = scandir("../blogs/");
|
||||||
|
foreach ($blogs as $blog) {
|
||||||
|
if (strlen($blog) >= 3 && substr($blog, -3) == ".md") {
|
||||||
|
if (BlogListGenerator::getExternalLink($blog, '../') == null) {
|
||||||
|
$blog = substr($blog, 0, -3);
|
||||||
|
echo "<option value='$blog'>$blog</option>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</p>
|
||||||
|
<a class="button" id="delete_get_posts">GET POSTS</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Media Upload -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Media Upload</div>
|
||||||
|
<form enctype="multipart/form-data" action="media/" method="POST">
|
||||||
|
<input type="hidden" name="MAX_FILE_SIZE"
|
||||||
|
value="100000000000"/>
|
||||||
|
<input id="" name="userfile" type="file" value="Choose a file"/>
|
||||||
|
<br><br>
|
||||||
|
<input id="button" type="submit" value="Upload" class="button"/>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Atom Feed Generator -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Atom Feed Generator</div>
|
||||||
|
<p>
|
||||||
|
<select name="blog" id="generate_atom_blog">
|
||||||
|
<?php
|
||||||
|
$blogs = scandir("../blogs/");
|
||||||
|
foreach ($blogs as $blog) {
|
||||||
|
if (strlen($blog) >= 3 && substr($blog, -3) == ".md") {
|
||||||
|
if (BlogListGenerator::getExternalLink($blog, '../') == null) {
|
||||||
|
$blog = substr($blog, 0, -3);
|
||||||
|
echo "<option value='$blog'>$blog</option>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</p>
|
||||||
|
<a class="button" id="generate_atom">GENERATE</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- Wrong Password -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Wrong Password</div>
|
||||||
|
<p>
|
||||||
|
The entered password was wrong, please try again.
|
||||||
|
</p>
|
||||||
|
<form action="./" method="post">
|
||||||
|
<p>Password:
|
||||||
|
<br><br>
|
||||||
|
<input type="password" class="itextfield" name="passwd"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<input type="Submit" class="button" value="Log in"/>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- Not enabled -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">Rangitaki Control Center</div>
|
||||||
|
<p>
|
||||||
|
The Rangitaki Control Center is disabled. You can enable
|
||||||
|
it in your config file. But please read first the
|
||||||
|
documentation.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- Back -->
|
||||||
|
<section class="card" id="back-card">
|
||||||
|
<div class="headline">Back</div>
|
||||||
|
<p>Go back to your blog.</p>
|
||||||
|
<a href="../" class="button">GO BACK</a>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script src="./res/rcc.js"></script>
|
||||||
|
<script src="../res/js/jquery-2.1.4.min.js"></script>
|
||||||
|
<script src="./res/delete.js"></script>
|
||||||
|
<script src="./res/edit.js"></script>
|
||||||
|
<script src="./res/atom.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
100
rcc/media/index.php
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://mmk2410.org/rangitaki
|
||||||
|
*
|
||||||
|
* Media page of RCC (Rangitaki Control Center)
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>Rangitaki Control Center</title>
|
||||||
|
|
||||||
|
<meta name="robots" content="nofollow, noindex, noarchive, nosnippet">
|
||||||
|
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
|
||||||
|
user-scalable=0" name="viewport"/>
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#383838">
|
||||||
|
<meta name="description" content="Rangitaki Control Center (RCC)">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../res/rcc.css"/>
|
||||||
|
|
||||||
|
<link href='//fonts.googleapis.com/css?family=Roboto:400,500,700,300,
|
||||||
|
400italic,100,100italic,900' rel='stylesheet'
|
||||||
|
type='text/css'> <!--Font-->
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="header">
|
||||||
|
<a href="../" class="title">Rangitaki Control Center</a>
|
||||||
|
</div>
|
||||||
|
<div class="main">
|
||||||
|
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">File Upload</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
if ($_SESSION['login']) {
|
||||||
|
if ($_FILES['userfile']['name'] == "") {
|
||||||
|
echo "<p>You have to choose a file!</p>";
|
||||||
|
} else {
|
||||||
|
$uploaddir = "../../media/";
|
||||||
|
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
|
||||||
|
|
||||||
|
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
|
||||||
|
echo
|
||||||
|
"<p>
|
||||||
|
The post was successfully uploaded and is now published.
|
||||||
|
</p>";
|
||||||
|
} else {
|
||||||
|
echo
|
||||||
|
"<p>During the uploading process an error occured! <br>
|
||||||
|
Error Code:"
|
||||||
|
. ($_FILES['userfile']['error'] . "</p>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<a href="../" class="button">GO BACK</a>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
106
rcc/newpost/index.php
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://mmk2410.org/rangitaki
|
||||||
|
*
|
||||||
|
* Newpost page of RCC (Rangitaki Control Center)
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
date_default_timezone_set('UTC');
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>Rangitaki Control Center</title>
|
||||||
|
|
||||||
|
<meta name="robots" content="nofollow, noindex, noarchive, nosnippet">
|
||||||
|
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
|
||||||
|
user-scalable=0" name="viewport"/>
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#383838">
|
||||||
|
<meta name="description" content="Rangitaki Control Center (RCC)">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="../res/rcc.css"/>
|
||||||
|
|
||||||
|
<link href='//fonts.googleapis.com/css?family=Roboto:400,500,700,300,
|
||||||
|
400italic,100,100italic,900' rel='stylesheet'
|
||||||
|
type='text/css'> <!--Font-->
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<a href="../" class="title">Rangitaki Control Center</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="main">
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">New Post</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
if ($_SESSION['login']) {
|
||||||
|
$title = $_POST["title"];
|
||||||
|
$date = $_POST["date"];
|
||||||
|
$author = $_POST["author"];
|
||||||
|
$tags = $_POST["tags"];
|
||||||
|
$text = $_POST["text"];
|
||||||
|
$blog = $_POST["blog"];
|
||||||
|
$md = <<<EOD
|
||||||
|
%TITLE: $title
|
||||||
|
%DATE: $date
|
||||||
|
%AUTHOR: $author
|
||||||
|
%TAGS: $tags
|
||||||
|
|
||||||
|
$text
|
||||||
|
EOD;
|
||||||
|
$filename = date("Y-m-d-H-i-s") . ".md";
|
||||||
|
$handle = fopen("../../articles/$blog/$filename", "c");
|
||||||
|
fwrite($handle, $md);
|
||||||
|
if (fclose($handle)) {
|
||||||
|
echo "Post successfully published.";
|
||||||
|
} else {
|
||||||
|
echo "Some error happend, while publishing.";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<a href="../" class="button">GO BACK</a>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
3
rcc/password.php
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<?php
|
||||||
|
$username = "test";
|
||||||
|
$password = '$2y$12$nHitKTwHqU4GmI3ADVE05eH/723fCNgdQ65kQ53FyZUVVB03BjfCO';
|
25
rcc/res/atom.js
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/**
|
||||||
|
* JavaScript for the ajax request to generate a atom feed
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 by mmk2410
|
||||||
|
* License: MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
// listener and function for calling the ajax request to create the
|
||||||
|
// requested atom feed
|
||||||
|
$("#generate_atom").click(function () {
|
||||||
|
var selectedBlog = $("#generate_atom_blog").val();
|
||||||
|
$.get("feed/index.php", {
|
||||||
|
blog: selectedBlog
|
||||||
|
}, function (data) {
|
||||||
|
if (data == "0") {
|
||||||
|
alert("Atom feed sucessfully created.");
|
||||||
|
} else {
|
||||||
|
alert("Failed to create atom feed.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(main());
|
82
rcc/res/delete.js
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/**
|
||||||
|
* JavaScript for the ajax request to delete blog post
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 by mmk2410
|
||||||
|
* License: MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
|
||||||
|
// listener and function for recieving the posts of the selected blogs
|
||||||
|
$("#delete_get_posts").click(function () {
|
||||||
|
|
||||||
|
var selectedBlog = $("#delete_selected_blog").val();
|
||||||
|
|
||||||
|
$.get("res/get_posts.php", {
|
||||||
|
blog: selectedBlog
|
||||||
|
}, function (data) {
|
||||||
|
|
||||||
|
$("#delete_select_post").remove();
|
||||||
|
$("#delete_select_post_info").remove();
|
||||||
|
$("#delete_post_button").remove();
|
||||||
|
$("#delete_get_posts").after("<p id='delete_select_post'></p>");
|
||||||
|
$("#delete_get_posts").after(
|
||||||
|
"<p id='delete_select_post_info'>" +
|
||||||
|
"Now select the post you want to delete. " +
|
||||||
|
"Remember that once a post is deleted it can't be restored.</p>"
|
||||||
|
);
|
||||||
|
$("#delete_select_post").append(
|
||||||
|
"<select id='delete_selected_post'></select>"
|
||||||
|
);
|
||||||
|
|
||||||
|
$.each($.parseJSON(data), function (index, value) {
|
||||||
|
var post = value.substring(0, value.length - 3);
|
||||||
|
$("#delete_selected_post").append(
|
||||||
|
"<option value='" + post + "'>" + post + "</option>"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#delete_select_post").after(
|
||||||
|
"<a class='button' id='delete_post_button' " +
|
||||||
|
"onclick='deletePostButton()'>DELETE POST</a>"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete the selected posts
|
||||||
|
*/
|
||||||
|
function deletePostButton() {
|
||||||
|
|
||||||
|
var selectedBlog = $("#delete_selected_blog").val();
|
||||||
|
var selectedPost = $("#delete_selected_post").val();
|
||||||
|
|
||||||
|
$.get("res/delete_post.php", {
|
||||||
|
blog: selectedBlog,
|
||||||
|
post: selectedPost
|
||||||
|
}, function (data) {
|
||||||
|
|
||||||
|
$("#delete_select_post").remove();
|
||||||
|
$("#delete_select_post_info").remove();
|
||||||
|
$("#delete_post_button").remove();
|
||||||
|
if (data == "901") {
|
||||||
|
alert("ERROR 901: No post as get argument given.");
|
||||||
|
} else if (data == "921") {
|
||||||
|
alert("ERROR 921: No post with given argument available.");
|
||||||
|
} else if (data == "941") {
|
||||||
|
alert("ERROR 941: No blog as get argument given");
|
||||||
|
} else if (data == "961") {
|
||||||
|
alert(
|
||||||
|
"ERROR 961: Error while deleting the file. Check if the" +
|
||||||
|
"web server has the permission to do so."
|
||||||
|
);
|
||||||
|
} else if (data == "0") {
|
||||||
|
alert("Post successfully deleted.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(main());
|
61
rcc/res/delete_post.php
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://mmk2410.org/rangitaki
|
||||||
|
*
|
||||||
|
* delete post script
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* Error Codes:
|
||||||
|
* 901 No post given as get argument
|
||||||
|
* 921 No post with the given name available
|
||||||
|
* 941 No blog given as get argument
|
||||||
|
* 961 Error while deleting the post
|
||||||
|
*/
|
||||||
|
|
||||||
|
$post = $_GET["post"];
|
||||||
|
$blog = $_GET["blog"];
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
if ($_SESSION['login']) {
|
||||||
|
if (!isset($post)) {
|
||||||
|
echo "901";
|
||||||
|
} else if (!isset($blog)) {
|
||||||
|
echo "941";
|
||||||
|
} else if (!file_exists("./../../articles/$blog/$post.md")) {
|
||||||
|
echo "921";
|
||||||
|
} else {
|
||||||
|
if (unlink("./../../articles/$blog/$post.md")) {
|
||||||
|
echo "0";
|
||||||
|
}
|
||||||
|
echo "961";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
85
rcc/res/edit.js
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
/**
|
||||||
|
* JavaScript for the ajax request to edit a article
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 by mmk2410
|
||||||
|
* License: MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
|
||||||
|
// listener and function for recieving the posts of the selected blogs
|
||||||
|
$("#edit_get_posts").click(function () {
|
||||||
|
|
||||||
|
var selectedBlog = $("#edit_selected_blog").val();
|
||||||
|
$.get("res/get_posts.php", {
|
||||||
|
blog: selectedBlog
|
||||||
|
}, function (data) {
|
||||||
|
|
||||||
|
$("#edit_select_post").remove();
|
||||||
|
$("#edit_select_post_info").remove();
|
||||||
|
$("#edit_post_button").remove();
|
||||||
|
$("#edit_get_posts").after("<p id='edit_select_post'></p>");
|
||||||
|
$("#edit_get_posts").after(
|
||||||
|
"<p id='edit_select_post_info'>" +
|
||||||
|
"Now select the post you want to edit.</p>"
|
||||||
|
);
|
||||||
|
$("#edit_select_post").append(
|
||||||
|
"<select id='edit_selected_post'></select>"
|
||||||
|
);
|
||||||
|
$.each($.parseJSON(data), function (index, value) {
|
||||||
|
var post = value.substring(0, value.length - 3);
|
||||||
|
$("#edit_selected_post").append(
|
||||||
|
"<option value='" + post + "'>" + post + "</option>"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
$("#edit_select_post").after(
|
||||||
|
"<a class='button' id='edit_post_button' " +
|
||||||
|
"onclick='editPostButton()'>EDIT POST</a>"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#save_changes").click(function () {
|
||||||
|
|
||||||
|
var postTitle = $("#title").val();
|
||||||
|
var postDate = $("#date").val();
|
||||||
|
var postAuthor = $("#author").val();
|
||||||
|
var postTags = $("#tags").val();
|
||||||
|
var postText = $("#text").val();
|
||||||
|
|
||||||
|
var file = "../../articles/" + getVariables.blog +
|
||||||
|
"/" + getVariables.post + ".md";
|
||||||
|
|
||||||
|
$.post("../res/save.php", {
|
||||||
|
title: postTitle,
|
||||||
|
date: postDate,
|
||||||
|
author: postAuthor,
|
||||||
|
tags: postTags,
|
||||||
|
text: postText,
|
||||||
|
file: file
|
||||||
|
}, function (data) {
|
||||||
|
if (data == "0") {
|
||||||
|
alert("File successfully changed.");
|
||||||
|
window.open("../");
|
||||||
|
} else if (data == "1") {
|
||||||
|
alert("Error while saving the changes.");
|
||||||
|
} else if (data == "-1") {
|
||||||
|
alert("file");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete the selected posts
|
||||||
|
*/
|
||||||
|
function editPostButton() {
|
||||||
|
|
||||||
|
var selectedBlog = $("#edit_selected_blog").val();
|
||||||
|
var selectedPost = $("#edit_selected_post").val();
|
||||||
|
var href = "./edit/?blog=" + selectedBlog + "&post=" + selectedPost;
|
||||||
|
window.open(href);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$(document).ready(main());
|
58
rcc/res/get_posts.php
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://mmk2410.org/rangitaki
|
||||||
|
*
|
||||||
|
* get post script
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* Error Codes:
|
||||||
|
* 901 No blog given as get argument
|
||||||
|
* 921 No blog with the given name available
|
||||||
|
*/
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
if ($_SESSION['login']) {
|
||||||
|
$blog = $_GET["blog"];
|
||||||
|
if (!isset($blog)) {
|
||||||
|
echo "901";
|
||||||
|
} else if (!file_exists("./../../blogs/$blog.md")) {
|
||||||
|
echo "921";
|
||||||
|
} else {
|
||||||
|
$posts = array();
|
||||||
|
$i = 0;
|
||||||
|
foreach (scandir("./../../articles/$blog/") as $article) {
|
||||||
|
if (substr($article, -3) == ".md") {
|
||||||
|
$posts[$i] = $article;
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print json_encode($posts);
|
||||||
|
}
|
||||||
|
}
|
288
rcc/res/rcc.css
Normal file
|
@ -0,0 +1,288 @@
|
||||||
|
/*
|
||||||
|
* RCC cascade style sheet
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015-2016 Marcel Kapfer (mmk2410)
|
||||||
|
* MIT License
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* BODY */
|
||||||
|
|
||||||
|
body{
|
||||||
|
font-family: "Roboto", sans-serif;
|
||||||
|
background: #f6f6f6;
|
||||||
|
color: #383838;
|
||||||
|
margin-top: 94px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main{
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HEADER */
|
||||||
|
.header{
|
||||||
|
background-color: #ff4415;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 64px;
|
||||||
|
box-shadow: 2px 0 2px 2px rgba(62, 62, 62, 0.45);
|
||||||
|
}
|
||||||
|
|
||||||
|
.title{
|
||||||
|
color: #fff;
|
||||||
|
font-size: 23px;
|
||||||
|
text-decoration: none;
|
||||||
|
line-height: 64px;
|
||||||
|
vertical-align: middle;
|
||||||
|
left: 75px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 18px;
|
||||||
|
text-decoration: none;
|
||||||
|
line-height: 64px;
|
||||||
|
vertical-align: middle;
|
||||||
|
right: 75px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MAIN */
|
||||||
|
|
||||||
|
.card{
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
width: 75%;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 2px;
|
||||||
|
padding: 24px;
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3);
|
||||||
|
margin-bottom: 40px;
|
||||||
|
max-width: 1160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.headline{
|
||||||
|
font-size: 24px;
|
||||||
|
color: #383838!important;
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
border-bottom: none!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subheadline {
|
||||||
|
font-size: 20px;
|
||||||
|
color: #383838 !important;
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
border-bottom: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card > p{
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FOOTER */
|
||||||
|
|
||||||
|
.footer{
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.footer a{
|
||||||
|
color: #383838;
|
||||||
|
text-decoration: none;
|
||||||
|
border-bottom: 1px solid transparent;
|
||||||
|
border-bottom-color: transparent;
|
||||||
|
transition: border-bottom-color 150ms ease-in-out 100ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer a:hover{
|
||||||
|
border-bottom-color: #383838;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* BUTTON */
|
||||||
|
|
||||||
|
.button {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #fff;
|
||||||
|
background-color: #ff4415;
|
||||||
|
line-height: 36px;
|
||||||
|
min-width: 64px;
|
||||||
|
text-align: center;
|
||||||
|
height: 36px;
|
||||||
|
padding: 8px;
|
||||||
|
border-width: 1px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: #ff4415;
|
||||||
|
-webkit-box-shadow: 0.4px 1px 1.5px 1px #aaa;
|
||||||
|
-moz-box-shadow: 0.4px 1px 1.5px 1px #aaa;
|
||||||
|
box-shadow: 0.4px 1px 1.5px 1px #aaa;
|
||||||
|
border-radius: 2px;
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
letter-spacing: 0.4px;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 14px;
|
||||||
|
transition-property: box-shadow;
|
||||||
|
transition-delay: 50ms;
|
||||||
|
transition-duration: 125ms;
|
||||||
|
transition-timing-function: ease;
|
||||||
|
-o-transition-property: box-shadow;
|
||||||
|
-o-transition-delay: 50ms;
|
||||||
|
-o-transition-duration: 125ms;
|
||||||
|
-o-transition-timing-function: ease;
|
||||||
|
-moz-transition-property: box-shadow;
|
||||||
|
-moz-transition-delay: 50ms;
|
||||||
|
-moz-transition-duration: 125ms;
|
||||||
|
-moz-transition-timing-function: ease;
|
||||||
|
-webkit-transition-property: box-shadow;
|
||||||
|
-webkit-transition-delay: 50ms;
|
||||||
|
-webkit-transition-duration: 125ms;
|
||||||
|
-webkit-transition-timing-function: ease;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:hover, .button:hover {
|
||||||
|
-webkit-box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa;
|
||||||
|
-moz-box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa;
|
||||||
|
box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.button{
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* INPUT FIELD */
|
||||||
|
|
||||||
|
.itextfield{
|
||||||
|
border-color: transparent;
|
||||||
|
border-width: 1px;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 22px;
|
||||||
|
width: 400px;
|
||||||
|
max-width: 100%;
|
||||||
|
border-bottom-color: #aaa;
|
||||||
|
transition-property: border-bottom-color;
|
||||||
|
transition-delay: 50ms;
|
||||||
|
transition-duration: 125ms;
|
||||||
|
transition-timing-function: ease;
|
||||||
|
-o-transition-property: border-bottom-color;
|
||||||
|
-o-transition-delay: 50ms;
|
||||||
|
-o-transition-duration: 125ms;
|
||||||
|
-o-transition-timing-function: ease;
|
||||||
|
-moz-transition-property: border-bottom-color;
|
||||||
|
-moz-transition-delay: 50ms;
|
||||||
|
-moz-transition-duration: 125ms;
|
||||||
|
-moz-transition-timing-function: ease;
|
||||||
|
-webkit-transition-property: border-bottom-color;
|
||||||
|
-webkit-transition-delay: 50ms;
|
||||||
|
-webkit-transition-duration: 125ms;
|
||||||
|
-webkit-transition-timing-function: ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itextfield:focus{
|
||||||
|
border-bottom-color: #ff4415;
|
||||||
|
border-width: 2px;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TEXTAREA */
|
||||||
|
|
||||||
|
.itextarea {
|
||||||
|
border-color: transparent;
|
||||||
|
border-width: 1px;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 22px;
|
||||||
|
height: auto;
|
||||||
|
resize: none;
|
||||||
|
min-height: 100px;
|
||||||
|
width: calc(100% - 10px);
|
||||||
|
border-bottom-color: #aaa;
|
||||||
|
transition-property: border-bottom-color;
|
||||||
|
transition-delay: 50ms;
|
||||||
|
transition-duration: 125ms;
|
||||||
|
transition-timing-function: ease;
|
||||||
|
-o-transition-property: border-bottom-color;
|
||||||
|
-o-transition-delay: 50ms;
|
||||||
|
-o-transition-duration: 125ms;
|
||||||
|
-o-transition-timing-function: ease;
|
||||||
|
-moz-transition-property: border-bottom-color;
|
||||||
|
-moz-transition-delay: 50ms;
|
||||||
|
-moz-transition-duration: 125ms;
|
||||||
|
-moz-transition-timing-function: ease;
|
||||||
|
-webkit-transition-property: border-bottom-color;
|
||||||
|
-webkit-transition-delay: 50ms;
|
||||||
|
-webkit-transition-duration: 125ms;
|
||||||
|
-webkit-transition-timing-function: ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itextarea:focus {
|
||||||
|
border-bottom-color: #ff4415;
|
||||||
|
border-width: 2px;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FORM */
|
||||||
|
form{
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 1440px) {
|
||||||
|
|
||||||
|
.card{
|
||||||
|
width: 1160px;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 720px){
|
||||||
|
|
||||||
|
.card{
|
||||||
|
width: 82%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title{
|
||||||
|
left: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 721px) {
|
||||||
|
#back-card {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
32
rcc/res/rcc.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
* JavaScript for RCC
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 by mmk2410
|
||||||
|
* License: MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
window.onload = function () {
|
||||||
|
var t = document.getElementsByTagName('textarea')[0];
|
||||||
|
var offset = !window.opera ? (t.offsetHeight - t.clientHeight) : (
|
||||||
|
t.offsetHeight + parseInt(
|
||||||
|
window.getComputedStyle(t, null).getPropertyValue('border-top-width')
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The following three code clocks are for proper resizing of the input
|
||||||
|
* textarea
|
||||||
|
*/
|
||||||
|
var resize = function (t) {
|
||||||
|
t.style.height = 'auto';
|
||||||
|
t.style.height = (t.scrollHeight + offset ) + 'px';
|
||||||
|
};
|
||||||
|
|
||||||
|
t.addEventListener && t.addEventListener('input', function (event) {
|
||||||
|
resize(t);
|
||||||
|
});
|
||||||
|
|
||||||
|
t.attachEvent && t.attachEvent('onkeyup', function () {
|
||||||
|
resize(t);
|
||||||
|
});
|
||||||
|
};
|
58
rcc/res/save.php
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://mmk2410.org/rangitaki
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
if ($_SESSION['login']) {
|
||||||
|
$title = $_POST["title"];
|
||||||
|
$date = $_POST["date"];
|
||||||
|
$author = $_POST["author"];
|
||||||
|
$tags = $_POST["tags"];
|
||||||
|
$text = $_POST["text"];
|
||||||
|
$filename = $_POST["file"];
|
||||||
|
$md = <<<EOD
|
||||||
|
%TITLE: $title
|
||||||
|
%DATE: $date
|
||||||
|
%AUTHOR: $author
|
||||||
|
%TAGS: $tags
|
||||||
|
|
||||||
|
$text
|
||||||
|
EOD;
|
||||||
|
if (file_put_contents($filename, $md)) {
|
||||||
|
echo 0;
|
||||||
|
} else if (file_exists(($filename))) {
|
||||||
|
echo 1;
|
||||||
|
} else {
|
||||||
|
echo -1;
|
||||||
|
}
|
||||||
|
}
|
11
rcc/ssl.php
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
// Marcel Kapfer (mmk2410) / Wilson O'Sullivan
|
||||||
|
// License: MIT License
|
||||||
|
// SSL Verification
|
||||||
|
|
||||||
|
if (isset($settings["rcc"]["debug"]) && $settings["rcc"]["debug"] != "on") {
|
||||||
|
if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") {
|
||||||
|
header('HTTP/1.1 400 Bad Request');
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
102
rcc/uploaded/index.php
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* @category Blogging
|
||||||
|
* @package Rcc
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link https://mmk2410.org/rangitaki
|
||||||
|
*
|
||||||
|
* Main page of RCC (Rangitaki Control Center)
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>Rangitaki Control Center</title>
|
||||||
|
|
||||||
|
<meta name="robots" content="nofollow, noindex, noarchive, nosnippet">
|
||||||
|
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0,
|
||||||
|
user-scalable=0" name="viewport"/>
|
||||||
|
|
||||||
|
<meta name="theme-color" content="#383838">
|
||||||
|
<meta name="description" content="Rangitaki Control Center (RCC)">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="./res/rcc.css"/>
|
||||||
|
|
||||||
|
<link href='//fonts.googleapis.com/css?family=Roboto:400,500,700,300,
|
||||||
|
400italic,100,100italic,900' rel='stylesheet'
|
||||||
|
type='text/css'> <!--Font-->
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="header">
|
||||||
|
<a href="../" class="title">Rangitaki Control Center</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="main">
|
||||||
|
<section class="card">
|
||||||
|
<div class="headline">File Upload</div>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
if ($_SESSION['login']) {
|
||||||
|
|
||||||
|
if ($_FILES['userfile']['name'] == "") {
|
||||||
|
echo "<p>You have to choose a file!</p>";
|
||||||
|
} else {
|
||||||
|
$blog = filter_input(INPUT_POST, "blog");
|
||||||
|
$uploaddir = "../..//articles/$blog/";
|
||||||
|
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
|
||||||
|
|
||||||
|
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
|
||||||
|
echo
|
||||||
|
"<p>The post was successfully uploaded and is now
|
||||||
|
published.</p>";
|
||||||
|
} else {
|
||||||
|
echo
|
||||||
|
"<p>During the uploading process an error occured! <br>
|
||||||
|
Error Code:"
|
||||||
|
. ($_FILES['userfile']['error'] . "</p>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<a href="../" class="button">GO BACK</a>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
219
res/css/github-gist.css
Normal file
|
@ -0,0 +1,219 @@
|
||||||
|
/**
|
||||||
|
* GitHub Gist Theme
|
||||||
|
* Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
|
||||||
|
*/
|
||||||
|
|
||||||
|
.hljs {
|
||||||
|
display: block;
|
||||||
|
background: white;
|
||||||
|
padding: 0.5em;
|
||||||
|
color: #333333;
|
||||||
|
overflow-x: auto;
|
||||||
|
-webkit-text-size-adjust: none;
|
||||||
|
-ms-text-size-adjust: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-comment,
|
||||||
|
.bash .hljs-shebang,
|
||||||
|
.java .hljs-javadoc,
|
||||||
|
.javascript .hljs-javadoc,
|
||||||
|
.rust .hljs-preprocessor {
|
||||||
|
color: #969896;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-string,
|
||||||
|
.apache .hljs-sqbracket,
|
||||||
|
.coffeescript .hljs-subst,
|
||||||
|
.coffeescript .hljs-regexp,
|
||||||
|
.cpp .hljs-preprocessor,
|
||||||
|
.c .hljs-preprocessor,
|
||||||
|
.javascript .hljs-regexp,
|
||||||
|
.json .hljs-attribute,
|
||||||
|
.makefile .hljs-variable,
|
||||||
|
.markdown .hljs-value,
|
||||||
|
.markdown .hljs-link_label,
|
||||||
|
.markdown .hljs-strong,
|
||||||
|
.markdown .hljs-emphasis,
|
||||||
|
.markdown .hljs-blockquote,
|
||||||
|
.nginx .hljs-regexp,
|
||||||
|
.nginx .hljs-number,
|
||||||
|
.objectivec .hljs-preprocessor .hljs-title,
|
||||||
|
.perl .hljs-regexp,
|
||||||
|
.php .hljs-regexp,
|
||||||
|
.xml .hljs-value,
|
||||||
|
.less .hljs-built_in,
|
||||||
|
.scss .hljs-built_in {
|
||||||
|
color: #df5000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hljs-keyword,
|
||||||
|
.css .hljs-at_rule,
|
||||||
|
.css .hljs-important,
|
||||||
|
.http .hljs-request,
|
||||||
|
.ini .hljs-setting,
|
||||||
|
.haskell .hljs-type,
|
||||||
|
.java .hljs-javadoctag,
|
||||||
|
.javascript .hljs-tag,
|
||||||
|
.javascript .hljs-javadoctag,
|
||||||
|
.nginx .hljs-title,
|
||||||
|
.objectivec .hljs-preprocessor,
|
||||||
|
.php .hljs-phpdoc,
|
||||||
|
.sql .hljs-built_in,
|
||||||
|
.less .hljs-tag,
|
||||||
|
.less .hljs-at_rule,
|
||||||
|
.scss .hljs-tag,
|
||||||
|
.scss .hljs-at_rule,
|
||||||
|
.scss .hljs-important,
|
||||||
|
.stylus .hljs-at_rule,
|
||||||
|
.go .hljs-typename,
|
||||||
|
.swift .hljs-preprocessor {
|
||||||
|
color: #a71d5d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apache .hljs-common,
|
||||||
|
.apache .hljs-cbracket,
|
||||||
|
.apache .hljs-keyword,
|
||||||
|
.bash .hljs-literal,
|
||||||
|
.bash .hljs-built_in,
|
||||||
|
.coffeescript .hljs-literal,
|
||||||
|
.coffeescript .hljs-built_in,
|
||||||
|
.coffeescript .hljs-number,
|
||||||
|
.cpp .hljs-number,
|
||||||
|
.cpp .hljs-built_in,
|
||||||
|
.c .hljs-number,
|
||||||
|
.c .hljs-built_in,
|
||||||
|
.cs .hljs-number,
|
||||||
|
.cs .hljs-built_in,
|
||||||
|
.css .hljs-attribute,
|
||||||
|
.css .hljs-hexcolor,
|
||||||
|
.css .hljs-number,
|
||||||
|
.css .hljs-function,
|
||||||
|
.haskell .hljs-number,
|
||||||
|
.http .hljs-literal,
|
||||||
|
.http .hljs-attribute,
|
||||||
|
.java .hljs-number,
|
||||||
|
.javascript .hljs-built_in,
|
||||||
|
.javascript .hljs-literal,
|
||||||
|
.javascript .hljs-number,
|
||||||
|
.json .hljs-number,
|
||||||
|
.makefile .hljs-keyword,
|
||||||
|
.markdown .hljs-link_reference,
|
||||||
|
.nginx .hljs-built_in,
|
||||||
|
.objectivec .hljs-literal,
|
||||||
|
.objectivec .hljs-number,
|
||||||
|
.objectivec .hljs-built_in,
|
||||||
|
.php .hljs-literal,
|
||||||
|
.php .hljs-number,
|
||||||
|
.python .hljs-number,
|
||||||
|
.ruby .hljs-prompt,
|
||||||
|
.ruby .hljs-constant,
|
||||||
|
.ruby .hljs-number,
|
||||||
|
.ruby .hljs-subst .hljs-keyword,
|
||||||
|
.ruby .hljs-symbol,
|
||||||
|
.rust .hljs-number,
|
||||||
|
.sql .hljs-number,
|
||||||
|
.puppet .hljs-function,
|
||||||
|
.less .hljs-number,
|
||||||
|
.less .hljs-hexcolor,
|
||||||
|
.less .hljs-function,
|
||||||
|
.less .hljs-attribute,
|
||||||
|
.scss .hljs-preprocessor,
|
||||||
|
.scss .hljs-number,
|
||||||
|
.scss .hljs-hexcolor,
|
||||||
|
.scss .hljs-function,
|
||||||
|
.scss .hljs-attribute,
|
||||||
|
.stylus .hljs-number,
|
||||||
|
.stylus .hljs-hexcolor,
|
||||||
|
.stylus .hljs-attribute,
|
||||||
|
.stylus .hljs-params,
|
||||||
|
.go .hljs-built_in,
|
||||||
|
.go .hljs-constant,
|
||||||
|
.swift .hljs-built_in,
|
||||||
|
.swift .hljs-number {
|
||||||
|
color: #0086b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apache .hljs-tag,
|
||||||
|
.cs .hljs-xmlDocTag,
|
||||||
|
.css .hljs-tag,
|
||||||
|
.xml .hljs-title,
|
||||||
|
.stylus .hljs-tag {
|
||||||
|
color: #63a35c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bash .hljs-variable,
|
||||||
|
.cs .hljs-preprocessor,
|
||||||
|
.cs .hljs-preprocessor .hljs-keyword,
|
||||||
|
.css .hljs-attr_selector,
|
||||||
|
.css .hljs-value,
|
||||||
|
.ini .hljs-value,
|
||||||
|
.ini .hljs-keyword,
|
||||||
|
.javascript .hljs-tag .hljs-title,
|
||||||
|
.makefile .hljs-constant,
|
||||||
|
.nginx .hljs-variable,
|
||||||
|
.xml .hljs-tag,
|
||||||
|
.scss .hljs-variable {
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bash .hljs-title,
|
||||||
|
.coffeescript .hljs-title,
|
||||||
|
.cpp .hljs-title,
|
||||||
|
.c .hljs-title,
|
||||||
|
.cs .hljs-title,
|
||||||
|
.css .hljs-id,
|
||||||
|
.css .hljs-class,
|
||||||
|
.css .hljs-pseudo,
|
||||||
|
.ini .hljs-title,
|
||||||
|
.haskell .hljs-title,
|
||||||
|
.haskell .hljs-pragma,
|
||||||
|
.java .hljs-title,
|
||||||
|
.javascript .hljs-title,
|
||||||
|
.makefile .hljs-title,
|
||||||
|
.objectivec .hljs-title,
|
||||||
|
.perl .hljs-sub,
|
||||||
|
.php .hljs-title,
|
||||||
|
.python .hljs-decorator,
|
||||||
|
.python .hljs-title,
|
||||||
|
.ruby .hljs-parent,
|
||||||
|
.ruby .hljs-title,
|
||||||
|
.rust .hljs-title,
|
||||||
|
.xml .hljs-attribute,
|
||||||
|
.puppet .hljs-title,
|
||||||
|
.less .hljs-id,
|
||||||
|
.less .hljs-pseudo,
|
||||||
|
.less .hljs-class,
|
||||||
|
.scss .hljs-id,
|
||||||
|
.scss .hljs-pseudo,
|
||||||
|
.scss .hljs-class,
|
||||||
|
.stylus .hljs-class,
|
||||||
|
.stylus .hljs-id,
|
||||||
|
.stylus .hljs-pseudo,
|
||||||
|
.stylus .hljs-title,
|
||||||
|
.swift .hljs-title,
|
||||||
|
.diff .hljs-chunk {
|
||||||
|
color: #795da3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.coffeescript .hljs-reserved,
|
||||||
|
.coffeescript .hljs-attribute {
|
||||||
|
color: #1d3e81;
|
||||||
|
}
|
||||||
|
|
||||||
|
.diff .hljs-chunk {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.diff .hljs-addition {
|
||||||
|
color: #55a532;
|
||||||
|
background-color: #eaffea;
|
||||||
|
}
|
||||||
|
|
||||||
|
.diff .hljs-deletion {
|
||||||
|
color: #bd2c00;
|
||||||
|
background-color: #ffecec;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown .hljs-link_url {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
3
res/css/no-nav.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.nav{display:none}.nav-img{display:none}@media screen and (min-width: 1440px){.header{left:0}.main{margin-left:0;width:100%}}@media screen and (max-width: 720px){.title{left:25px}}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=no-nav.css.map */
|
1
res/css/no-nav.css.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"file":"no-nav.css","sources":["no-nav.sass"],"sourcesContent":["/*\n * Rangitaki Project\n *\n * The MIT License\n *\n * Copyright 2015 mmk2410.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n * A stylesheet for overriding the default styles if the navigation drawer is disabled\n */\n\n.nav {\n display: none; }\n\n.nav-img {\n display: none; }\n\n@media screen and (min-width: 1440px) {\n .header {\n left: 0; }\n\n .main {\n margin-left: 0;\n width: 100%; } }\n\n@media screen and (max-width: 720px) {\n\n .title {\n left: 25px; } }\n"],"mappings":"AA4BA,AAAA,IAAI,AAAC,CACD,OAAO,CAAE,IAAK,CAAG,AAErB,AAAA,QAAQ,AAAC,CACL,OAAO,CAAE,IAAK,CAAG,AAErB,MAAM,CAAN,MAAM,MAAM,SAAS,EAAE,MAAM,EACzB,AAAA,OAAO,AAAC,CACJ,IAAI,CAAE,CAAE,CAAG,AAEf,AAAA,KAAK,AAAC,CACF,WAAW,CAAE,CAAE,CACf,KAAK,CAAE,IAAK,CAAG,CAEvB,MAAM,CAAN,MAAM,MAAM,SAAS,EAAE,KAAK,EAExB,AAAA,MAAM,AAAC,CACH,IAAI,CAAE,IAAK,CAAG","names":[]}
|
3
res/css/rangitaki.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
body{margin-top:94px}.main{height:100%;margin-left:0}.overlay{opacity:0;position:fixed;top:0;left:0;background-color:black;width:100%;z-index:30;height:100%;display:none}.header{top:0;right:0;left:0;width:100%;height:64px;position:absolute}.title{color:#fff;font-size:23px;text-decoration:none;line-height:64px;vertical-align:middle;left:75px}.title>a{text-decoration:none;color:#fff}.fadeout{position:absolute;height:64px;top:0;right:0;width:40px}.nav-img{height:26px;padding:19px;cursor:pointer}.nav{width:300px;position:fixed;height:100%;top:0;left:-301px;z-index:40}.nav-item,.nav-item-static{text-decoration:none;text-indent:0;display:inline-block;height:48px;vertical-align:middle;width:284px;line-height:48px;padding-left:16px;transition:background-color 125ms ease-in-out 0ms}.nav-close{cursor:pointer}.nav-close-img{height:35px;padding:12px}.nav-item{cursor:pointer}.divider{width:100%}.card{margin-right:auto;margin-left:auto;width:75%;padding:24px;margin-bottom:40px;max-width:1160px}.card a{-moz-hyphens:auto;-epub-hyphens:auto;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;word-wrap:break-word}.headline{display:block;padding-bottom:8px}.card img{max-width:100%;max-height:400px;display:block;margin-left:auto;margin-right:auto}.author{display:block}.readmore{padding:12px 0 25px 0}.fabmenu{position:fixed;bottom:20px;right:20px}.fab{height:60px;width:60px;border-radius:30px;cursor:pointer}.fab-img{width:28px;padding:15px}.subfab{height:45px;width:45px;border-radius:30px;margin-right:auto;margin-left:auto;margin-bottom:25px;display:none}.subfab-img{width:22px;padding:12px}.pag_buttons{margin-right:auto;margin-left:auto;width:calc(75% + 48px);margin-bottom:80px;max-width:1160px;text-align:right}.button{text-decoration:none;color:#fff;line-height:36px;min-width:64px;text-align:center;height:36px;padding:8px;margin-top:4px;margin-bottom:5px;cursor:pointer}.pag_next{margin-left:8px}.footer a{transition:border-bottom-color 150ms ease-in-out 100ms}.footer a:hover{border-bottom-color:#383838}@media screen and (min-width: 1440px){.nav{left:0;padding-top:64px}.nav-close-img{display:none}.nav-close{display:none}.nav-img{display:none}.header{left:300px}.main{margin-left:300px;width:calc(100% - 300px)}}@media screen and (max-width: 720px){.card{width:82%}.pag_buttons{width:calc(82% + 48px)}}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=rangitaki.css.map */
|
1
res/css/rangitaki.css.map
Normal file
60
res/img/close-dark.svg
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
fill="#000000"
|
||||||
|
height="48"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="48"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="close-dark.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="3830"
|
||||||
|
inkscape:window-height="2074"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="13.906433"
|
||||||
|
inkscape:cx="-29.993443"
|
||||||
|
inkscape:cy="32.765779"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="81"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<path
|
||||||
|
d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#565656;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M0 0h24v24H0z"
|
||||||
|
fill="none"
|
||||||
|
id="path6" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
60
res/img/close.svg
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
fill="#000000"
|
||||||
|
height="48"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="48"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="close.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1376"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="13.906433"
|
||||||
|
inkscape:cx="0.24436123"
|
||||||
|
inkscape:cy="32.909597"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="32"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<path
|
||||||
|
d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M0 0h24v24H0z"
|
||||||
|
fill="none"
|
||||||
|
id="path6" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
60
res/img/email.svg
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
fill="#000000"
|
||||||
|
height="48"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="48"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="email.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1376"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="19.666667"
|
||||||
|
inkscape:cx="20.487457"
|
||||||
|
inkscape:cy="18.74108"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="32"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<path
|
||||||
|
d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#7a7a7a;fill-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="M0 0h24v24H0z"
|
||||||
|
fill="none"
|
||||||
|
id="path6" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
188
res/img/facebook.svg
Normal file
|
@ -0,0 +1,188 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="800"
|
||||||
|
height="800"
|
||||||
|
viewBox="0 0 800.00001 800.00001"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
inkscape:export-filename="/home/mmk/design/icons/web/facebook.png"
|
||||||
|
inkscape:export-xdpi="48.037498"
|
||||||
|
inkscape:export-ydpi="48.037498"
|
||||||
|
sodipodi:docname="facebook.svg">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.98994949"
|
||||||
|
inkscape:cx="308.50464"
|
||||||
|
inkscape:cy="496.10493"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1376"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="32"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-252.36216)">
|
||||||
|
<image
|
||||||
|
y="255.88876"
|
||||||
|
x="161.10423"
|
||||||
|
id="image4179"
|
||||||
|
xlink:href="data:image/png;base64,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
|
||||||
|
AEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEE
|
||||||
|
AEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEEAEEE
|
||||||
|
AEEEAEEEAEEEAEE0AQAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAI
|
||||||
|
IgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAI
|
||||||
|
IgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAM
|
||||||
|
t87u6YPFDMAw8fcSK6mU8tlvPnv7g06IANQexCN/3a8LIgBVSSnNCSIA1ev3+4IIQPXapmkOCyIA
|
||||||
|
tTu297mtLwkiAFV7tQtqBBGA2ggiAETE04IIQPVKKYcFEQAi5gQRACIOCSIAtVuYn58/LogAVH86
|
||||||
|
nOu/ayCIANTu8MX+pyACUIW2bY8IIgA4IQJARFzkKReCCEA12rY9JIgAVG9xcdEJEYDqnXlyfvu8
|
||||||
|
IAJQu8Ov9QmCCEANviOIAFSvlPKMIAIgiKUcEUQAqpdzfloQAXBCvMgbAwsiANVIKR0SRABqd+KR
|
||||||
|
o7edE0QAanf4Uj5JEAEYa6/1tk+CCEAVUkpzgghA9S7lOYiCCMDYa9vWCREABBEAIhb7/b6HTAGo
|
||||||
|
3rH93925IIgA1O7IpX6iIAIwtkopc5f6uYIIwDgTRAC41CflCyIAY+1Sn5QviACMtUt9yoUgAjDO
|
||||||
|
fvDEyTuPCiIAtTt8OZ8siACMpVKKIALA5VxQI4gAjDNBBICI+LYgAoATIgBERMTTgghA7b6759jm
|
||||||
|
04IIQO0OX+4XCCIA42jucr9AEAEYO5f7HERBBMAJURABGFcppUOCCED1BoPBdwQRgOq1bfv05X6N
|
||||||
|
IAIwbo4/9vwdLwoiAFV7PVeYCiIAgiiIAIyjlNLc6/k6QQRg3E6IgggAHjIFgIhYXFx0QgSgegud
|
||||||
|
TscJEYDqPfvo8S0DQQSgds+83i8URADGxuu9oEYQARg3c6/3CwURACdEQQRgnLRtK4gA0Ol0/lIQ
|
||||||
|
Aajd+UeO3jYviADUbu5KvlgQARgXR67kiwURgLFQSjksiAAI4ut82ydBBGDcHBJEAKrXtu1hQQSg
|
||||||
|
eimlpwURgNqdevT4lrOCCEDVrvSCGkEEYCyklA5d6W0IIgDjcEI8LIgACOIVvO2TIAIwNlJKfoYI
|
||||||
|
AP1+XxABqF7bNM1hQQSgdsf2Prf1JUEEoGrLcUGNIAIwDgQRACLi6eW4EUEEYKQtx5PyBRGAcQii
|
||||||
|
h0wB4Erf9kkQARgHC/Pz88cFEYDaHZrrv2sgiADU7vBy3ZAgAjCy2rY9sly3JYgAOCEKIgAjbm65
|
||||||
|
bkgQARhZbdseEkQAqre4uOiECED1vvfk/PZ5QQSgdoeW88YEEYBR9R1BBKB6pZRnBBEAQVymd7kQ
|
||||||
|
RABG3dxy3pggAjCSUkqCCAApJVeZAlC9E48cve2cIAJQu8PLfYOCCMAoOrTcNyiIAIycUooTIgAs
|
||||||
|
93MQBRGAkdS27dxy36YgAiCIggjACFr0kCkARBx74uSdC4IIQO2OrMSNCiIAI6WUMrcStyuIAIwa
|
||||||
|
QQSAlbigRhABGDnL/bZPggjASOr3+06IAFTvB0+cvPOoIAJQu8MrdcOCCIAgCiIAo6Rt2yMrdduC
|
||||||
|
CMAoEUQAiIhvCyIAOCECQEREPC2IANTuu3uObT4tiADU7vBK3rggAjAq5lbyxgURgJGwUu9yIYgA
|
||||||
|
jFoQDwsiANXLOT8jiABUbzAYfEcQAahe27ZPr+TtCyIAo+D4Y8/f8aIgAlC7Iyv9GwgiAENvJd/2
|
||||||
|
SRABGBkppbmV/j0EEYChV0oRRABY6VepEUQARsLi4qITIgDVW+h0Ok6IAFTv2UePbxkIIgC1e+Zq
|
||||||
|
/CadR47elmzNj9o9fbBYgdXi7yVWgxMiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgi
|
||||||
|
AAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgi
|
||||||
|
AAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgi
|
||||||
|
AAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgi
|
||||||
|
AAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiAAgiACCIACCI
|
||||||
|
ACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCI
|
||||||
|
ACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCI
|
||||||
|
ACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCI
|
||||||
|
ACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCIACCI
|
||||||
|
ACCIACCIACCIACCIACCIACCIACCIACCIAIAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAg
|
||||||
|
AoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAg
|
||||||
|
AoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAg
|
||||||
|
AoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAg
|
||||||
|
AoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAoAgAgCC
|
||||||
|
CACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACC
|
||||||
|
CACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACC
|
||||||
|
CACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACC
|
||||||
|
CACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACCCACC
|
||||||
|
CACCCACCCACCCACCCACCCACCCACCCACCCACCCAAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAI
|
||||||
|
IgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAI
|
||||||
|
IgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAIIgAI
|
||||||
|
IgAIIgAIIgAIIgAIIgAMs/8PO8YfZOsRrGAAAAAASUVORK5CYII=
|
||||||
|
"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
height="800"
|
||||||
|
width="416.11047" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
98
res/img/gplus.svg
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="60"
|
||||||
|
height="60"
|
||||||
|
viewBox="0 0 60.000001 60.000001"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="gplus.svg"
|
||||||
|
inkscape:export-filename="/home/mmk/design/icons/web/gplus.png"
|
||||||
|
inkscape:export-xdpi="90"
|
||||||
|
inkscape:export-ydpi="90">
|
||||||
|
<defs
|
||||||
|
id="defs4" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="7.9195959"
|
||||||
|
inkscape:cx="-43.022177"
|
||||||
|
inkscape:cy="42.666945"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1376"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="32"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata7">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-992.36216)">
|
||||||
|
<image
|
||||||
|
y="993.36218"
|
||||||
|
x="0"
|
||||||
|
id="image4198"
|
||||||
|
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA6CAYAAADspTpvAAAABmJLR0QA/wD/AP+gvaeTAAAACXBI
|
||||||
|
WXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wYPBxM5wzo+swAABaVJREFUaN7dm2uIVVUUx3/zMrUx
|
||||||
|
0x6miQ1lRTlYkykGUaQVQ5GUZfggjQo1ylyWGPYiEMXywT+jZsIyqJRC6kNaajRJL/ABCoKWlWZp
|
||||||
|
SlmKj8HHdeb24W5zOpyz7/uei+vTzF77nHX+e+3HWv+1b0UymSQXMbM64AFgAHAV0A84D+gC1JCb
|
||||||
|
7ARM0gqKJNVZgqwBpgCTgCuBigJ9x2FgITBLUjtFlOoswI4GFgB9XFMbsB341f3d33na984jwO+B
|
||||||
|
tm3AE5L2UwKpzgBoZ2ApcJ/zaBJYAUyVtCvQty8wDxgFVIW8rhb4XtIkYpIK3xo2s+7ABuc5gHbg
|
||||||
|
ZUmz0gzSBGCxZy2/JWlyWQF263U90NCheYWkERkugSnAaxHrPAmMl/RBqQFXenTvBsCechtWRiLp
|
||||||
|
daAlaqCBRWZWWxaAzewuYEygeaOk37J8/2QgEaHrAbxSLh5WiO6bbF8uaQfwlafLGDPrFCtgMxvp
|
||||||
|
ztigbM3RxmyPrgdwT9wenug5Q8nBy98Cez1dbo0b8JCIvt3ysNPi0fWLDbCZ9XLTLEx65WFntUfX
|
||||||
|
PU4PX+Ppe20edtZ6dFVxAu7q6XtDrkYk7QMORagPxgnYZ3yAmV2Uh60owD+XEnB1yNHTHrGZVbsd
|
||||||
|
fHaOtk5EtH+dDwAzSwZmU0XGHpZ0GNjt6f9wHt92ToTXP4/7WFrl6d/fzEblaCssbl4uqS1uwHM8
|
||||||
|
0w9glplVZjntugPnB5r/BqbFHktL2g0s8TxztRuUbOTRgK0EME7S0XJJHqY66iVKppvZYxl6t8q9
|
||||||
|
jw4kwlRJX8RBAFRGnJsJYJgnBq4Cms3s6QzooVUdwscE8KSkprgonkpPsPAncBuwxwN6vpm1mNmQ
|
||||||
|
ANBaM3uKFO16h2s+7qZxbGC9FE+Hj+/h1vSINAzJAbcRdQUuBjoFpvGEXCid4DlbdMAdDA8EnnVT
|
||||||
|
/ZIs7Xwi6f5CBBaFjrR88fAWYJz7iN6keOjLnDf/AYYDD4U8mgSeoUykItdSS4gnNgCDQ1Stkmrz
|
||||||
|
eG+yXAEfBc4NUbUDfV3GVHDJK5bOU2o8NpaUy5QuJOADHl2jmTWfbYDTRU6TzOwjV9E4KwDPAFrT
|
||||||
|
9HkQWJ8nkVAegF1kNjeDrg3AJjO7Ig7A1bk+6Eqj9S57qgN6uhTwZCDKCpO+wDozu1PS5rIEbGbD
|
||||||
|
gbHAjaTKp53ztH0hsNbMhkr6sSwCD8dTPweMdhFVUNqAP4BdwF+kSMA2d0QNAq7P4Bv2AvWSDsbm
|
||||||
|
YTPrSaqSPzbEk3uAL4GVwGeSjnsGbB5gaWZSH2A5cHssHnacVRNwQaDvFuBFSZ9mudYbgfcA386c
|
||||||
|
BO6WtKqku7SZzQU+DIBtI3W75rpswbrdezWpq02bfAMPTC/psWRms136VxkY+RmSXsrzyNoPDAV8
|
||||||
|
AzakZFPazG4hVbgO1nnWSGoscLD/MTAyQl0vaWspPNwUAjZB6gJaoWU0sCNCV1f0Ke3O17DK4JYc
|
||||||
|
7nRkMr0TwMwIda9SrOHHI3RFm1qSlhNeXGstBeDBEbojRbb9U0jb9lIAjiLkin2HKpg/H3NnfdEB
|
||||||
|
R1Xg64tsu0vg/43Fvkl7GvDhCN1Ax04WS4Lp4YJSBR5RmUoNsKgYRs1sEGeuIQNsziWKyxXwUo9+
|
||||||
|
pJlNLILdZs5cOj1BfoX2rAE3A7949G+a2cwCene+y6khReFOcyR/6fJhM2sA1nmYiiSwBngkV37Z
|
||||||
|
FdHfcNHb6YvmcyS9UErG47/00F3qfjtN7toKLAMWZspSOJZygouuLnfNp4DnJb1KieV/+bCZ3ety
|
||||||
|
13TXDJOOqfjBpX07gX2Oz+oMXOqOtQYXtnYLMBzjJbUQg4QRAHXA+8DNBbZ1CHgHmCnpJDGJ7ycA
|
||||||
|
jS4/vonwK0eZSMJFT8uAJknHiFkyKYjXkiqGDyN1F7M3qaJZ1w7R0km3vg+Q4ry2Ad8BKyW1Ukby
|
||||||
|
Lxkg33SYS0djAAAAAElFTkSuQmCC
|
||||||
|
"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
height="58"
|
||||||
|
width="60" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4 KiB |
59
res/img/menu.svg
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
fill="#FFFFFF"
|
||||||
|
height="48"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="48"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="menu.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1376"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="4.9166667"
|
||||||
|
inkscape:cx="-0.91525424"
|
||||||
|
inkscape:cy="24"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="32"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<path
|
||||||
|
d="M0 0h24v24H0z"
|
||||||
|
fill="none"
|
||||||
|
id="path4" />
|
||||||
|
<path
|
||||||
|
d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"
|
||||||
|
id="path6" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
63
res/img/share.svg
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
fill="#000000"
|
||||||
|
height="48"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="48"
|
||||||
|
id="svg2"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="share.svg"
|
||||||
|
inkscape:export-filename="/home/mmk/design/icons/web/share.png"
|
||||||
|
inkscape:export-xdpi="273.75"
|
||||||
|
inkscape:export-ydpi="273.75">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1376"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="4.9166667"
|
||||||
|
inkscape:cx="-0.91525424"
|
||||||
|
inkscape:cy="24"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="32"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<path
|
||||||
|
d="M0 0h24v24H0z"
|
||||||
|
fill="none"
|
||||||
|
id="path4" />
|
||||||
|
<path
|
||||||
|
d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"
|
||||||
|
id="path6"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
457
res/img/twitter.svg
Normal file
|
@ -0,0 +1,457 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="800"
|
||||||
|
height="800"
|
||||||
|
viewBox="0 0 800.00001 800.00001"
|
||||||
|
id="svg4220"
|
||||||
|
version="1.1"
|
||||||
|
inkscape:version="0.91 r13725"
|
||||||
|
sodipodi:docname="twitter.svg"
|
||||||
|
inkscape:export-filename="/home/mmk/design/icons/web/twitter.png"
|
||||||
|
inkscape:export-xdpi="48"
|
||||||
|
inkscape:export-ydpi="48">
|
||||||
|
<defs
|
||||||
|
id="defs4222" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="0.49497475"
|
||||||
|
inkscape:cx="-135.6234"
|
||||||
|
inkscape:cy="497.40538"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:window-height="1376"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="32"
|
||||||
|
inkscape:window-maximized="1" />
|
||||||
|
<metadata
|
||||||
|
id="metadata4225">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-252.36216)">
|
||||||
|
<image
|
||||||
|
y="327.099"
|
||||||
|
x="0"
|
||||||
|
id="image4776"
|
||||||
|
xlink:href="data:image/png;base64,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
|
||||||
|
"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
height="650.52631"
|
||||||
|
width="800" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 31 KiB |
1
res/js/app.js
Normal file
|
@ -0,0 +1 @@
|
||||||
|
(function(){var n,t,a,e,r;e=function(){var e,i;return e=!1,$(".fabmenu").click(function(){return e?(a(),e=!1):(t(),e=!0)}),i=!1,$(".nav-img, .overlay, .nav-close").click(function(){return i?(n(),i=!1):(r(),i=!0)}),$(document).keyup(function(t){return i&&27===t.which?(n(),i=!1):i||77!==t.which?void 0:(r(),i=!0)}),$(".articletext a").attr("target","_blank")},$(document).ready(e),t=function(){return $(".subfab").fadeIn(125),$(".fab-img").fadeOut(60,function(){return $(".fab-img").attr("src","./res/img/close.svg"),$(".fab-img").fadeIn(60)})},a=function(){return $(".subfab").fadeOut(125),$(".fab-img").fadeOut(60,function(){return $(".fab-img").attr("src","./res/img/share.svg"),$(".fab-img").fadeIn(60)})},r=function(){return $(".nav").animate({left:"0px"},125),$(".overlay").show(),$(".overlay").animate({opacity:"0.4"},125)},n=function(){return $(".nav").animate({left:"-301px"},125),$(".overlay").animate({opacity:"0.0"},125,function(){return $(".overlay").css({display:"none"})})}}).call(this);
|
1
res/js/highlight.pack.js
Normal file
4
res/js/jquery-2.1.4.min.js
vendored
Normal file
341
res/php/ArticleGenerator.php
Normal file
|
@ -0,0 +1,341 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* Since there is no initialize function, I recommend to use the short access syntay
|
||||||
|
*
|
||||||
|
* @category Articles
|
||||||
|
* @package RangitakiPHP
|
||||||
|
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link http://marcel-kapfer.de/rangitaki
|
||||||
|
*
|
||||||
|
* Rangitaki Project
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The article generator class is a collection of functions for generating the
|
||||||
|
* article of markdown
|
||||||
|
*
|
||||||
|
* Since there is no initialize function, I recommend to use the short access syntay
|
||||||
|
*
|
||||||
|
* @category Articles
|
||||||
|
* @package RangitakiPHP
|
||||||
|
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link http://marcel-kapfer.de/rangitaki
|
||||||
|
*/
|
||||||
|
class ArticleGenerator
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to create one new article
|
||||||
|
*
|
||||||
|
* @param string $directory The directory where the article files are stored
|
||||||
|
* @param string $articlefile The name of the article file
|
||||||
|
* @param string $blog The name of the current blog
|
||||||
|
*
|
||||||
|
* @return Null
|
||||||
|
*/
|
||||||
|
function newArticle($directory, $articlefile, $blog, $excerpt, $readmore)
|
||||||
|
{
|
||||||
|
|
||||||
|
$article = file_get_contents($directory . $articlefile); // get the file
|
||||||
|
|
||||||
|
echo "<section class='card'>";
|
||||||
|
|
||||||
|
if (substr($article, 0, 6) == "%TITLE") { // if a title is in the first line
|
||||||
|
$title = substr($article, 8, strpos($article, "\n") - 8); // get this title
|
||||||
|
if ($blog == "") { // if one main blog
|
||||||
|
$link = "./?article=" . substr($articlefile, 0, -3); // create link to article
|
||||||
|
} else { // if not on main blog
|
||||||
|
$link = "./?blog=$blog&article=" . substr($articlefile, 0, -3); // create link to article at specific blog
|
||||||
|
}
|
||||||
|
echo "<a href='$link' class='headline'>$title</a>"; // print link (as a headline)
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1); // remove title tag from $article (the variable, not the document)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%DATE") { // if now a date is in the first line
|
||||||
|
$date = substr($article, 7, strpos($article, "\n") - 7); // get this date
|
||||||
|
echo "<span class='date'>$date</span>"; // print the date
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1); // remove this line
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 7) == "%AUTHOR") { // if a author is now in the first line
|
||||||
|
$author = substr($article, 9, strpos($article, "\n") - 9); // get the author
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1); // remove the line
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%TAGS") { // if tags are now at the beginning
|
||||||
|
$tags = substr($article, 7, strpos($article, "\n") - 7); // get tags
|
||||||
|
$tags = explode(", ", $tags); // split them into an array
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1); // remove this line
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<div class='articletext'>";
|
||||||
|
|
||||||
|
// print only a excerpt of the post
|
||||||
|
// with at least 200 characters if possible.
|
||||||
|
if ( $excerpt == 'on' ) {
|
||||||
|
$emptyline = strpos($article, "\n\n");
|
||||||
|
if ( $emptyline !== false ) {
|
||||||
|
if ( $emptyline < 200) {
|
||||||
|
$emptyline2 = strpos($article, "\n\n", $emptyline);
|
||||||
|
if ( $emptyline2 !== false ) {
|
||||||
|
$article = substr($article, 0, $emptyline2);
|
||||||
|
} else {
|
||||||
|
$article = substr($article, 0, $emptyline);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$article = substr($article, 0, $emptyline);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// correct $excerpt for use in line 127.
|
||||||
|
$excerpt = 'off';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo Parsedown::instance()
|
||||||
|
->setBreaksEnabled(true)
|
||||||
|
->text($article); // print now the article text as html
|
||||||
|
|
||||||
|
echo "</div>";
|
||||||
|
|
||||||
|
|
||||||
|
if ( $excerpt == 'on' ) {
|
||||||
|
echo "<div class='readmore'><a href='$link'>$readmore</a></div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (isset($author)) {
|
||||||
|
echo "<span class='author'>$author</span>"; // print the author
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($tags)) {
|
||||||
|
foreach ($tags as $tag) {
|
||||||
|
$blogurl = filter_input(INPUT_GET, "blog");
|
||||||
|
if ($blogurl == "") { // on main blog. no ?blog=
|
||||||
|
echo "<a class='tag' href='./?tag=$tag'>$tag</a> ";
|
||||||
|
} else { // not on main blog
|
||||||
|
echo "<a class='tag' href='./?blog=$blog&tag=$tag'>$tag</a> ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "</section>" . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to get an articles tags as an array
|
||||||
|
*
|
||||||
|
* @param string $directory The directory where the article files are stored
|
||||||
|
* @param string $articlefile The name of the article file
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
static function getTags($directory, $articlefile)
|
||||||
|
{
|
||||||
|
$article = file_get_contents($directory . $articlefile); // get the article
|
||||||
|
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 7) == "%AUTHOR") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
if (substr($article, 0, 5) == "%TAGS") { // detect the tags
|
||||||
|
$tags = substr($article, 7, strpos($article, "\n") - 7); // get the tags
|
||||||
|
$tags = explode(", ", $tags); // split them into an array
|
||||||
|
}
|
||||||
|
return $tags; // remove that array
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to get an article title as a string
|
||||||
|
*
|
||||||
|
* @param string $directory The directory where the article files are stored
|
||||||
|
* @param string $articlefile The name of the article file
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
static function getTitle($directory, $articlefile)
|
||||||
|
{
|
||||||
|
$article = file_get_contents($directory . $articlefile); // get the article
|
||||||
|
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
|
||||||
|
$title = substr($article, 8, strpos($article, "\n") - 8); // get this title
|
||||||
|
return $title; // remove that array
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to get the date of an article
|
||||||
|
*
|
||||||
|
* @param $directory The directory where the article is stored
|
||||||
|
* @param $articlefile The name of the article file
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
static function getDate($directory, $articlefile)
|
||||||
|
{
|
||||||
|
$article = file_get_contents($directory . $articlefile);
|
||||||
|
|
||||||
|
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
|
||||||
|
$date = substr($article, 7, strpos($article, "\n") - 7);
|
||||||
|
return $date;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to get a short summary of a text
|
||||||
|
*
|
||||||
|
* @param $directory The directory where the article is stored
|
||||||
|
* @param $articlefile The name of the article file
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
static function getSummary($directory, $articlefile)
|
||||||
|
{
|
||||||
|
$text = ArticleGenerator::getText($directory, $articlefile);
|
||||||
|
|
||||||
|
$pos = stripos($text, "\n\n");
|
||||||
|
|
||||||
|
if ($pos !== false) {
|
||||||
|
$offset = $pos;
|
||||||
|
$pos = stripos($text, ".", $offset);
|
||||||
|
$summary = substr($text, 0, $pos) . ".";
|
||||||
|
return trim($summary);
|
||||||
|
} else {
|
||||||
|
return $text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to get the author of an article
|
||||||
|
*
|
||||||
|
* @param $directory The directory where the article is stored
|
||||||
|
* @param $articlefile The name of the article file
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
static function getAuthor($directory, $articlefile)
|
||||||
|
{
|
||||||
|
$article = file_get_contents($directory . $articlefile);
|
||||||
|
|
||||||
|
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 7) == "%AUTHOR") { // detect and remove the title
|
||||||
|
$author = substr($article, 9, strpos($article, "\n") - 9);
|
||||||
|
return $author;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to get the text of an article
|
||||||
|
*
|
||||||
|
* @param $directory The directory where the article is stored
|
||||||
|
* @param $articlefile The name of the article file
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
static function getText($directory, $articlefile)
|
||||||
|
{
|
||||||
|
$article = file_get_contents($directory . $articlefile);
|
||||||
|
|
||||||
|
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 7) == "%AUTHOR") { // detect and remove the title
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%TAGS") { // detect the tags
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1); // remove the tags
|
||||||
|
}
|
||||||
|
|
||||||
|
return $article;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to get a array of the article
|
||||||
|
*
|
||||||
|
* @param $directory The directory where the article is stored
|
||||||
|
* @param $articlefile The name of the article file
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getArray($directory, $articlefile)
|
||||||
|
{
|
||||||
|
$article = file_get_contents($directory . $articlefile);
|
||||||
|
$title = "";
|
||||||
|
$date = "";
|
||||||
|
$author = "";
|
||||||
|
$tags = array();
|
||||||
|
|
||||||
|
if (substr($article, 0, 6) == "%TITLE") { // get and remove the title
|
||||||
|
$title = substr($article, 8, strpos($article, "\n") - 8);
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%DATE") { // get and remove the title
|
||||||
|
$date = substr($article, 7, strpos($article, "\n") - 7);
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 7) == "%AUTHOR") { // get and remove the title
|
||||||
|
$author = substr($article, 9, strpos($article, "\n") - 9);
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (substr($article, 0, 5) == "%TAGS") { // get and remove the tags
|
||||||
|
$tags = substr($article, 7, strpos($article, "\n") - 7); // get the tags
|
||||||
|
$tags = explode(", ", $tags); // split them into an array
|
||||||
|
$article = substr($article, strpos($article, "\n") + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = array(
|
||||||
|
"title" => $title,
|
||||||
|
"date" => $date,
|
||||||
|
"author" => $author,
|
||||||
|
"tags" => $tags,
|
||||||
|
"text" => $article
|
||||||
|
);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
137
res/php/BlogListGenerator.php
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* Rangitaki Project
|
||||||
|
*
|
||||||
|
* @category Blogs
|
||||||
|
* @package RangitakiPHP
|
||||||
|
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link http://marcel-kapfer.de/rangitaki
|
||||||
|
*/
|
||||||
|
namespace mmk2410\rbe\BlogListGenerator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The blog list generator class is a collection of functions for generating
|
||||||
|
* blog list
|
||||||
|
* or getting informations about them
|
||||||
|
*
|
||||||
|
* Since there is no initialize function, I recommend to use the short
|
||||||
|
* access syntay
|
||||||
|
*
|
||||||
|
* @category Generator
|
||||||
|
* @package Rbe
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo>
|
||||||
|
* @license MIT License
|
||||||
|
* @link http://marcel-kapfer.de/rangitaki
|
||||||
|
*/
|
||||||
|
class BlogListGenerator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A function to generate a blog nav item
|
||||||
|
*
|
||||||
|
* @param string $directory The directory of the blog file
|
||||||
|
* @param string $blogname The name of the blog file
|
||||||
|
* @param string $blogmaintitle The name of the main blog
|
||||||
|
*
|
||||||
|
* @return None
|
||||||
|
*/
|
||||||
|
public function listBlog($directory, $blogname, $blogmaintitle)
|
||||||
|
{
|
||||||
|
// get content of the blog file;
|
||||||
|
$blog = file_get_contents($directory . $blogname);
|
||||||
|
// add a line break as a security measurement
|
||||||
|
$blog = $blog . "\n";
|
||||||
|
// check if the first line includes a title
|
||||||
|
if (substr($blog, 0, 6) == "%TITLE") {
|
||||||
|
// grab the title
|
||||||
|
$itemname = substr($blog, 8, strpos($blog, "\n") - 8);
|
||||||
|
// if on main blog
|
||||||
|
if ($itemname == "main") {
|
||||||
|
// create a nav item to the main blog
|
||||||
|
$atag = "<a class='nav-item' href='./'>$blogmaintitle</a>";
|
||||||
|
} else {
|
||||||
|
// create a link to the blog
|
||||||
|
$link = "./?blog=" . substr($blogname, 0, -3);
|
||||||
|
// create a nav item to the blog
|
||||||
|
$atag = "<a class='nav-item' href='$link'>$itemname</a>";
|
||||||
|
}
|
||||||
|
$blog = substr($blog, strpos($blog, "\n") + 1);
|
||||||
|
}
|
||||||
|
// nav item as link to external page
|
||||||
|
if (substr($blog, 0, 4) == "%URL") {
|
||||||
|
$itemurl = substr($blog, 6, strpos($blog, "\n") - 6);
|
||||||
|
$atag = "<a class='nav-item' href='$itemurl'>$itemname</a>";
|
||||||
|
}
|
||||||
|
return $atag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to get the name of a blog
|
||||||
|
*
|
||||||
|
* @param string $file The path of the blog file
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getName($file)
|
||||||
|
{
|
||||||
|
// get the content of the blog file
|
||||||
|
$blog = file_get_contents($file);
|
||||||
|
// add a line break as a securit measure
|
||||||
|
$blog = $blog . "\n";
|
||||||
|
// check if first line includes a title
|
||||||
|
if (substr($blog, 0, 6) == "%TITLE") {
|
||||||
|
// grab the title
|
||||||
|
$blog = substr($blog, 8, strpos($blog, "\n") - 8);
|
||||||
|
return $blog;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to recieve the amount of articles
|
||||||
|
* of a blog
|
||||||
|
*
|
||||||
|
* @param string $blog the blog name
|
||||||
|
*
|
||||||
|
* @return int Amount of files
|
||||||
|
*/
|
||||||
|
public static function getArticleAmount($blog)
|
||||||
|
{
|
||||||
|
$directory = "./articles/" . $blog . "/";
|
||||||
|
if (!file_exists($directory)) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
$i = 0;
|
||||||
|
$handle = opendir($directory);
|
||||||
|
while (($file = readdir($handle)) !== false) {
|
||||||
|
if (!in_array($file, array('.','..'))) {
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function returning the external linkn of
|
||||||
|
* a blog.
|
||||||
|
*
|
||||||
|
* @param string $blog the blog name
|
||||||
|
* @param string $dir root directory of installation
|
||||||
|
*
|
||||||
|
* @return string link to external page else null
|
||||||
|
*/
|
||||||
|
public function getExternalLink($blog, $dir)
|
||||||
|
{
|
||||||
|
$path = $dir . "/blogs/" . $blog;
|
||||||
|
$blog = file_get_contents($path) . "\n";
|
||||||
|
if (substr($blog, 0, 6) == "%TITLE") {
|
||||||
|
$blog = substr($blog, strpos($blog, "\n") + 1);
|
||||||
|
}
|
||||||
|
if (substr($blog, 0, 4) == "%URL") {
|
||||||
|
return substr($blog, 6, strpos($blog, "\n") - 6);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
74
res/php/Config.php
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* Configuration parser for yaml configuration files
|
||||||
|
*
|
||||||
|
* @category Configuration
|
||||||
|
* @package Rbe
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link http://marcel-kapfer.de/rangitaki
|
||||||
|
*/
|
||||||
|
namespace mmk2410\rbe\config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* Configuration parser for yaml configuration files
|
||||||
|
*
|
||||||
|
* @category Configuration
|
||||||
|
* @package Rbe
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link http://marcel-kapfer.de/rangitaki
|
||||||
|
*/
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path to yaml file
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $file;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for the Config class
|
||||||
|
*
|
||||||
|
* @param $config path to the yaml file
|
||||||
|
* @param $composer path to the composer autoload
|
||||||
|
*/
|
||||||
|
public function __construct($config, $composer)
|
||||||
|
{
|
||||||
|
$this->file = $config;
|
||||||
|
require $composer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return yaml config as PHP array
|
||||||
|
*
|
||||||
|
* @return config array
|
||||||
|
*/
|
||||||
|
public function getConfig()
|
||||||
|
{
|
||||||
|
$yaml = new \Symfony\Component\Yaml\Parser();
|
||||||
|
return $yaml->parse(file_get_contents($this->file));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write array into confi*
|
||||||
|
* Write array into config file
|
||||||
|
*
|
||||||
|
* @param array config new config
|
||||||
|
*
|
||||||
|
* @return FALSE if failed to write
|
||||||
|
*/
|
||||||
|
public function writeConfig($config)
|
||||||
|
{
|
||||||
|
$dumper = new \Symfony\Component\Yaml\Dumper();
|
||||||
|
|
||||||
|
$yaml = $dumper->dump($config, 2);
|
||||||
|
|
||||||
|
return file_put_contents($this->file, $yaml);
|
||||||
|
}
|
||||||
|
}
|
44
res/php/Disqus.php
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
<!--
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright 2015 mmk2410.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<?php if ($config['blog']['disqus']) { // check if disqus is enabled ?>
|
||||||
|
<section class="card">
|
||||||
|
<div id="disqus_thread"></div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* * * CONFIGURATION VARIABLES * * */
|
||||||
|
var disqus_shortname = '<?php echo $config['blog']['disqus']; ?>';
|
||||||
|
|
||||||
|
/* * * DON'T EDIT BELOW THIS LINE * * */
|
||||||
|
(function () {
|
||||||
|
var dsq = document.createElement('script');
|
||||||
|
dsq.type = 'text/javascript';
|
||||||
|
dsq.async = true;
|
||||||
|
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
|
||||||
|
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
|
||||||
|
</section>
|
||||||
|
<?php
|
||||||
|
} ?>
|
54
res/php/GoogleAnalytics.php
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* Rangitaki Project
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
if ($config["blog"]["analytics"]) { // check if google analytics is enabled
|
||||||
|
if (!($_SERVER['HTTP_DNT'] == 1)) {
|
||||||
|
?>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
(function (i, s, o, g, r, a, m) {
|
||||||
|
i['GoogleAnalyticsObject'] = r;
|
||||||
|
i[r] = i[r] || function () {
|
||||||
|
(i[r].q = i[r].q || []).push(arguments);
|
||||||
|
}, i[r].l = 1 * new Date();
|
||||||
|
a = s.createElement(o),
|
||||||
|
m = s.getElementsByTagName(o)[0];
|
||||||
|
a.async = 1;
|
||||||
|
a.src = g;
|
||||||
|
m.parentNode.insertBefore(a, m);
|
||||||
|
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
|
||||||
|
|
||||||
|
ga('create', '<?php echo $bloganalytics; ?>', 'auto');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
67
res/php/Pagination.php
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* PHP Version 7
|
||||||
|
*
|
||||||
|
* PHP script for creating the next / prev page links
|
||||||
|
*
|
||||||
|
* @category Pagination
|
||||||
|
* @package Rbe
|
||||||
|
* @author Marcel Kapfer (mmk2410) <marcelmichaelkapfer@yahoo.co.nz>
|
||||||
|
* @license MIT License
|
||||||
|
* @link http://marcel-kapfer.de/rangitaki
|
||||||
|
*/
|
||||||
|
require_once "BlogListGenerator.php";
|
||||||
|
use mmk2410\rbe\BlogListGenerator\BlogListGenerator as BlogListGenerator;
|
||||||
|
|
||||||
|
require_once './res/php/Config.php';
|
||||||
|
|
||||||
|
$configParser = new mmk2410\rbe\config\Config('./config.yaml', './vendor/autoload.php');
|
||||||
|
|
||||||
|
$conf = $configParser->getConfig();
|
||||||
|
|
||||||
|
require_once "lang/" . $config["language"] . ".php";
|
||||||
|
|
||||||
|
if ($blog["design"]["pagination"]) {
|
||||||
|
?>
|
||||||
|
<div class="pag_buttons">
|
||||||
|
<?php
|
||||||
|
if ($pag_min > 0) {
|
||||||
|
if (isset($getblog)) {
|
||||||
|
?>
|
||||||
|
<a href="<?php
|
||||||
|
echo "?blog=" . $getblog . "&page=" . ($pagenumber - 1);
|
||||||
|
?>" class="pag_prev button"><?php echo $BLOGLANG["Previous Page"]; ?></a>
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
?>
|
||||||
|
<a href="<?php
|
||||||
|
echo "?page=" . ($pagenumber - 1);
|
||||||
|
?>" class="pag_prev button"><?php echo $BLOGLANG['Previous Page']; ?></a>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($getblog)) {
|
||||||
|
$pag_blog = $getblog;
|
||||||
|
} else {
|
||||||
|
$pag_blog = "main";
|
||||||
|
}
|
||||||
|
if ($pag_max < BlogListGenerator::getArticleAmount($pag_blog)) {
|
||||||
|
if (isset($getblog)) {
|
||||||
|
?>
|
||||||
|
<a href="<?php
|
||||||
|
echo "?blog=" . $getblog . "&page=" . ($pagenumber + 1);
|
||||||
|
?>" class="pag_next button"><?php echo $BLOGLANG["Next Page"]; ?></a>
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
?>
|
||||||
|
<a href="<?php
|
||||||
|
echo "?page=" . ($pagenumber + 1);
|
||||||
|
?>" class="pag_next button"><?php echo $BLOGLANG["Next Page"];?></a>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
38
src/coffee-extensions/example.coffee
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
###
|
||||||
|
Rangitaki Project
|
||||||
|
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright 2015 mmk2410.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
###
|
||||||
|
|
||||||
|
###
|
||||||
|
This is a example JavaScript extension for Rangitaki
|
||||||
|
###
|
||||||
|
|
||||||
|
main = () ->
|
||||||
|
console.log """
|
||||||
|
Welcome Developer! \nYou're seeing the output of a
|
||||||
|
JavaScript extension for the Rangitaki blogging engine.
|
||||||
|
"""
|
||||||
|
|
||||||
|
$(document).ready main()
|
||||||
|
|
87
src/coffee/app.coffee
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
###
|
||||||
|
Rangitaki Project
|
||||||
|
|
||||||
|
The MIT License
|
||||||
|
|
||||||
|
Copyright 2015 mmk2410.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
###
|
||||||
|
|
||||||
|
main = () ->
|
||||||
|
|
||||||
|
# FAB
|
||||||
|
fabActive = false
|
||||||
|
$('.fabmenu').click ->
|
||||||
|
if !fabActive
|
||||||
|
fabFadeIn()
|
||||||
|
fabActive = true
|
||||||
|
else
|
||||||
|
fabFadeOut()
|
||||||
|
fabActive = false
|
||||||
|
|
||||||
|
# Navigation Drawer
|
||||||
|
navOpen = false
|
||||||
|
$('.nav-img, .overlay, .nav-close').click ->
|
||||||
|
if !navOpen
|
||||||
|
openNav()
|
||||||
|
navOpen = true
|
||||||
|
else
|
||||||
|
closeNav()
|
||||||
|
navOpen = false
|
||||||
|
|
||||||
|
###
|
||||||
|
Keyhandling for the navigation drawer.
|
||||||
|
opens the drawer on 'm' (key code: 77)
|
||||||
|
closes the drawer on 'Esc' (key code: 27)
|
||||||
|
###
|
||||||
|
$(document).keyup (e) ->
|
||||||
|
if navOpen and e.which is 27
|
||||||
|
closeNav()
|
||||||
|
navOpen = false
|
||||||
|
else if !navOpen and e.which == 77
|
||||||
|
openNav()
|
||||||
|
navOpen = true
|
||||||
|
|
||||||
|
# Make every link in articles target="_blank"
|
||||||
|
$('.articletext a').attr 'target', '_blank'
|
||||||
|
|
||||||
|
$(document).ready main
|
||||||
|
|
||||||
|
fabFadeIn = () ->
|
||||||
|
$('.subfab').fadeIn 125
|
||||||
|
$('.fab-img').fadeOut 60, ->
|
||||||
|
$('.fab-img').attr "src", "./res/img/close.svg"
|
||||||
|
$('.fab-img').fadeIn 60
|
||||||
|
|
||||||
|
fabFadeOut = () ->
|
||||||
|
$('.subfab').fadeOut 125
|
||||||
|
$('.fab-img').fadeOut 60, ->
|
||||||
|
$('.fab-img').attr "src", "./res/img/share.svg"
|
||||||
|
$('.fab-img').fadeIn 60
|
||||||
|
|
||||||
|
openNav = () ->
|
||||||
|
$('.nav').animate {"left": "0px"}, 125
|
||||||
|
$('.overlay').show()
|
||||||
|
$('.overlay').animate {"opacity": "0.4"}, 125
|
||||||
|
|
||||||
|
closeNav = () ->
|
||||||
|
$('.nav').animate {"left": "-301px"}, 125
|
||||||
|
$('.overlay').animate {"opacity": "0.0"}, 125, ->
|
||||||
|
$('.overlay').css {"display": "none"}
|
179
src/sass-themes/background-img.sass
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
/*
|
||||||
|
* Rangitaki Project
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
body
|
||||||
|
font-family: "Roboto", sans-serif
|
||||||
|
background: #f6f6f6
|
||||||
|
color: #383838
|
||||||
|
background-image: url(//example.com/res/img/intro.svg)
|
||||||
|
background-size: cover
|
||||||
|
background-attachment: fixed
|
||||||
|
background-position: top center
|
||||||
|
background-repeat: no-repeat
|
||||||
|
|
||||||
|
.header
|
||||||
|
background-color: rgba(0, 0, 0, 0.45)
|
||||||
|
position: fixed
|
||||||
|
|
||||||
|
.title
|
||||||
|
color: #fff
|
||||||
|
position: absolute
|
||||||
|
|
||||||
|
.title > a
|
||||||
|
color: #fff
|
||||||
|
|
||||||
|
.fadeout
|
||||||
|
background: -moz-linear-gradient(left, rgba(30,87,153,0) 0%, rgba(0, 0, 0, 0.45) 100%)
|
||||||
|
background: -webkit-linear-gradient(left, rgba(30,87,153,0) 0%,rgba(0, 0, 0, 0.45) 100%)
|
||||||
|
background: -o-linear-gradient(left, rgba(30,87,153,0) 0%,rgba(0, 0, 0, 0.45) 100%)
|
||||||
|
background: -ms-linear-gradient(left, rgba(30,87,153,0) 0%,rgba(0, 0, 0, 0.45) 100%)
|
||||||
|
background: linear-gradient(to right, rgba(30,87,153,0) 0%,rgba(0, 0, 0, 0.45) 100%)
|
||||||
|
|
||||||
|
.nav
|
||||||
|
background-color: #fff
|
||||||
|
border-right: 1px solid #e0e0e0
|
||||||
|
|
||||||
|
.nav-item, .nav-item-static
|
||||||
|
color: #383838
|
||||||
|
|
||||||
|
.nav-item
|
||||||
|
font-weight: 600
|
||||||
|
|
||||||
|
.nav-item:active
|
||||||
|
background-color: #e2e2e2
|
||||||
|
|
||||||
|
.divider
|
||||||
|
border-bottom: 1px solid #e0e0e0
|
||||||
|
|
||||||
|
.card
|
||||||
|
background: #fff
|
||||||
|
border-radius: 2px
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
|
||||||
|
|
||||||
|
.card a
|
||||||
|
color: #ff4415
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
border-bottom-color: transparent
|
||||||
|
transition: border-bottom-color 150ms ease-in-out 100ms
|
||||||
|
|
||||||
|
.card a:hover
|
||||||
|
border-bottom-color: #ff4415
|
||||||
|
|
||||||
|
.headline
|
||||||
|
font-size: 24px
|
||||||
|
color: #383838!important
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: none!important
|
||||||
|
|
||||||
|
.headline:hover
|
||||||
|
color: #ff4415!important
|
||||||
|
|
||||||
|
.date
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.articletext
|
||||||
|
font-size: 14px
|
||||||
|
line-height: 24px
|
||||||
|
|
||||||
|
.author
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.tag
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.fab
|
||||||
|
background-color: #ff4415
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
|
||||||
|
|
||||||
|
.subfab
|
||||||
|
background-color: #fff
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
|
||||||
|
|
||||||
|
.button
|
||||||
|
border-width: 1px
|
||||||
|
border-style: solid
|
||||||
|
text-transform: uppercase
|
||||||
|
-webkit-box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
-moz-box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
border-radius: 2px
|
||||||
|
letter-spacing: 0.4px
|
||||||
|
font-weight: 700
|
||||||
|
font-size: 14px
|
||||||
|
transition-property: box-shadow
|
||||||
|
transition-delay: 50ms
|
||||||
|
transition-duration: 125ms
|
||||||
|
transition-timing-function: ease
|
||||||
|
-o-transition-property: box-shadow
|
||||||
|
-o-transition-delay: 50ms
|
||||||
|
-o-transition-duration: 125ms
|
||||||
|
-o-transition-timing-function: ease
|
||||||
|
-moz-transition-property: box-shadow
|
||||||
|
-moz-transition-delay: 50ms
|
||||||
|
-moz-transition-duration: 125ms
|
||||||
|
-moz-transition-timing-function: ease
|
||||||
|
-webkit-transition-property: box-shadow
|
||||||
|
-webkit-transition-delay: 50ms
|
||||||
|
-webkit-transition-duration: 125ms
|
||||||
|
-webkit-transition-timing-function: ease
|
||||||
|
|
||||||
|
.button:hover, .button:hover
|
||||||
|
-webkit-box-shadow: 0.5px 1.8px 2.1px 1.4px rgba(32, 32, 32, 0.85)
|
||||||
|
-moz-box-shadow: 0.5px 1.8px 2.1px 1.4px rgba(32, 32, 32, 0.85)
|
||||||
|
box-shadow: 0.5px 1.8px 2.1px 1.4px rgba(32, 32, 32, 0.85)
|
||||||
|
|
||||||
|
.pag_next
|
||||||
|
background-color: #ff4415
|
||||||
|
border-color: #ff4415
|
||||||
|
|
||||||
|
.pag_prev
|
||||||
|
background-color: #fff
|
||||||
|
border-color: #fff
|
||||||
|
color: #383838
|
||||||
|
|
||||||
|
.footer
|
||||||
|
font-size: 12px
|
||||||
|
text-align: center
|
||||||
|
color: #fff
|
||||||
|
text-shadow: 1px 1px rgba(55, 55, 55, 0.3)
|
||||||
|
|
||||||
|
.footer a
|
||||||
|
color: #fff
|
||||||
|
text-shadow: 1px 1px rgba(175, 175, 175, 0.3)
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
border-bottom-color: transparent
|
||||||
|
|
||||||
|
.footer a:hover
|
||||||
|
border-bottom-color: #fff
|
||||||
|
|
||||||
|
@media screen and (min-width: 1440px)
|
||||||
|
|
||||||
|
.nav
|
||||||
|
background-color: rgba(255, 255, 255, 0.8)
|
||||||
|
|
161
src/sass-themes/material-dark.sass
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
/*
|
||||||
|
* Rangitaki Project
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
body
|
||||||
|
font-family: "Roboto", sans-serif
|
||||||
|
background: #303030
|
||||||
|
color: #fff
|
||||||
|
|
||||||
|
.header
|
||||||
|
background-color: #212121
|
||||||
|
position: fixed
|
||||||
|
box-shadow: 2px 0 2px 2px rgba(32, 32, 32, 0.85)
|
||||||
|
|
||||||
|
.title
|
||||||
|
color: #fff
|
||||||
|
position: absolute
|
||||||
|
> a
|
||||||
|
color: #fff
|
||||||
|
|
||||||
|
.fadeout
|
||||||
|
background: -moz-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #212121 100%)
|
||||||
|
/* FF3.6+
|
||||||
|
background: -webkit-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #212121 100%)
|
||||||
|
/* Chrome10+,Safari5.1+
|
||||||
|
background: -o-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #212121 100%)
|
||||||
|
/* Opera 11.10+
|
||||||
|
background: -ms-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #212121 100%)
|
||||||
|
/* IE10+
|
||||||
|
background: linear-gradient(to right, rgba(30, 87, 153, 0) 0%, #212121 100%)
|
||||||
|
/* W3C
|
||||||
|
|
||||||
|
.nav
|
||||||
|
background-color: #424242
|
||||||
|
border-right: 1px solid #1f1f1f
|
||||||
|
|
||||||
|
.nav-item, .nav-item-static
|
||||||
|
color: #fff
|
||||||
|
|
||||||
|
.nav-item
|
||||||
|
font-weight: 600
|
||||||
|
&:active
|
||||||
|
background-color: #383838
|
||||||
|
|
||||||
|
.divider
|
||||||
|
border-bottom: 1px solid #1f1f1f
|
||||||
|
|
||||||
|
.card
|
||||||
|
background: #424242
|
||||||
|
border-radius: 2px
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
a
|
||||||
|
color: #ff4415
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
border-bottom-color: transparent
|
||||||
|
transition: border-bottom-color 150ms ease-in-out 100ms
|
||||||
|
&:hover
|
||||||
|
border-bottom-color: #ff4415
|
||||||
|
|
||||||
|
.headline
|
||||||
|
font-size: 24px
|
||||||
|
color: #fff !important
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: none !important
|
||||||
|
&:hover
|
||||||
|
color: #ff4415 !important
|
||||||
|
|
||||||
|
.date
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.articletext
|
||||||
|
font-size: 14px
|
||||||
|
line-height: 24px
|
||||||
|
|
||||||
|
.author, .tag
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.fab
|
||||||
|
background-color: #ff4415
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
|
||||||
|
.subfab
|
||||||
|
background-color: #424242
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
|
||||||
|
.button
|
||||||
|
text-transform: uppercase
|
||||||
|
border-width: 1px
|
||||||
|
border-style: solid
|
||||||
|
-webkit-box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
-moz-box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(42, 42, 42, 0.65)
|
||||||
|
border-radius: 2px
|
||||||
|
letter-spacing: 0.4px
|
||||||
|
font-weight: 700
|
||||||
|
font-size: 14px
|
||||||
|
transition-property: box-shadow
|
||||||
|
transition-delay: 50ms
|
||||||
|
transition-duration: 125ms
|
||||||
|
transition-timing-function: ease
|
||||||
|
-o-transition-property: box-shadow
|
||||||
|
-o-transition-delay: 50ms
|
||||||
|
-o-transition-duration: 125ms
|
||||||
|
-o-transition-timing-function: ease
|
||||||
|
-moz-transition-property: box-shadow
|
||||||
|
-moz-transition-delay: 50ms
|
||||||
|
-moz-transition-duration: 125ms
|
||||||
|
-moz-transition-timing-function: ease
|
||||||
|
-webkit-transition-property: box-shadow
|
||||||
|
-webkit-transition-delay: 50ms
|
||||||
|
-webkit-transition-duration: 125ms
|
||||||
|
-webkit-transition-timing-function: ease
|
||||||
|
&:hover
|
||||||
|
-webkit-box-shadow: 0.5px 1.8px 2.1px 1.4px rgba(32, 32, 32, 0.85)
|
||||||
|
-moz-box-shadow: 0.5px 1.8px 2.1px 1.4px rgba(32, 32, 32, 0.85)
|
||||||
|
box-shadow: 0.5px 1.8px 2.1px 1.4px rgba(32, 32, 32, 0.85)
|
||||||
|
|
||||||
|
.pag_next
|
||||||
|
background-color: #ff4415
|
||||||
|
border-color: #ff4415
|
||||||
|
|
||||||
|
.pag_prev
|
||||||
|
background-color: #424242
|
||||||
|
border-color: #424242
|
||||||
|
color: #CCCCCC
|
||||||
|
|
||||||
|
.footer
|
||||||
|
font-size: 12px
|
||||||
|
text-align: center
|
||||||
|
color: #fff
|
||||||
|
a
|
||||||
|
color: #fff
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
border-bottom-color: transparent
|
||||||
|
&:hover
|
||||||
|
border-bottom-color: #fff
|
156
src/sass-themes/material-light.sass
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
/*
|
||||||
|
* Rangitaki Project
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
body
|
||||||
|
font-family: "Roboto", sans-serif
|
||||||
|
background: #f6f6f6
|
||||||
|
color: #383838
|
||||||
|
|
||||||
|
.header
|
||||||
|
background-color: #ff4415
|
||||||
|
position: fixed
|
||||||
|
box-shadow: 2px 0 2px 2px rgba(62, 62, 62, 0.45)
|
||||||
|
|
||||||
|
.title
|
||||||
|
color: #fff
|
||||||
|
position: absolute
|
||||||
|
> a
|
||||||
|
color: #fff
|
||||||
|
|
||||||
|
.fadeout
|
||||||
|
background: -moz-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #ff4415 100%)
|
||||||
|
background: -webkit-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #ff4415 100%)
|
||||||
|
background: -o-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #ff4415 100%)
|
||||||
|
background: -ms-linear-gradient(left, rgba(30, 87, 153, 0) 0%, #ff4415 100%)
|
||||||
|
background: linear-gradient(to right, rgba(30, 87, 153, 0) 0%, #ff4415 100%)
|
||||||
|
/* W3C
|
||||||
|
|
||||||
|
.nav
|
||||||
|
background-color: #fff
|
||||||
|
border-right: 1px solid #e0e0e0
|
||||||
|
|
||||||
|
.nav-item, .nav-item-static
|
||||||
|
color: #383838
|
||||||
|
|
||||||
|
.nav-item
|
||||||
|
font-weight: 600
|
||||||
|
&:hover, &:active
|
||||||
|
background-color: #e2e2e2
|
||||||
|
|
||||||
|
.divider
|
||||||
|
border-bottom: 1px solid #e0e0e0
|
||||||
|
|
||||||
|
.card
|
||||||
|
background: #fff
|
||||||
|
border-radius: 2px
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
|
||||||
|
a
|
||||||
|
color: #ff4415
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
border-bottom-color: transparent
|
||||||
|
transition: border-bottom-color 150ms ease-in-out 100ms
|
||||||
|
&:hover
|
||||||
|
border-bottom-color: #ff4415
|
||||||
|
|
||||||
|
.headline
|
||||||
|
font-size: 24px
|
||||||
|
color: #383838 !important
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: none !important
|
||||||
|
&:hover
|
||||||
|
color: #ff4415 !important
|
||||||
|
|
||||||
|
.date
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.articletext
|
||||||
|
font-size: 14px
|
||||||
|
line-height: 24px
|
||||||
|
|
||||||
|
.author, .tag
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.fab
|
||||||
|
background-color: #ff4415
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
|
||||||
|
|
||||||
|
.subfab
|
||||||
|
background-color: #fff
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px rgba(62, 62, 62, 0.3)
|
||||||
|
|
||||||
|
.button
|
||||||
|
text-transform: uppercase
|
||||||
|
border-width: 1px
|
||||||
|
border-style: solid
|
||||||
|
-webkit-box-shadow: 0.4px 1px 1.5px 1px #aaa
|
||||||
|
-moz-box-shadow: 0.4px 1px 1.5px 1px #aaa
|
||||||
|
box-shadow: 0.4px 1px 1.5px 1px #aaa
|
||||||
|
border-radius: 2px
|
||||||
|
letter-spacing: 0.4px
|
||||||
|
font-weight: 700
|
||||||
|
font-size: 14px
|
||||||
|
transition-property: box-shadow
|
||||||
|
transition-delay: 50ms
|
||||||
|
transition-duration: 125ms
|
||||||
|
transition-timing-function: ease
|
||||||
|
-o-transition-property: box-shadow
|
||||||
|
-o-transition-delay: 50ms
|
||||||
|
-o-transition-duration: 125ms
|
||||||
|
-o-transition-timing-function: ease
|
||||||
|
-moz-transition-property: box-shadow
|
||||||
|
-moz-transition-delay: 50ms
|
||||||
|
-moz-transition-duration: 125ms
|
||||||
|
-moz-transition-timing-function: ease
|
||||||
|
-webkit-transition-property: box-shadow
|
||||||
|
-webkit-transition-delay: 50ms
|
||||||
|
-webkit-transition-duration: 125ms
|
||||||
|
-webkit-transition-timing-function: ease
|
||||||
|
&:hover
|
||||||
|
-webkit-box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa
|
||||||
|
-moz-box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa
|
||||||
|
box-shadow: 0.5px 1.8px 2.1px 1.4px #aaa
|
||||||
|
|
||||||
|
.pag_next
|
||||||
|
background-color: #ff4415
|
||||||
|
border-color: #ff4415
|
||||||
|
|
||||||
|
.pag_prev
|
||||||
|
background-color: #fff
|
||||||
|
border-color: #fff
|
||||||
|
color: #383838
|
||||||
|
|
||||||
|
.footer
|
||||||
|
font-size: 12px
|
||||||
|
text-align: center
|
||||||
|
a
|
||||||
|
color: #383838
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
border-bottom-color: transparent
|
||||||
|
&:hover
|
||||||
|
border-bottom-color: #383838
|
194
src/sass-themes/nextDESIGN.sass
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
/*
|
||||||
|
*The MIT License
|
||||||
|
*
|
||||||
|
*Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
*Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
*of this software and associated documentation files (the "Software"), to deal
|
||||||
|
*in the Software without restriction, including without limitation the rights
|
||||||
|
*to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
*copies of the Software, and to permit persons to whom the Software is
|
||||||
|
*furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
*The above copyright notice and this permission notice shall be included in
|
||||||
|
*all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
*THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
*IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
*FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
*AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
*LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
*OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
*THE SOFTWARE.
|
||||||
|
/*
|
||||||
|
* Created on : Jun 18, 2015, 6:39:37 PM
|
||||||
|
* Author : mmk2410
|
||||||
|
|
||||||
|
$font: "Fira Sans", sans-serif
|
||||||
|
|
||||||
|
$background: #f0f0f0
|
||||||
|
$text-color: #383838
|
||||||
|
$primary-color: #4CAF50
|
||||||
|
$header-shadow: rgba(62, 62, 62, 0.45)
|
||||||
|
$white: #FFFFFF
|
||||||
|
$fadeout-color: rgba(30, 87, 153, 0)
|
||||||
|
$border: #e0e0e0
|
||||||
|
$active-color: #e2e2e2
|
||||||
|
$fab-shadow: rgba(62, 62, 62, 0.3)
|
||||||
|
$footer-background: #2D2D2D
|
||||||
|
|
||||||
|
body
|
||||||
|
font-family: $font
|
||||||
|
background: $background
|
||||||
|
color: $text-color
|
||||||
|
margin: 130px 0 0
|
||||||
|
|
||||||
|
::selection, ::-moz-selection
|
||||||
|
color: $background
|
||||||
|
background-color: $primary-color
|
||||||
|
|
||||||
|
.header
|
||||||
|
height: 55px
|
||||||
|
background-color: $primary-color
|
||||||
|
position: fixed
|
||||||
|
box-shadow: 2px 0 2px 2px $header-shadow
|
||||||
|
|
||||||
|
.title
|
||||||
|
line-height: 55px
|
||||||
|
color: $white
|
||||||
|
position: absolute
|
||||||
|
left: 0
|
||||||
|
margin-left: calc(20% + 24px)
|
||||||
|
> a
|
||||||
|
color: $white
|
||||||
|
text-decoration: none
|
||||||
|
|
||||||
|
.fadeout
|
||||||
|
height: 55px
|
||||||
|
background: -moz-linear-gradient(left, $fadeout-color 0%, $primary-color 100%)
|
||||||
|
background: -webkit-linear-gradient(left, $fadeout-color 0%, $primary-color 100%)
|
||||||
|
background: -o-linear-gradient(left, $fadeout-color 0%, $primary-color 100%)
|
||||||
|
background: -ms-linear-gradient(left, $fadeout-color 0%, $primary-color 100%)
|
||||||
|
background: linear-gradient(to right, $fadeout-color 0%, $primary-color 100%)
|
||||||
|
|
||||||
|
.nav-img
|
||||||
|
padding: 14px 19px
|
||||||
|
|
||||||
|
.nav
|
||||||
|
background-color: $white
|
||||||
|
border-right: 1px solid $border
|
||||||
|
|
||||||
|
.nav-item, .nav-item-static
|
||||||
|
color: $text-color
|
||||||
|
|
||||||
|
.nav-item
|
||||||
|
font-weight: 600
|
||||||
|
&:hover
|
||||||
|
color: $primary-color
|
||||||
|
&:active
|
||||||
|
background-color: $active-color
|
||||||
|
|
||||||
|
.divider
|
||||||
|
border-bottom: 1px solid $border
|
||||||
|
|
||||||
|
.card
|
||||||
|
background: none
|
||||||
|
border-radius: 0
|
||||||
|
box-shadow: none
|
||||||
|
margin: 0 20% 100px
|
||||||
|
width: auto
|
||||||
|
a
|
||||||
|
color: $primary-color
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
transition: border-bottom-color 150ms ease-in-out 100ms
|
||||||
|
&:hover
|
||||||
|
border-bottom-color: #4CAF50
|
||||||
|
|
||||||
|
.headline
|
||||||
|
font-size: 30px
|
||||||
|
line-height: 50px
|
||||||
|
color: #383838 !important
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: none !important
|
||||||
|
&:hover
|
||||||
|
color: #4CAF50 !important
|
||||||
|
|
||||||
|
.date
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.articletext
|
||||||
|
margin-top: 30px
|
||||||
|
font-size: 16px
|
||||||
|
line-height: 30px
|
||||||
|
|
||||||
|
.author, .tag
|
||||||
|
font-size: 13px
|
||||||
|
|
||||||
|
.fab
|
||||||
|
background-color: $primary-color
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px $fab-shadow
|
||||||
|
|
||||||
|
.subfab
|
||||||
|
background-color: $white
|
||||||
|
box-shadow: 0 1px 1.5px 1.5px $fab-shadow
|
||||||
|
|
||||||
|
.button
|
||||||
|
color: $primary-color
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
margin: 0
|
||||||
|
min-width: 0
|
||||||
|
padding: 0
|
||||||
|
line-height: 16px
|
||||||
|
height: 16px
|
||||||
|
transition-property: border-bottom-color
|
||||||
|
transition-delay: 50ms
|
||||||
|
transition-duration: 125ms
|
||||||
|
transition-timing-function: ease
|
||||||
|
-moz-transition-property: border-bottom-color
|
||||||
|
-moz-transition-delay: 50ms
|
||||||
|
-moz-transition-duration: 125ms
|
||||||
|
-moz-transition-timing-function: ease
|
||||||
|
-webkit-transition-property: border-bottom-color
|
||||||
|
-webkit-transition-delay: 50ms
|
||||||
|
-webkit-transition-duration: 125ms
|
||||||
|
-webkit-transition-timing-function: ease
|
||||||
|
&:hover
|
||||||
|
border-bottom-color: $primary-color
|
||||||
|
|
||||||
|
.pag_prev
|
||||||
|
float: left
|
||||||
|
|
||||||
|
.button:last-child
|
||||||
|
float: none
|
||||||
|
|
||||||
|
.footer
|
||||||
|
text-align: center
|
||||||
|
height: 60px
|
||||||
|
background-color: $footer-background
|
||||||
|
line-height: 60px
|
||||||
|
width: 100%
|
||||||
|
color: $white
|
||||||
|
a
|
||||||
|
color: $white
|
||||||
|
text-decoration: none
|
||||||
|
border-bottom: 1px solid transparent
|
||||||
|
&:hover
|
||||||
|
border-bottom-color: $white
|
||||||
|
|
||||||
|
.hljs
|
||||||
|
background: none
|
||||||
|
|
||||||
|
@media screen and (min-width: 1440px)
|
||||||
|
.title
|
||||||
|
margin-left: calc(20% - 40px)
|
||||||
|
.nav
|
||||||
|
padding-top: 55px
|
||||||
|
|
||||||
|
@media screen and (max-width: 800px)
|
||||||
|
body
|
||||||
|
margin-top: 80px
|
||||||
|
.title
|
||||||
|
margin-left: 20%
|
||||||
|
.card
|
||||||
|
margin: 0 5% 100px
|
46
src/sass/no-nav.sass
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* Rangitaki Project
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* A stylesheet for overriding the default styles if the navigation drawer is disabled
|
||||||
|
*/
|
||||||
|
|
||||||
|
.nav
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.nav-img
|
||||||
|
display: none
|
||||||
|
|
||||||
|
@media screen and (min-width: 1440px)
|
||||||
|
.header
|
||||||
|
left: 0
|
||||||
|
|
||||||
|
.main
|
||||||
|
margin-left: 0
|
||||||
|
width: 100%
|
||||||
|
|
||||||
|
@media screen and (max-width: 720px)
|
||||||
|
|
||||||
|
.title
|
||||||
|
left: 25px
|
252
src/sass/rangitaki.sass
Normal file
|
@ -0,0 +1,252 @@
|
||||||
|
/*
|
||||||
|
* Rangitaki Project
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Copyright 2015 mmk2410.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* A stylesheet for overriding the default styles if the navigation drawer is disabled
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* BODY */
|
||||||
|
|
||||||
|
body
|
||||||
|
margin-top: 94px
|
||||||
|
|
||||||
|
.main
|
||||||
|
height: 100%
|
||||||
|
margin-left: 0
|
||||||
|
|
||||||
|
.overlay
|
||||||
|
opacity: 0
|
||||||
|
position: fixed
|
||||||
|
top: 0
|
||||||
|
left: 0
|
||||||
|
background-color: black
|
||||||
|
width: 100%
|
||||||
|
z-index: 30
|
||||||
|
height: 100%
|
||||||
|
display: none
|
||||||
|
|
||||||
|
/* HEADER */
|
||||||
|
.header
|
||||||
|
top: 0
|
||||||
|
right: 0
|
||||||
|
left: 0
|
||||||
|
width: 100%
|
||||||
|
height: 64px
|
||||||
|
position: absolute
|
||||||
|
|
||||||
|
.title
|
||||||
|
color: #fff
|
||||||
|
font-size: 23px
|
||||||
|
text-decoration: none
|
||||||
|
line-height: 64px
|
||||||
|
vertical-align: middle
|
||||||
|
left: 75px
|
||||||
|
|
||||||
|
.title > a
|
||||||
|
text-decoration: none
|
||||||
|
color: #fff
|
||||||
|
|
||||||
|
.fadeout
|
||||||
|
position: absolute
|
||||||
|
height: 64px
|
||||||
|
top: 0
|
||||||
|
right: 0
|
||||||
|
width: 40px
|
||||||
|
|
||||||
|
.nav-img
|
||||||
|
height: 26px
|
||||||
|
padding: 19px
|
||||||
|
cursor: pointer
|
||||||
|
|
||||||
|
/* NAV DRAWER */
|
||||||
|
|
||||||
|
.nav
|
||||||
|
width: 300px
|
||||||
|
position: fixed
|
||||||
|
height: 100%
|
||||||
|
top: 0
|
||||||
|
left: -301px
|
||||||
|
z-index: 40
|
||||||
|
|
||||||
|
.nav-item, .nav-item-static
|
||||||
|
text-decoration: none
|
||||||
|
text-indent: 0
|
||||||
|
display: inline-block
|
||||||
|
height: 48px
|
||||||
|
vertical-align: middle
|
||||||
|
width: 284px
|
||||||
|
line-height: 48px
|
||||||
|
padding-left: 16px
|
||||||
|
transition: background-color 125ms ease-in-out 0ms
|
||||||
|
|
||||||
|
.nav-close
|
||||||
|
cursor: pointer
|
||||||
|
|
||||||
|
.nav-close-img
|
||||||
|
height: 35px
|
||||||
|
padding: 12px
|
||||||
|
|
||||||
|
.nav-item
|
||||||
|
cursor: pointer
|
||||||
|
|
||||||
|
.divider
|
||||||
|
width: 100%
|
||||||
|
|
||||||
|
/* MAIN */
|
||||||
|
|
||||||
|
.card
|
||||||
|
margin-right: auto
|
||||||
|
margin-left: auto
|
||||||
|
width: 75%
|
||||||
|
padding: 24px
|
||||||
|
margin-bottom: 40px
|
||||||
|
max-width: 1160px
|
||||||
|
|
||||||
|
.card a
|
||||||
|
-moz-hyphens: auto
|
||||||
|
-epub-hyphens: auto
|
||||||
|
-ms-hyphens: auto
|
||||||
|
-webkit-hyphens: auto
|
||||||
|
hyphens: auto
|
||||||
|
word-wrap: break-word
|
||||||
|
|
||||||
|
.card a:hover
|
||||||
|
|
||||||
|
.headline
|
||||||
|
display: block
|
||||||
|
padding-bottom: 8px
|
||||||
|
|
||||||
|
.card img
|
||||||
|
max-width: 100%
|
||||||
|
max-height: 400px
|
||||||
|
display: block
|
||||||
|
margin-left: auto
|
||||||
|
margin-right: auto
|
||||||
|
|
||||||
|
.date
|
||||||
|
|
||||||
|
.articletext
|
||||||
|
|
||||||
|
.author
|
||||||
|
display: block
|
||||||
|
|
||||||
|
.tag
|
||||||
|
|
||||||
|
.readmore
|
||||||
|
padding: 12px 0 25px 0
|
||||||
|
|
||||||
|
/* FAB */
|
||||||
|
|
||||||
|
.fabmenu
|
||||||
|
position: fixed
|
||||||
|
bottom: 20px
|
||||||
|
right: 20px
|
||||||
|
|
||||||
|
.fab
|
||||||
|
height: 60px
|
||||||
|
width: 60px
|
||||||
|
border-radius: 30px
|
||||||
|
cursor: pointer
|
||||||
|
|
||||||
|
.fab-img
|
||||||
|
width: 28px
|
||||||
|
padding: 15px
|
||||||
|
|
||||||
|
.subfab
|
||||||
|
height: 45px
|
||||||
|
width: 45px
|
||||||
|
border-radius: 30px
|
||||||
|
margin-right: auto
|
||||||
|
margin-left: auto
|
||||||
|
margin-bottom: 25px
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.subfab-img
|
||||||
|
width: 22px
|
||||||
|
padding: 12px
|
||||||
|
|
||||||
|
/* BUTTON */
|
||||||
|
|
||||||
|
.pag_buttons
|
||||||
|
margin-right: auto
|
||||||
|
margin-left: auto
|
||||||
|
width: calc(75% + 48px)
|
||||||
|
margin-bottom: 80px
|
||||||
|
max-width: 1160px
|
||||||
|
text-align: right
|
||||||
|
|
||||||
|
.button
|
||||||
|
text-decoration: none
|
||||||
|
color: #fff
|
||||||
|
line-height: 36px
|
||||||
|
min-width: 64px
|
||||||
|
text-align: center
|
||||||
|
height: 36px
|
||||||
|
padding: 8px
|
||||||
|
margin-top: 4px
|
||||||
|
margin-bottom: 5px
|
||||||
|
cursor: pointer
|
||||||
|
|
||||||
|
.pag_next
|
||||||
|
margin-left: 8px
|
||||||
|
|
||||||
|
/* FOOTER */
|
||||||
|
|
||||||
|
.footer
|
||||||
|
|
||||||
|
.footer a
|
||||||
|
transition: border-bottom-color 150ms ease-in-out 100ms
|
||||||
|
|
||||||
|
.footer a:hover
|
||||||
|
border-bottom-color: #383838
|
||||||
|
|
||||||
|
@media screen and (min-width: 1440px)
|
||||||
|
|
||||||
|
.nav
|
||||||
|
left: 0
|
||||||
|
padding-top: 64px
|
||||||
|
|
||||||
|
.nav-close-img
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.nav-close
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.nav-img
|
||||||
|
display: none
|
||||||
|
|
||||||
|
.header
|
||||||
|
left: 300px
|
||||||
|
|
||||||
|
.main
|
||||||
|
margin-left: 300px
|
||||||
|
width: calc(100% - 300px)
|
||||||
|
|
||||||
|
@media screen and (max-width: 720px)
|
||||||
|
|
||||||
|
.card
|
||||||
|
width: 82%
|
||||||
|
|
||||||
|
.pag_buttons
|
||||||
|
width: calc(82% + 48px)
|
91
tests/ArticleGeneratorTest.php
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'PHPUnit/Autoload.php';
|
||||||
|
include 'res/php/ArticleGenerator.php';
|
||||||
|
|
||||||
|
class ArticleGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testGetArray()
|
||||||
|
{
|
||||||
|
$result = [
|
||||||
|
"title" => "The Rangitaki logo 2",
|
||||||
|
"date" => "24 July 2015",
|
||||||
|
"tags" => array(
|
||||||
|
"design", "artwork", "logo",
|
||||||
|
),
|
||||||
|
"author" => "",
|
||||||
|
"text" => "
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
||||||
|
",
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
$result,
|
||||||
|
ArticleGenerator::getArray("articles/example/", "2015-07-25-example.md")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetText()
|
||||||
|
{
|
||||||
|
$result = "
|
||||||
|
This is the official Rangitaki logo.
|
||||||
|
|
||||||
|
![The Rangitaki logo](media/example.png)
|
||||||
|
|
||||||
|
It is saved in the example blog directory.
|
||||||
|
";
|
||||||
|
$this->assertEquals(
|
||||||
|
$result,
|
||||||
|
ArticleGenerator::getText("articles/example/", "2015-07-25-example.md")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetAuthor()
|
||||||
|
{
|
||||||
|
$result = "";
|
||||||
|
$this->assertEquals(
|
||||||
|
$result,
|
||||||
|
ArticleGenerator::getAuthor("articles/example/", "2015-07-25-example.md")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetSummary()
|
||||||
|
{
|
||||||
|
$result = "This is the official Rangitaki logo.";
|
||||||
|
$this->assertEquals(
|
||||||
|
$result,
|
||||||
|
ArticleGenerator::getSummary("articles/example/", "2015-07-25-example.md")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetTags()
|
||||||
|
{
|
||||||
|
$result = [ "design", "artwork", "logo" ];
|
||||||
|
$this->assertEquals(
|
||||||
|
$result,
|
||||||
|
ArticleGenerator::getTags("articles/example/", "2015-07-25-example.md")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetDate()
|
||||||
|
{
|
||||||
|
$result = "24 July 2015";
|
||||||
|
$this->assertEquals(
|
||||||
|
$result,
|
||||||
|
ArticleGenerator::getDate("articles/example/", "2015-07-25-example.md")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetTitle()
|
||||||
|
{
|
||||||
|
$result = "The Rangitaki logo 2";
|
||||||
|
$this->assertEquals(
|
||||||
|
$result,
|
||||||
|
ArticleGenerator::getTitle("articles/example/", "2015-07-25-example.md")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
39
tests/BlogListGeneratorTest.php
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
require 'res/php/BlogListGenerator.php';
|
||||||
|
use mmk2410\rbe\BlogListGenerator\BlogListGenerator as BlogListGenerator;
|
||||||
|
|
||||||
|
class BlogListGeneratorTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testListBlog()
|
||||||
|
{
|
||||||
|
$this->assertEquals("<a class='nav-item' href='./?blog=example'>Example</a>",
|
||||||
|
BlogListGenerator::listBlog("./blogs/", "example.md", "Example Blog")
|
||||||
|
);
|
||||||
|
$this->assertEquals("<a class='nav-item' href='https://mmk2410.org/rangitaki/docs/'>Docs</a>",
|
||||||
|
BlogListGenerator::listBlog("./blogs/", "external.md", "Example Blog")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetName()
|
||||||
|
{
|
||||||
|
$this->assertEquals("Example", BlogListGenerator::getName("blogs/example.md"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetArticleAmount()
|
||||||
|
{
|
||||||
|
$this->assertEquals(5, BlogListGenerator::getArticleAmount("example"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetExternaleLink()
|
||||||
|
{
|
||||||
|
$this->assertEquals(null,
|
||||||
|
BlogListGenerator::getExternalLink("example.md", '.')
|
||||||
|
);
|
||||||
|
$this->assertEquals("https://mmk2410.org/rangitaki/docs/",
|
||||||
|
BlogListGenerator::getExternalLink("external.md", '.')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
83
tests/ConfigTest.php
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace mmk2410\rbe\tests\config;
|
||||||
|
|
||||||
|
require_once 'PHPUnit/Autoload.php';
|
||||||
|
require 'res/php/Config.php';
|
||||||
|
|
||||||
|
use \mmk2410\rbe\config\Config as Config;
|
||||||
|
|
||||||
|
class ConfigTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
|
||||||
|
public function testGetConfig()
|
||||||
|
{
|
||||||
|
$config = [
|
||||||
|
"blog" => array(
|
||||||
|
"title" => "Example Blog",
|
||||||
|
"author" => "John",
|
||||||
|
"description" => "A short description of your blog",
|
||||||
|
"home" => "on",
|
||||||
|
"homeurl" => "../",
|
||||||
|
"homename" => "Home",
|
||||||
|
"mainname" => "",
|
||||||
|
"intro" => "on",
|
||||||
|
"disqus" => "rangitaki",
|
||||||
|
"analytics" => "",
|
||||||
|
"footer" =>
|
||||||
|
"Rangitaki 2016 <a href=\"https://gitlab.com/mmk2410/rangitaki\" target=\"blank\">\n gitlab.com/mmk2410/rangitaki</a>", "url" => "https://example.com/blog/",
|
||||||
|
),
|
||||||
|
"design" => array(
|
||||||
|
"fab" => "on",
|
||||||
|
"drawer" => "on",
|
||||||
|
"theme" => "material-light",
|
||||||
|
"pagination" => 0,
|
||||||
|
"favicon" => "http://example.com/res/img/favicon.png",
|
||||||
|
),
|
||||||
|
"rcc" => array(
|
||||||
|
"rcc" => "on",
|
||||||
|
"api" => "on",
|
||||||
|
),
|
||||||
|
"language" => "en",
|
||||||
|
];
|
||||||
|
|
||||||
|
$configParser = new Config("./config.yaml", "./vendor/autoload.php");
|
||||||
|
$this->assertEquals($config, $configParser->getConfig());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWriteReadConfig()
|
||||||
|
{
|
||||||
|
$changedConfig = [
|
||||||
|
"blog" => array(
|
||||||
|
"title" => "Examples Blog",
|
||||||
|
"author" => "Wilson O'Sullivan",
|
||||||
|
"description" => "A long description of your blog",
|
||||||
|
"home" => "on",
|
||||||
|
"homeurl" => "../",
|
||||||
|
"homename" => "Exit",
|
||||||
|
"mainname" => "",
|
||||||
|
"intro" => "on",
|
||||||
|
"disqus" => "",
|
||||||
|
"analytics" => "",
|
||||||
|
"footer" =>
|
||||||
|
"pBlog 1102 <a href=\"https://gitlab.com/mmk2410/rangitaki\" target=\"blank\">
|
||||||
|
\n gitlab.com/mmk2410/rangitaki</a>", "url" => "https://example.com/blog/",
|
||||||
|
),
|
||||||
|
"design" => array(
|
||||||
|
"fab" => "off",
|
||||||
|
"drawer" => "off",
|
||||||
|
"theme" => "material-dark",
|
||||||
|
"pagination" => "-1",
|
||||||
|
"favicon" => "http://sample.com/res/img/favicon.png",
|
||||||
|
),
|
||||||
|
"rcc" => array(
|
||||||
|
"rcc" => "on",
|
||||||
|
"api" => "off",
|
||||||
|
),
|
||||||
|
"language" => "en",
|
||||||
|
];
|
||||||
|
$configParser = new Config("/tmp/config-test.yaml", "./vendor/autoload.php");
|
||||||
|
$configParser->writeConfig($changedConfig);
|
||||||
|
$this->assertEquals($changedConfig, $configParser->getConfig());
|
||||||
|
}
|
||||||
|
}
|
103
themes.md
|
@ -1,103 +0,0 @@
|
||||||
# Theme Documentation
|
|
||||||
|
|
||||||
##### For Rangitaki version 1.0.0
|
|
||||||
|
|
||||||
In this directory I will explain what each property of a design css file describes. To create a new theme, just copy one of the available and change it to your liking.
|
|
||||||
|
|
||||||
## Content
|
|
||||||
|
|
||||||
1. Header
|
|
||||||
|
|
||||||
2. Navigation Drawer
|
|
||||||
|
|
||||||
3. Body
|
|
||||||
|
|
||||||
4. Footer and FAB
|
|
||||||
|
|
||||||
## 1 Header
|
|
||||||
|
|
||||||
`div .header`
|
|
||||||
|
|
||||||
The header bar (aka actionbar) on the top of the page.
|
|
||||||
|
|
||||||
`span .title`
|
|
||||||
|
|
||||||
The element which contains the title of the blog / subblog. It is in the header.
|
|
||||||
|
|
||||||
`a .title > a`
|
|
||||||
|
|
||||||
The link in side to *.title* used to reload the page.
|
|
||||||
|
|
||||||
`div .fadeout`
|
|
||||||
|
|
||||||
This is a fadeout which is normally not visible. It fades the text out, if the *.title* is longer than the *.header*
|
|
||||||
|
|
||||||
## 2 Navigation Drawer
|
|
||||||
|
|
||||||
`div .nav`
|
|
||||||
|
|
||||||
The navigation drawer. It contains the page navigation.
|
|
||||||
|
|
||||||
`div .nav-item`
|
|
||||||
|
|
||||||
A item in the navigation drawer, which is clickable.
|
|
||||||
|
|
||||||
`div .nav-item-static`
|
|
||||||
|
|
||||||
The same as a *.nav-item*, but not clickable.
|
|
||||||
|
|
||||||
`div .divider`
|
|
||||||
|
|
||||||
A divider between different section in the navigation drawer.
|
|
||||||
|
|
||||||
## 3 Body
|
|
||||||
|
|
||||||
`div .card`
|
|
||||||
|
|
||||||
A box which surrounds a whole blog posts (or blog intro)
|
|
||||||
|
|
||||||
`a .card > a`
|
|
||||||
|
|
||||||
A link in a post / intro.
|
|
||||||
|
|
||||||
`a .headline`
|
|
||||||
|
|
||||||
The headline / title of a post.
|
|
||||||
|
|
||||||
`div .date`
|
|
||||||
|
|
||||||
The datestamp of a post.
|
|
||||||
|
|
||||||
`div .articletext`
|
|
||||||
|
|
||||||
The text of a blog post / blog intro.
|
|
||||||
|
|
||||||
`span .author`
|
|
||||||
|
|
||||||
The author of a blog post.
|
|
||||||
|
|
||||||
`a .tag`
|
|
||||||
|
|
||||||
A tag of a blog post. If there are multiple tags, every tag has the class *.tag*.
|
|
||||||
|
|
||||||
## 4 Footer and FAB
|
|
||||||
|
|
||||||
`div .fabmenu`
|
|
||||||
|
|
||||||
The menu which contains the FAB buttons.
|
|
||||||
|
|
||||||
`div .fab`
|
|
||||||
|
|
||||||
The FAB button, always visible.
|
|
||||||
|
|
||||||
`div .subfab`
|
|
||||||
|
|
||||||
A subfab, shown if the *.fab* is clicked.
|
|
||||||
|
|
||||||
`div .footer`
|
|
||||||
|
|
||||||
The footer at the end of a page.
|
|
||||||
|
|
||||||
`a .footer > a`
|
|
||||||
|
|
||||||
A link in the footer.
|
|
3
themes/background-img.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
body{font-family:"Roboto", sans-serif;background:#f6f6f6;color:#383838;background-image:url(//example.com/res/img/intro.svg);background-size:cover;background-attachment:fixed;background-position:top center;background-repeat:no-repeat}.header{background-color:rgba(0,0,0,0.45);position:fixed}.title{color:#fff;position:absolute}.title>a{color:#fff}.fadeout{background:-moz-linear-gradient(left, rgba(30,87,153,0) 0%, rgba(0,0,0,0.45) 100%);background:-webkit-linear-gradient(left, rgba(30,87,153,0) 0%, rgba(0,0,0,0.45) 100%);background:-o-linear-gradient(left, rgba(30,87,153,0) 0%, rgba(0,0,0,0.45) 100%);background:-ms-linear-gradient(left, rgba(30,87,153,0) 0%, rgba(0,0,0,0.45) 100%);background:linear-gradient(to right, rgba(30,87,153,0) 0%, rgba(0,0,0,0.45) 100%)}.nav{background-color:#fff;border-right:1px solid #e0e0e0}.nav-item,.nav-item-static{color:#383838}.nav-item{font-weight:600}.nav-item:active{background-color:#e2e2e2}.divider{border-bottom:1px solid #e0e0e0}.card{background:#fff;border-radius:2px;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.card a{color:#ff4415;text-decoration:none;border-bottom:1px solid transparent;border-bottom-color:transparent;transition:border-bottom-color 150ms ease-in-out 100ms}.card a:hover{border-bottom-color:#ff4415}.headline{font-size:24px;color:#383838 !important;text-decoration:none;border-bottom:none !important}.headline:hover{color:#ff4415 !important}.date{font-size:13px}.articletext{font-size:14px;line-height:24px}.author{font-size:13px}.tag{font-size:13px}.fab{background-color:#ff4415;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.subfab{background-color:#fff;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.button{border-width:1px;border-style:solid;text-transform:uppercase;-webkit-box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65);-moz-box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65);box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65);border-radius:2px;letter-spacing:0.4px;font-weight:700;font-size:14px;transition-property:box-shadow;transition-delay:50ms;transition-duration:125ms;transition-timing-function:ease;-o-transition-property:box-shadow;-o-transition-delay:50ms;-o-transition-duration:125ms;-o-transition-timing-function:ease;-moz-transition-property:box-shadow;-moz-transition-delay:50ms;-moz-transition-duration:125ms;-moz-transition-timing-function:ease;-webkit-transition-property:box-shadow;-webkit-transition-delay:50ms;-webkit-transition-duration:125ms;-webkit-transition-timing-function:ease}.button:hover,.button:hover{-webkit-box-shadow:0.5px 1.8px 2.1px 1.4px rgba(32,32,32,0.85);-moz-box-shadow:0.5px 1.8px 2.1px 1.4px rgba(32,32,32,0.85);box-shadow:0.5px 1.8px 2.1px 1.4px rgba(32,32,32,0.85)}.pag_next{background-color:#ff4415;border-color:#ff4415}.pag_prev{background-color:#fff;border-color:#fff;color:#383838}.footer{font-size:12px;text-align:center;color:#fff;text-shadow:1px 1px rgba(55,55,55,0.3)}.footer a{color:#fff;text-shadow:1px 1px rgba(175,175,175,0.3);text-decoration:none;border-bottom:1px solid transparent;border-bottom-color:transparent}.footer a:hover{border-bottom-color:#fff}@media screen and (min-width: 1440px){.nav{background-color:rgba(255,255,255,0.8)}}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=background-img.css.map */
|
1
themes/background-img.css.map
Normal file
3
themes/material-dark.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
body{font-family:"Roboto", sans-serif;background:#303030;color:#fff}.header{background-color:#212121;position:fixed;box-shadow:2px 0 2px 2px rgba(32,32,32,0.85)}.title{color:#fff;position:absolute}.title>a{color:#fff}.fadeout{background:-moz-linear-gradient(left, rgba(30,87,153,0) 0%, #212121 100%);background:-webkit-linear-gradient(left, rgba(30,87,153,0) 0%, #212121 100%);background:-o-linear-gradient(left, rgba(30,87,153,0) 0%, #212121 100%);background:-ms-linear-gradient(left, rgba(30,87,153,0) 0%, #212121 100%);background:linear-gradient(to right, rgba(30,87,153,0) 0%, #212121 100%)}.nav{background-color:#424242;border-right:1px solid #1f1f1f}.nav-item,.nav-item-static{color:#fff}.nav-item{font-weight:600}.nav-item:active{background-color:#383838}.divider{border-bottom:1px solid #1f1f1f}.card{background:#424242;border-radius:2px;box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65)}.card a{color:#ff4415;text-decoration:none;border-bottom:1px solid transparent;border-bottom-color:transparent;transition:border-bottom-color 150ms ease-in-out 100ms}.card a:hover{border-bottom-color:#ff4415}.headline{font-size:24px;color:#fff !important;text-decoration:none;border-bottom:none !important}.headline:hover{color:#ff4415 !important}.date{font-size:13px}.articletext{font-size:14px;line-height:24px}.author,.tag{font-size:13px}.fab{background-color:#ff4415;box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65)}.subfab{background-color:#424242;box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65)}.button{text-transform:uppercase;border-width:1px;border-style:solid;-webkit-box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65);-moz-box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65);box-shadow:0 1px 1.5px 1.5px rgba(42,42,42,0.65);border-radius:2px;letter-spacing:0.4px;font-weight:700;font-size:14px;transition-property:box-shadow;transition-delay:50ms;transition-duration:125ms;transition-timing-function:ease;-o-transition-property:box-shadow;-o-transition-delay:50ms;-o-transition-duration:125ms;-o-transition-timing-function:ease;-moz-transition-property:box-shadow;-moz-transition-delay:50ms;-moz-transition-duration:125ms;-moz-transition-timing-function:ease;-webkit-transition-property:box-shadow;-webkit-transition-delay:50ms;-webkit-transition-duration:125ms;-webkit-transition-timing-function:ease}.button:hover{-webkit-box-shadow:0.5px 1.8px 2.1px 1.4px rgba(32,32,32,0.85);-moz-box-shadow:0.5px 1.8px 2.1px 1.4px rgba(32,32,32,0.85);box-shadow:0.5px 1.8px 2.1px 1.4px rgba(32,32,32,0.85)}.pag_next{background-color:#ff4415;border-color:#ff4415}.pag_prev{background-color:#424242;border-color:#424242;color:#CCCCCC}.footer{font-size:12px;text-align:center;color:#fff}.footer a{color:#fff;text-decoration:none;border-bottom:1px solid transparent;border-bottom-color:transparent}.footer a:hover{border-bottom-color:#fff}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=material-dark.css.map */
|
1
themes/material-dark.css.map
Normal file
3
themes/material-light.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
body{font-family:"Roboto", sans-serif;background:#f6f6f6;color:#383838}.header{background-color:#ff4415;position:fixed;box-shadow:2px 0 2px 2px rgba(62,62,62,0.45)}.title{color:#fff;position:absolute}.title>a{color:#fff}.fadeout{background:-moz-linear-gradient(left, rgba(30,87,153,0) 0%, #ff4415 100%);background:-webkit-linear-gradient(left, rgba(30,87,153,0) 0%, #ff4415 100%);background:-o-linear-gradient(left, rgba(30,87,153,0) 0%, #ff4415 100%);background:-ms-linear-gradient(left, rgba(30,87,153,0) 0%, #ff4415 100%);background:linear-gradient(to right, rgba(30,87,153,0) 0%, #ff4415 100%)}.nav{background-color:#fff;border-right:1px solid #e0e0e0}.nav-item,.nav-item-static{color:#383838}.nav-item{font-weight:600}.nav-item:hover,.nav-item:active{background-color:#e2e2e2}.divider{border-bottom:1px solid #e0e0e0}.card{background:#fff;border-radius:2px;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.card a{color:#ff4415;text-decoration:none;border-bottom:1px solid transparent;border-bottom-color:transparent;transition:border-bottom-color 150ms ease-in-out 100ms}.card a:hover{border-bottom-color:#ff4415}.headline{font-size:24px;color:#383838 !important;text-decoration:none;border-bottom:none !important}.headline:hover{color:#ff4415 !important}.date{font-size:13px}.articletext{font-size:14px;line-height:24px}.author,.tag{font-size:13px}.fab{background-color:#ff4415;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.subfab{background-color:#fff;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.button{text-transform:uppercase;border-width:1px;border-style:solid;-webkit-box-shadow:0.4px 1px 1.5px 1px #aaa;-moz-box-shadow:0.4px 1px 1.5px 1px #aaa;box-shadow:0.4px 1px 1.5px 1px #aaa;border-radius:2px;letter-spacing:0.4px;font-weight:700;font-size:14px;transition-property:box-shadow;transition-delay:50ms;transition-duration:125ms;transition-timing-function:ease;-o-transition-property:box-shadow;-o-transition-delay:50ms;-o-transition-duration:125ms;-o-transition-timing-function:ease;-moz-transition-property:box-shadow;-moz-transition-delay:50ms;-moz-transition-duration:125ms;-moz-transition-timing-function:ease;-webkit-transition-property:box-shadow;-webkit-transition-delay:50ms;-webkit-transition-duration:125ms;-webkit-transition-timing-function:ease}.button:hover{-webkit-box-shadow:0.5px 1.8px 2.1px 1.4px #aaa;-moz-box-shadow:0.5px 1.8px 2.1px 1.4px #aaa;box-shadow:0.5px 1.8px 2.1px 1.4px #aaa}.pag_next{background-color:#ff4415;border-color:#ff4415}.pag_prev{background-color:#fff;border-color:#fff;color:#383838}.footer{font-size:12px;text-align:center}.footer a{color:#383838;text-decoration:none;border-bottom:1px solid transparent;border-bottom-color:transparent}.footer a:hover{border-bottom-color:#383838}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=material-light.css.map */
|
1
themes/material-light.css.map
Normal file
3
themes/nextDESIGN.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
body{font-family:"Fira Sans",sans-serif;background:#f0f0f0;color:#383838;margin:130px 0 0}::selection,::-moz-selection{color:#f0f0f0;background-color:#4CAF50}.header{height:55px;background-color:#4CAF50;position:fixed;box-shadow:2px 0 2px 2px rgba(62,62,62,0.45)}.title{line-height:55px;color:#fff;position:absolute;left:0;margin-left:calc(20% + 24px)}.title>a{color:#fff;text-decoration:none}.fadeout{height:55px;background:-moz-linear-gradient(left, rgba(30,87,153,0) 0%, #4CAF50 100%);background:-webkit-linear-gradient(left, rgba(30,87,153,0) 0%, #4CAF50 100%);background:-o-linear-gradient(left, rgba(30,87,153,0) 0%, #4CAF50 100%);background:-ms-linear-gradient(left, rgba(30,87,153,0) 0%, #4CAF50 100%);background:linear-gradient(to right, rgba(30,87,153,0) 0%, #4CAF50 100%)}.nav-img{padding:14px 19px}.nav{background-color:#fff;border-right:1px solid #e0e0e0}.nav-item,.nav-item-static{color:#383838}.nav-item{font-weight:600}.nav-item:hover{color:#4CAF50}.nav-item:active{background-color:#e2e2e2}.divider{border-bottom:1px solid #e0e0e0}.card{background:none;border-radius:0;box-shadow:none;margin:0 20% 100px;width:auto}.card a{color:#4CAF50;text-decoration:none;border-bottom:1px solid transparent;transition:border-bottom-color 150ms ease-in-out 100ms}.card a:hover{border-bottom-color:#4CAF50}.headline{font-size:30px;line-height:50px;color:#383838 !important;text-decoration:none;border-bottom:none !important}.headline:hover{color:#4CAF50 !important}.date{font-size:13px}.articletext{margin-top:30px;font-size:16px;line-height:30px}.author,.tag{font-size:13px}.fab{background-color:#4CAF50;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.subfab{background-color:#fff;box-shadow:0 1px 1.5px 1.5px rgba(62,62,62,0.3)}.button{color:#4CAF50;border-bottom:1px solid transparent;margin:0;min-width:0;padding:0;line-height:16px;height:16px;transition-property:border-bottom-color;transition-delay:50ms;transition-duration:125ms;transition-timing-function:ease;-moz-transition-property:border-bottom-color;-moz-transition-delay:50ms;-moz-transition-duration:125ms;-moz-transition-timing-function:ease;-webkit-transition-property:border-bottom-color;-webkit-transition-delay:50ms;-webkit-transition-duration:125ms;-webkit-transition-timing-function:ease}.button:hover{border-bottom-color:#4CAF50}.pag_prev{float:left}.button:last-child{float:none}.footer{text-align:center;height:60px;background-color:#2D2D2D;line-height:60px;width:100%;color:#fff}.footer a{color:#fff;text-decoration:none;border-bottom:1px solid transparent}.footer a:hover{border-bottom-color:#fff}.hljs{background:none}@media screen and (min-width: 1440px){.title{margin-left:calc(20% - 40px)}.nav{padding-top:55px}}@media screen and (max-width: 800px){body{margin-top:80px}.title{margin-left:20%}.card{margin:0 5% 100px}}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=nextDESIGN.css.map */
|