Skip to content

Commit

Permalink
Allow setting config URL with <link> (decaporg#1146)
Browse files Browse the repository at this point in the history
* fix: allows for valid config types expansion

* feat: config url can now come through link tag

* fix: lints added coded

* fix: slims down code per review

* fix: expands query to find supported type

* fix: removes typo in test copy

* fix: changes validTypes to object

* fix: groups config functions into one getConfig func

* adds console message for config url

* adds to docs

* update docs

* fix test

* fix merge conflicts

contributor addition moved to decaporg#1241

* avoids empty path with link without href. changes link console message

* removes additional console

* fixes link path in console

* fix: remove superfluous .allcontributorsrc change
  • Loading branch information
brianlmacdonald committed May 23, 2018
1 parent a726dd8 commit c256823
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
9 changes: 9 additions & 0 deletions example/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@

<link href='https://fonts.googleapis.com/css?family=Roboto:300,400,500' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="/cms.css"/>
<!--
Netlify CMS will automatically look for a "config.yml" file in the same directory
as this "index.html", but you can override this by providing a link tag like this
one:
<link href="path/to/config.yml" type="text/yaml" rel="cms-config-url">
-->


<script>
window.repoFiles = {
_posts: {
Expand Down
18 changes: 16 additions & 2 deletions src/actions/config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import yaml from "js-yaml";
import { Map, List, fromJS } from "immutable";
import { trimStart, flow, isBoolean } from "lodash";
import { trimStart, flow, isBoolean, get } from "lodash";
import { authenticateUser } from "Actions/auth";
import * as publishModes from "Constants/publishModes";

Expand All @@ -9,6 +9,19 @@ export const CONFIG_SUCCESS = "CONFIG_SUCCESS";
export const CONFIG_FAILURE = "CONFIG_FAILURE";
export const CONFIG_MERGE = "CONFIG_MERGE";


const getConfigUrl = () => {
const validTypes = { 'text/yaml': 'yaml', 'application/x-yaml': 'yaml' };
const configLinkEl = document.querySelector('link[rel="cms-config-url"]');
const isValidLink = configLinkEl && validTypes[configLinkEl.type] && get(configLinkEl, 'href');
if (isValidLink) {
const link = get(configLinkEl, 'href');
console.log(`Using config file path: "${link}"`);
return link;
}
return 'config.yml';
}

const defaults = {
publish_mode: publishModes.SIMPLE,
};
Expand Down Expand Up @@ -130,7 +143,8 @@ export function loadConfig() {

try {
const preloadedConfig = getState().config;
const loadedConfig = await getConfig('config.yml', preloadedConfig && preloadedConfig.size > 1);
const configUrl = getConfigUrl();
const loadedConfig = await getConfig(configUrl, preloadedConfig && preloadedConfig.size > 1);

/**
* Merge any existing configuration so the result can be validated.
Expand Down
8 changes: 8 additions & 0 deletions website/site/content/docs/configuration-options.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ position: 23

All configuration options for Netlify CMS are specified in the `config.yml` file, in the folder where you access the editor UI (usually in the `/admin` folder).

Alternatively, you can specify a custom config file using a link tag:

```html
<!-- Note the "type" and "rel" attribute values, which are required. -->

<link href="path/to/config.yml" type="text/yaml" rel="cms-config-url">
```

To see working configuration examples, you can [start from a template](https://www.netlifycms.org/docs/start-with-a-template) or check out the [CMS demo site](https://cms-demo.netlify.com). (No login required: click the login button and the CMS will open.) You can refer to the demo [configuration code](https://github.com/netlify/netlify-cms/blob/master/example/config.yml) to see how each option was configured.

You can find details about all configuration options below. Note that [YAML syntax](https://en.wikipedia.org/wiki/YAML#Basic_components) allows lists and objects to be written in block or inline style, and the code samples below include a mix of both.
Expand Down

0 comments on commit c256823

Please sign in to comment.