├── .gitignore
├── History.md
├── LICENSE.md
├── README.md
├── app
├── .meteor
│ ├── .finished-upgraders
│ ├── .gitignore
│ ├── .id
│ ├── cordova-plugins
│ ├── packages
│ ├── platforms
│ ├── release
│ └── versions
├── client
│ ├── accounts
│ │ ├── accounts-styling.css
│ │ ├── accounts.js
│ │ └── accounts.less
│ ├── blog
│ │ ├── blog.html
│ │ ├── blog.less
│ │ ├── hljs.css
│ │ └── shareit
│ │ │ ├── shareit-config.js
│ │ │ └── shareit.less
│ ├── constants.import.less
│ ├── index.html
│ ├── pure-0.5.0
│ │ ├── pure-min-with-grid.css
│ │ └── purify.js
│ ├── route.js
│ ├── site.js
│ ├── site.less
│ └── startup.js
├── gs-cors.json
├── i18n
│ ├── en.i18n.json
│ └── fr.i18n.json
├── lib
│ └── slingshot-restrictions.js
├── packages
│ └── src
├── private
│ ├── .gitignore
│ ├── publish_email_en.html
│ └── publish_email_fr.html
├── project-tap.i18n
├── public
│ ├── favicon.ico
│ └── img
│ │ ├── common
│ │ └── file-icons.png
│ │ └── markdown.png
├── server
│ ├── emails.js
│ ├── slingshot.js
│ └── users.js
├── settings-meteor-com.json
└── settings.json
└── src
├── .gitignore
├── LICENSE.md
├── README.md
├── client
├── blog-client.js
├── blog-picture.js
├── blog-route.js
├── blog-templates.html
└── blog.less
├── common
├── blog-collections.js
└── blog-paths.js
├── doc
└── dragdrop.png
├── i18n
├── en.i18n.json
└── fr.i18n.json
├── package-tap.i18n
├── package.js
├── server
└── blog-server.js
└── versions.json
/.gitignore:
--------------------------------------------------------------------------------
1 | .build*
2 | .idea
--------------------------------------------------------------------------------
/History.md:
--------------------------------------------------------------------------------
1 | 0.5.2
2 | =====
3 |
4 | * settings file now only required on server in production (Issue #32)
5 |
6 | 0.5.1
7 | =====
8 |
9 | * Fixes settings not being recognized issue
10 |
11 | 0.5.0
12 | =====
13 |
14 | * Support for uploding and inserting pictures (Issue #20) using `edgee:slingshot`.
15 | * Fixed a few jshint warnings
16 |
17 | 0.4.1
18 | =====
19 |
20 | * Option to send an email to all registered users when a new post is published.
21 | * Fixed date format in French
22 |
23 | 0.4.0
24 | =====
25 |
26 | * Moment js now configured in i18n bundles. Out-of-the-box support for English (default) and French.
27 | * Locale can be changed reactively using `Session.set("locale", newLocale)`
28 |
29 | 0.3.9
30 | =====
31 |
32 | * Full support for i18n. Blog in one language at a time. Out-of-the-box support for English (default) and French.
33 |
34 | 0.3.8
35 | =====
36 |
37 | * Blog posts' date can now be displayed in locales other than English (Issue #14)
38 |
39 | 0.3.7
40 | =====
41 |
42 | * shortId is now configurable and doesn't have to be included in the URL
43 | * blog and archive path can now be customized through the settings.json
44 |
45 | pre 0.3.7
46 | =========
47 |
48 | Murky ancient history
49 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | ```
2 | Copyright Sam Hatoum, Xolv.io
3 |
4 | Permission is hereby granted, free of charge, to any person obtaining
5 | a copy of this software and associated documentation files (the
6 | "Software"), to deal in the Software without restriction, including
7 | without limitation the rights to use, copy, modify, merge, publish,
8 | distribute, sublicense, and/or sell copies of the Software, and to
9 | permit persons to whom the Software is furnished to do so, subject to
10 | the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 | ```
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # - - DEPRECATED - -
2 |
3 | xolvio:md-blog
4 | ==============
5 |
6 | This is the blog package currently used on The Meteor Testing Manual. It will give you a
7 | markdown powered blog on your site.
8 |
9 | * WYSIWYG Markdown support with in-place editing
10 | * Syntax highlighting using [highlight.js](https://highlightjs.org/)
11 | * Customizable styling with the ability to add your own classes to elements!
12 | * Publish / Unpublish / Archive / Unarchive workflows
13 | * I18n Support: the blog engine can be configured to work in any language
14 | * Send email to registered users when a new post is published
15 | * Click on the "Insert Pictures" button to choose pictures, or Drag & Drop pictures into the editing area, and they will be uploaded and Markdown links created. 
16 |
17 |
18 | [Try the demo site](http://md-blog.meteor.com)
19 |
20 | [See the demo site code](https://github.com/xolvio/md-blog)
21 |
22 | ##Installation
23 |
24 | `> meteor add xolvio:md-blog`
25 |
26 | ##Getting Started
27 |
28 | There are a couple of steps to carry out before you can start using this package. Don't worry
29 | it's very easy!
30 |
31 | ### 1. Define Layouts
32 | First you need to define two templates that the blog in your app that look like this:
33 |
34 | ```html
35 |
36 | {{> yield}}
37 |
38 |
39 |
40 | {{> yield}}
41 |
42 | ```
43 |
44 | These are iron-router layouts that you be available at `/blog` and `/blog/:_id/:slug`.
45 |
46 | You may want to customize these template further like adding disqus for instance:
47 |
48 | ```html
49 |
50 | {{> yield}}
51 | {{> disqus}}
52 |
53 | ```
54 |
55 | ### 2. Setup Accounts & Roles
56 | You need to ensure you are using a Meteor accounts package like accounts-password, and that the
57 | user you are logged has 'roles' array with the element `mdblog-author`. Here's an example of a
58 | user object:
59 |
60 | ```json
61 | {
62 | "_id": "ixoreoJY5wzmNYMcY",
63 | "emails": [ {
64 | "address" : "sam@xolv.io",
65 | "verified" : true
66 | } ],
67 | "profile": { "name" : "Sam Hatoum" },
68 | "roles": [ "mdblog-author" ]
69 | }
70 | ```
71 |
72 | You can also the above pragmatically by calling
73 | `Roles.addUsersToRoles(user._id, ['mdblog-author']);`
74 |
75 | For more information about roles, have a look at the
76 | [alanning:roles](https://github.com/alanning/meteor-roles) package.
77 |
78 |
79 | ### 3. Add the `tap:i18n` package
80 |
81 | I18n is built-in and uses `tap:i18n`; as a result, you need to `meteor add tap:i18n` even if your website is English only.
82 |
83 |
84 | ### 4. Customize
85 |
86 | This blog is designed to be fully customizable and as unopinionated as possible. Here are some of the ways you can configure it.
87 |
88 |
89 | ####Styling
90 |
91 | To style the blog list and posts, apply css
92 | [just like in the demo app](https://github.com/xolvio/md-blog/blob/master/app/client/blog/blog.less).
93 |
94 | For syntax highlighting style, you need to add the hljs css file of your choice.
95 | [Pick a css template from here](https://highlightjs.org/static/demo/). You can see this in the
96 | demo app,
97 | [there is a file named hljs.css](https://github.com/xolvio/md-blog/tree/master/app/client/blog).
98 |
99 | ####Custom Classes
100 | You can also add classes to any element of your choice! For this you need to use the settings.json
101 | file. Have a look at the settings.json file below. You can see there's a field named
102 | `element-classes`. The example above is adding the class
103 | `pure-img` to all `img` elements. This is very powerful as it allows you to use your CSS
104 | framework of your choice.
105 |
106 | ####Sorting
107 | By default, the blog sorts your posts by date. You can change this by modifying the `sortBy`
108 | field in the settings file.
109 |
110 | ####Blog Routes
111 |
112 | The blog runs at the default "/blog" route. The archive runs at the default
113 | "/blog/archive" route. For each post, the default is the "blog/:shortId/:slug" route. You can customize where the blog handles requests by
114 | changing the `blogPath` and `archivePath`. You can also remove the short id from the blog post path by setting the `useUniqueBlogPostsPath` to false.
115 |
116 | ####Settings File Example
117 | ```json
118 | {
119 | "public": {
120 | "blog": {
121 | "name": "The Xolv.io md-blog",
122 | "Description": "Get verbal on your websites.",
123 | "prettify": {
124 | "syntax-highlighting": true,
125 | "element-classes": [
126 | {
127 | "locator": "img",
128 | "classes": ["pure-img"]
129 | },
130 | {
131 | "locator": "button",
132 | "classes": ["pure-button"]
133 | }
134 | ]
135 | },
136 | "sortBy": {"date": -1},
137 | "blogPath": "/blog",
138 | "archivePath": "/blog/archive",
139 | "useUniqueBlogPostsPath": true
140 | }
141 | }
142 | }
143 | ```
144 |
145 | ####i18n
146 | The blog engine can be configured to display messages and button texts in any language.
147 | English is the default language, and translations are provided for the French language.
148 | Specify `defaultLocale` at the same level as the blog name, in the `settings.json` file:
149 |
150 | ```json
151 | {
152 | "public": {
153 | "blog": {
154 | ...
155 | "defaultLocale": "fr"
156 | }
157 | }
158 | }
159 | ```
160 | **How do I change the language depending on my user's preference?**
161 |
162 | Simply call `Session.set('locale', newLocale)`
163 |
164 | **I need translations for a new language!**
165 | - Refer to the `tap:i18n` package [documentation](https://github.com/TAPevents/tap-i18n#documentation--examples). You should take a look at the sample app first.
166 | - There are two ways to provide additional languages: 1. the preferred way is to submit a Pull Request to integrate the new `i18n/.i18n.json`. 2. The other way is to place this file in your Meteor application.
167 | - When adding a new language, you will also want to configure Moment to display the localized version of `today at hh:mm` and other such texts. This is done through the `moment` object in the i18n bundle (`i18n/language.i18n.json`).
168 | The following example sets the days and months in French, and configures a few moments in French as well.
169 | (Note that this is not comprehensive. Refer to the [Moment documentation](http://momentjs.com/docs/#/i18n/changing-locale/) for more settings.)
170 | Due to `tap:i18n` only supporting Strings and not Objects in its bundles, you have to use a JSON string. The JSON string may be broken down into an array of Strings for better readability.
171 |
172 | As an example, in order to get:
173 | ```json
174 | "moment": {
175 | "weekdays": [ "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche" ],
176 | "calendar": {
177 | "lastDay": "[hier à] LT",
178 | "sameDay": "[aujourd'hui à] LT",
179 | "nextDay": "[demain à] LT",
180 | "lastWeek": "[dernier] dddd [à] LT",
181 | "nextWeek": "dddd [à] LT",
182 | "sameElse": "DD/MM/YYYY"
183 | }
184 | }
185 | ```
186 | You need to write:
187 | `// in app/i18n/language.i18n.json:`
188 | ```json
189 | "moment": [
190 | "{",
191 | "\"weekdays\": [ \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\", \"dimanche\" ],",
192 | "\"calendar\": {",
193 | "\"lastDay\": \"[hier à] LT\",",
194 | "\"sameDay\": \"[aujourd'hui à] LT\",",
195 | "\"nextDay\": \"[demain à] LT\",",
196 | "\"lastWeek\": \"dddd [dernier à] LT\",",
197 | "\"nextWeek\": \"dddd [à] LT\",",
198 | "\"sameElse\": \"DD/MM/YYYY\"",
199 | "}",
200 | "}"
201 | ]
202 | ```
203 |
204 | ####Send an email when a new post is published
205 | 1. Set `emailOnPublish` to true:
206 | ```json
207 | {
208 | "public": {
209 | "blog": {
210 | ...
211 | "emailOnPublish": "true"
212 | }
213 | }
214 | }
215 | ```
216 | 2. Run `meteor add meteorhacks:ssr` to add the SSR package.
217 | 3. Provide a compiled template named `publishEmail`. For example, if the `publish_email.html` template sits in the `private` directory, make sure to run:
218 | ```
219 | SSR.compileTemplate('publishEmail',
220 | Assets.getText('publish_email.html'));
221 | ```
222 |
223 | An email will be sent to all registered users (in Bcc) when a post is published. Its sender will be the post's author. Its title will be the post's title. Its body will come from the `publishEmail` template. The template should contain the blog post's `summary` and its `url`. Example:
224 | ```
225 |
{{summary}}
226 | Read more...
227 | ```
228 |
229 | ####Configure pictures max size and Slingshot directive
230 | To understand how to configure `edgee:slingshot`, read [its documentation](https://github.com/CulturalMe/meteor-slingshot/#aws-s3).
231 | ```json
232 | {
233 | "public": {
234 | "blog": {
235 | ...
236 | "pictures": {
237 | "maxWidth": "800",
238 | "maxHeight": "800",
239 | "Slingshot": {
240 | "directive": ""
241 | }
242 | }
243 | }
244 | }
245 | }
246 | ```
247 | The demo app will work with Google Cloud Storage if you provide a `pem` file and a file that contains the `GoogleAccessId` as Assets (under the `private` directory).:
248 | ```json
249 | {
250 | "public": {
251 | "blog": {
252 | ...
253 | "pictures": {
254 | "Slingshot": {
255 | "pemFile": "google-cloud-service-key.pem",
256 | "idTextFile": "google-cloud-access-id.txt"
257 | }
258 | }
259 | }
260 | }
261 | }
262 | ```
263 |
264 |
265 | ##Additional Info
266 |
267 | ###URL Format
268 | The URL format of your blog will look like this:
269 |
270 | `www.your-site.com/blog`
271 |
272 | `www.your-site.com/blog/7yh22/your-latest-blog-post`
273 |
274 | The format is `/:_id/:slug`
275 |
276 | The `:slug` is the title of the blog post with all the spaces replaced with dashes. It's believed
277 | this is good for SEO purposes.
278 |
279 | The `:_id` is a truncated version of the mongo id for the blog entry. This allows you to have
280 | multiple posts with the same title over time.
281 |
282 | When you archive blog posts, currently they are removed from the main view but they are still
283 | accessible by search engines and external links. To see your archived blog entries, go to:
284 |
285 | `www.your-site.com/archive`
286 |
287 | ###Environment Variables
288 |
289 | If you want the app to delete all the blog entries on startup, set the environment variable
290 | `AUTO_RESET=1` when running meteor. For example:
291 |
292 | ```bash
293 | AUTO_RESET=1 meteor
294 | ```
295 |
296 | ##Contribution
297 | Yes please!
298 |
299 | Todo list:
300 | * [ ] Your idea!
301 | * [ ] Date Picker
302 | * [ ] Author Picker
303 | * [ ] Pagination
304 | * [ ] Auto draft saving + history
305 |
--------------------------------------------------------------------------------
/app/.meteor/.finished-upgraders:
--------------------------------------------------------------------------------
1 | # This file contains information which helps Meteor properly upgrade your
2 | # app when you run 'meteor update'. You should check it into version control
3 | # with your project.
4 |
5 | notices-for-0.9.0
6 | notices-for-0.9.1
7 | 0.9.4-platform-file
8 |
--------------------------------------------------------------------------------
/app/.meteor/.gitignore:
--------------------------------------------------------------------------------
1 | local
2 |
--------------------------------------------------------------------------------
/app/.meteor/.id:
--------------------------------------------------------------------------------
1 | # This file contains a token that is unique to your project.
2 | # Check it into your repository along with the rest of this directory.
3 | # It can be used for purposes such as:
4 | # - ensuring you don't accidentally deploy one app on top of another
5 | # - providing package authors with aggregated statistics
6 |
7 | iwgw2lhn0eqtvknvd2
8 |
--------------------------------------------------------------------------------
/app/.meteor/cordova-plugins:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/.meteor/packages:
--------------------------------------------------------------------------------
1 | # Meteor packages used by this project, one per line.
2 | #
3 | # 'meteor add' and 'meteor remove' will edit this file for you,
4 | # but you can also edit it by hand.
5 |
6 | meteor-platform
7 | xolvio:md-blog
8 | iron:router
9 | fortawesome:fontawesome
10 | useraccounts:unstyled
11 | accounts-password
12 | less
13 | joshowens:shareit
14 | tap:i18n
15 | ogourment:settings
16 | meteorhacks:ssr
17 | edgee:slingshot
18 |
--------------------------------------------------------------------------------
/app/.meteor/platforms:
--------------------------------------------------------------------------------
1 | server
2 | browser
3 |
--------------------------------------------------------------------------------
/app/.meteor/release:
--------------------------------------------------------------------------------
1 | METEOR@1.0.4.2
2 |
--------------------------------------------------------------------------------
/app/.meteor/versions:
--------------------------------------------------------------------------------
1 | accounts-base@1.2.0
2 | accounts-password@1.1.0
3 | alanning:roles@1.2.13
4 | aldeed:simple-schema@1.3.0
5 | autoupdate@1.2.0
6 | base64@1.0.3
7 | binary-heap@1.0.3
8 | blaze@2.1.0
9 | blaze-tools@1.0.3
10 | boilerplate-generator@1.0.3
11 | callback-hook@1.0.3
12 | ccorcos:clientside-image-manipulation@1.0.3
13 | cfs:dropped-event@0.0.10
14 | cfs:http-methods@0.0.27
15 | check@1.0.5
16 | chuangbo:marked@0.3.5
17 | coffeescript@1.0.6
18 | ddp@1.1.0
19 | deps@1.0.7
20 | edgee:slingshot@0.6.0
21 | ejson@1.0.6
22 | email@1.0.6
23 | fastclick@1.0.3
24 | fortawesome:fontawesome@4.2.0_2
25 | geojson-utils@1.0.3
26 | html-tools@1.0.4
27 | htmljs@1.0.4
28 | http@1.1.0
29 | id-map@1.0.3
30 | iron:controller@1.0.7
31 | iron:core@1.0.7
32 | iron:dynamic-template@1.0.7
33 | iron:layout@1.0.7
34 | iron:location@1.0.7
35 | iron:middleware-stack@1.0.7
36 | iron:router@1.0.7
37 | iron:url@1.0.7
38 | joshowens:shareit@0.3.1
39 | jquery@1.11.3_2
40 | json@1.0.3
41 | launch-screen@1.0.2
42 | less@1.0.13
43 | livedata@1.0.13
44 | localstorage@1.0.3
45 | logging@1.0.7
46 | meteor@1.1.5
47 | meteor-platform@1.2.2
48 | meteorhacks:ssr@2.1.2
49 | minifiers@1.1.4
50 | minimongo@1.0.7
51 | mobile-status-bar@1.0.3
52 | mongo@1.1.0
53 | mrt:moment@2.8.1
54 | npm-bcrypt@0.7.8_1
55 | observe-sequence@1.0.5
56 | ogourment:settings@0.1.4
57 | ordered-dict@1.0.3
58 | random@1.0.3
59 | reactive-dict@1.1.0
60 | reactive-var@1.0.5
61 | reload@1.1.3
62 | retry@1.0.3
63 | routepolicy@1.0.5
64 | service-configuration@1.0.4
65 | session@1.1.0
66 | sha@1.0.3
67 | softwarerero:accounts-t9n@1.0.6
68 | spacebars@1.0.6
69 | spacebars-compiler@1.0.5
70 | spiderable@1.0.7
71 | srp@1.0.3
72 | tap:i18n@1.4.1
73 | templating@1.1.0
74 | tracker@1.0.6
75 | ui@1.0.6
76 | underscore@1.0.3
77 | url@1.0.4
78 | useraccounts:core@1.8.1
79 | useraccounts:unstyled@1.8.1
80 | webapp@1.2.0
81 | webapp-hashing@1.0.3
82 | xolvio:hljs@0.0.1
83 | xolvio:md-blog@0.5.2
84 |
--------------------------------------------------------------------------------
/app/client/accounts/accounts-styling.css:
--------------------------------------------------------------------------------
1 | #at-nav-button {
2 | cursor: pointer;
3 | }
--------------------------------------------------------------------------------
/app/client/accounts/accounts.js:
--------------------------------------------------------------------------------
1 | (function () {
2 |
3 | AccountsTemplates.configureRoute('signUp');
4 | AccountsTemplates.configureRoute('signIn');
5 |
6 | AccountsTemplates.configure({
7 | // Behaviour
8 | confirmPassword: true,
9 | enablePasswordChange: true,
10 | forbidClientAccountCreation: false,
11 | overrideLoginErrors: true,
12 | sendVerificationEmail: false,
13 |
14 | // Appearance
15 | showAddRemoveServices: false,
16 | showForgotPasswordLink: true,
17 | showLabels: true,
18 | showPlaceholders: true,
19 |
20 | // Client-side Validation
21 | continuousValidation: false,
22 | negativeFeedback: false,
23 | negativeValidation: true,
24 | positiveValidation: true,
25 | positiveFeedback: true,
26 | showValidating: true,
27 |
28 | // Privacy Policy and Terms of Use
29 | //privacyUrl: 'privacy',
30 | //termsUrl: 'terms-of-use',
31 |
32 | // Redirects
33 | homeRoutePath: '/',
34 | redirectTimeout: 4000,
35 |
36 | // Texts
37 | texts: {
38 | button: {
39 | signUp: "Register Now!"
40 | },
41 | socialSignUp: "Register",
42 | socialIcons: {
43 | "meteor-developer": "fa fa-rocket"
44 | },
45 | title: {
46 | forgotPwd: "Recover Your Password"
47 | }
48 | }
49 | });
50 |
51 | })();
52 |
--------------------------------------------------------------------------------
/app/client/accounts/accounts.less:
--------------------------------------------------------------------------------
1 | @import '../constants.import.less';
2 |
3 | .pure-form input:focus {
4 | outline: 0;
5 | outline: thin dotted \9;
6 | border-color: @xolvio-orange !important;
7 | }
8 |
9 | .at-form {
10 | input {
11 | width: 60% !important;
12 | }
13 | label {
14 | display: inline-block;
15 | width: 30% !important;
16 | }
17 | button[type="submit"] {
18 | float: right;
19 | }
20 | width: 50%;
21 | margin: 7em auto;
22 | }
--------------------------------------------------------------------------------
/app/client/blog/blog.html:
--------------------------------------------------------------------------------
1 |
2 | {{#unless currentUser}}
3 |
) */
246 | .content-head {
247 | font-weight: 400;
248 | /*text-transform: uppercase;*/
249 | letter-spacing: 0.1em;
250 | margin: 2em 0 1em;
251 | }
252 |
253 | /* This is a modifier class used when the content-head is inside a ribbon */
254 | .content-head-ribbon {
255 | color: white;
256 | }
257 |
258 | /* This is the class used for the content sub-headers (
) */
259 | .content-subhead {
260 | color: @xolvio-color;
261 | }
262 |
263 | .content-subhead i {
264 | margin-right: 7px;
265 | }
266 |
267 | /* This is the class used for the dark-background areas. */
268 | .ribbon {
269 | background: #333;
270 | color: #aaa;
271 | }
272 |
273 | /* This is the class used for the footer */
274 | .footer {
275 | background: #111;
276 | }
277 |
278 | /*
279 | * -- TABLET (AND UP) MEDIA QUERIES --
280 | * On tablets and other medium-sized devices, we want to customize some
281 | * of the mobile styles.
282 | */
283 | @media (min-width: 48em) {
284 |
285 | /* We increase the body font size */
286 | body {
287 | font-size: 16px;
288 | }
289 |
290 | /* We want to give the content area some more padding */
291 | .content {
292 | padding: 1em;
293 | }
294 |
295 | /* We can align the menu header to the left, but float the
296 | menu items to the right. */
297 | .home-menu {
298 | text-align: left;
299 | }
300 |
301 | .home-menu ul {
302 | float: right;
303 | }
304 |
305 | /* We increase the height of the splash-container */
306 | /* .splash-container {
307 | height: 500px;
308 | }*/
309 | /* We decrease the width of the .splash, since we have more width
310 | to work with */
311 | .splash {
312 | width: 50%;
313 | height: 50%;
314 | }
315 |
316 | .splash-head {
317 | font-size: 250%;
318 | }
319 |
320 | /* We remove the border-separator assigned to .l-box-lrg */
321 | .l-box-lrg {
322 | border: none;
323 | }
324 |
325 | }
326 |
327 | /*
328 | * -- DESKTOP (AND UP) MEDIA QUERIES --
329 | * On desktops and other large devices, we want to over-ride some
330 | * of the mobile and tablet styles.
331 | */
332 | @media (min-width: 78em) {
333 | /* We increase the header font size even more */
334 | .splash-head {
335 | font-size: 300%;
336 | }
337 | }
338 |
--------------------------------------------------------------------------------
/app/client/startup.js:
--------------------------------------------------------------------------------
1 | Meteor.startup(function () {
2 |
3 | Tracker.autorun(function() {
4 |
5 | T9n.setLanguage(Session.get('locale'));
6 | });
7 |
8 | Session.set('locale', Meteor.settings.public.blog.defaultLocale);
9 | });
10 |
--------------------------------------------------------------------------------
/app/gs-cors.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "origin": ["*"],
4 | "responseHeader": ["Content-Type"],
5 | "method": ["GET", "POST", "PUT", "HEAD"],
6 | "maxAgeSeconds": 3000
7 | }
8 | ]
9 |
--------------------------------------------------------------------------------
/app/i18n/en.i18n.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Xolv.io MD-Blog",
3 | "description": "A WYSIWYG Markdown blog for your Meteor app.",
4 | "site_meta_desc": "An example page showing you how to use Xolv.io's md-blog.",
5 | "site_title": "Xolv.io Markdown Blog Sample Site",
6 | "home": "Home",
7 | "blog": "Blog",
8 | "sign_out": "Sign out",
9 | "register": "Register",
10 | "sign_in": "Sign in",
11 | "md_blog_desc": "A drop-in markdown blog for your Meteor app.",
12 | "see_a_demo": "See a Demo",
13 | "home_title": "meteor add xolvio:md-blog",
14 | "feature1_title": "WYSIWYG Markdown",
15 | "feature1_desc": "Write your blog posts in the popular markdown syntax on the left, and see your changes live on the right.",
16 | "feature2_title": "Simple Workflow",
17 | "feature2_desc": "You can create, publish, unpublish, archive, unarchive and delete blog posts.",
18 | "feature3_title": "Syntax Highlighting",
19 | "feature3_desc": "Uses %s which contains lots of themes to choose from to suit the look and feel of your site.",
20 | "feature4_title": "Customizable",
21 | "feature4_desc": "This demo site uses the %s responsive framework, but you can use anything you like from Bootstrap to Foundation.",
22 | "github_link": "Fork/Star on GitHub",
23 | "love_open_source": "We __heart__ the open-source community and welcome feedback and contributions.",
24 | "or": "or",
25 | "to_author_posts": " to author posts"
26 | }
27 |
--------------------------------------------------------------------------------
/app/i18n/fr.i18n.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "MD-Blog de Xolv.io",
3 | "description": "Un blog markdown prêt-à-utiliser pour votre application Meteor.",
4 | "site_meta_desc": "Un example de site démontrant l'utilisation du package md-blog de Xolv.io.",
5 | "site_title": "Site example du blog Markdown de Xolv.io",
6 | "home": "Site",
7 | "blog": "Blog",
8 | "sign_out": "Fermer la session",
9 | "register": "S'enregistrer",
10 | "sign_in": "Ouvrir une session",
11 | "md_blog_desc": "Un blog markdown prêt-à-utiliser pour votre application Meteor.",
12 | "see_a_demo": "Voir une démo",
13 | "home_title": "meteor add xolvio:md-blog",
14 | "feature1_title": "Éditeur Markdown intuitif",
15 | "feature1_desc": "Écrivez vos articles avec la syntaxe populaire 'Markdown' dans une zone à gauche, et voyez le rendu immédiatement à droite.",
16 | "feature2_title": "Workflow simple",
17 | "feature2_desc": "Vous pouvez créer, publier, retirer, archiver, remettre et supprimer les articles.",
18 | "feature3_title": "Code en couleur",
19 | "feature3_desc": "Utilise %s, qui contient un grand nombre de thèmes pour convenir au rendu de votre site.",
20 | "feature4_title": "Personnalisation",
21 | "feature4_desc": "Ce site de démo utilise le framework %s, mais vous pouvez utiliser ce que vous désirez, comme Bootstrap ou encore Foundation.",
22 | "github_link": "Fork/Star sur GitHub",
23 | "love_open_source": "Nous __heart__ la communauté du logiciel libre et accueuillons vos opinions et contributions.",
24 | "or": "ou",
25 | "to_author_posts": " pour écrire des articles"
26 | }
27 |
--------------------------------------------------------------------------------
/app/lib/slingshot-restrictions.js:
--------------------------------------------------------------------------------
1 | Slingshot.fileRestrictions("mdblog-pictures", {
2 | allowedFileTypes: ["image/png", "image/jpeg", "image/gif"],
3 | maxSize: 10 * 1024 * 1024 // 10 MB (use null for unlimited)
4 | });
5 |
--------------------------------------------------------------------------------
/app/packages/src:
--------------------------------------------------------------------------------
1 | ../../src
--------------------------------------------------------------------------------
/app/private/.gitignore:
--------------------------------------------------------------------------------
1 | google-cloud-service-key.pem
2 | google-cloud-access-id.txt
3 |
--------------------------------------------------------------------------------
/app/private/publish_email_en.html:
--------------------------------------------------------------------------------
1 |