Configuration

Card types / Filtering

Cards view:

[
    {
        "name": "Event", //{1}
        "type": "event", //{2}
        "creatable": true, //{3}
        "createLabel": "New event" //{4}
    },
    {
        "name": "Planning", //{1}
        "type": "planning", //{2}
        "creatable": true, //{3}
        "createLabel": "New planning" //{4}
    },
    {
        "name": "Assignment", //{1}
        "type": "assignment" //{2}
    }
]
  1. Name of the different objects types, displayed in drop down in top left

  2. The internal naming of the different types (don't change)

  3. A flag to determine if the specific item should be creatable and displayed under the menu in top right (default false)

  4. The label to display for creatable items

Card types / Filtering

Event:

Event filters + setup for internal use in Detail view

{
    "sectors": { //{1}
        "label": "Section", //{2}
        "noSelectionText": "All", //{3}
        "data": [ //{4}
            {
                "name": "Domestic", //{5}
                "value": "inrikes", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "inrikes" //{9}
                }
            },
            {
                "name": "World", //{5}
                "value": "utrikes", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "utrikes" //{9}
                }
            },
            {
                "name": "Economics", //{5}
                "value": "ekonomi", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "ekonomi" //{9}
                }
            },
            {
                "name": "Sport", //{5}
                "value": "sport", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "sport" //{9}
                }
            },
            {
                "name": "Culture", //{5}
                "value": "kultur", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "kultur" //{9}
                }
            }
        ]
    }
}
  1. A internal naming to determine start of specific filter (don't change) used in detail view as well as a filter

  2. Label to be displayed in the filter menu in top bar as well as in drop down inside Event details

  3. A label to be displayed when no filters are active

  4. Internal naming construction (don't change)

  5. A display name for a specific filter

  6. The value to be written into the XML on save

  7. Internal structure to determine start of filter part (don't change)

  8. The model key to map against when determine a filter lookup

  9. The value the model need to have in order to not filter it out

PlanningItem:

Planning item filters + setup for internal use in Detail view

{
    "priorities": { //{1}
        "label": "Urgency", //{2}
        "noSelectionText": "All", //{3}
        "data": [ //{4}
            {
                "name": "1", //{5}
                "value": "1", //{6}
                "filter": { //{7}
                    "key": "urgency", //{8}
                    "value": "1" //{9}
                }
            },
            {
                "name": "2", //{5}
                "value": "2", //{6}
                "filter": { //{7}
                    "key": "urgency", //{8}
                    "value": "2" //{9}
                }
            },
            {
                "name": "3", //{5}
                "value": "3", //{6}
                "filter": { //{7}
                    "key": "urgency", //{8}
                    "value": "3" //{9}
                }
            },
            {
                "name": "4", //{5}
                "value": "4", //{6}
                "filter": { //{7}
                    "key": "urgency", //{8}
                    "value": "4" //{9}
                }
            }
        ]
    },
    "sectors": { //{1}
        "label": "Section", //{2}
        "noSelectionText": "All", //{3}
        "data": [ //{4}
            {
                "name": "Domestic", //{5}
                "value": "INR", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "INR" //{9}
                }
            },
            {
                "name": "World", //{5}
                "value": "UTR", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "UTR" //{9}
                }
            },
            {
                "name": "Ekonomi", //{5}
                "value": "EKO", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "EKO" //{9}
                }
            },
            {
                "name": "Sport", //{5}
                "value": "SPO", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "SPO" //{9}
                }
            },
            {
                "name": "Culture", //{5}
                "value": "KLT", //{6}
                "filter": { //{7}
                    "key": "sector", //{8}
                    "value": "KLT" //{9}
                }
            }
        ]
    }
}
  1. A internal naming to determine start of specific filter (don't change) used in detail view as well as a filter

  2. Label to be displayed in the filter menu in top bar as well as in drop down inside PlanningItem details

  3. A label to be displayed when no filters are active

  4. Internal naming construction (don't change)

  5. A display name for a specific filter

  6. The value to be written into the XML on save

  7. Internal structure to determine start of filter part (don't change)

  8. The model key to map against when determine a filter lookup

  9. The value the model need to have in order to not filter it out

Assignment:

Assignment filters + setup for internal use in Detail view

{
    "status": { //{1}
        "label": "Status", //{2}
        "noSelectionText": " All", //{3}
        "data": [ //{4}
            {
                "name": "draft", //{5}
                "value": "imext:draft", //{6}
                "filter": { //{7}
                    "key": "status", //{8}
                    "value": "imext:draft" //{9}
                }
            },
            {
                "name": "pending", //{5}
                "value": "stat:withheld", //{6}
                "filter": { //{7}
                    "key": "status", //{8}
                    "value": "stat:withheld" //{9}
                }
            },
            {
                "name": "done", //{5}
                "value": "imext:done", //{6}
                "filter": { //{7}
                    "key": "status", //{8}
                    "value": "imext:done" //{9}
                }
            },
            {
                "name": "usable", //{5}
                "value": "stat:usable", //{6}
                "filter": { //{7}
                    "key": "status", //{8}
                    "value": "stat:usable" //{9}
                }
            }
        ]
    },
    "type": { //{1}
        "label": "Type", //{2}
        "noSelectionText": " All", //{3}
        "data": [ //{4}
            {
                "name": "Text", //{5}
                "value": "ninat:text", //{6}
                "filter": { //{7}
                    "key": "itemClass", //{8}
                    "value": "ninat:text" //{9}
                }
            },
            {
                "name": "Picture", //{5}
                "value": "ninat:picture", //{6}
                "filter": { //{7}
                    "key": "itemClass", //{8}
                    "value": "ninat:picture" //{9}
                }
            },
            {
                "name": "Graphic", //{5}
                "value": "ninat:graphic", //{6}
                "filter": { //{7}
                    "key": "itemClass", //{8}
                    "value": "ninat:graphic" //{9}
                }
            },
            {
                "name": "Video", //{5}
                "value": "ninat:video", //{6}
                "filter": { //{7}
                    "key": "itemClass", //{8}
                    "value": "ninat:video" //{9}
                }
            }
        ]
    }
}
  1. A internal naming to determine start of specific filter (don't change) used in detail view as well as a filter

  2. Label to be displayed in the filter menu in top bar as well as in drop down inside Assignment details

  3. A label to be displayed when no filters are active

  4. Internal naming construction (don't change)

  5. A display name for a specific filter

  6. The value to be written into the XML on save

  7. Internal structure to determine start of filter part (don't change)

  8. The model key to map against when determine a filter lookup

  9. The value the model need to have in order to not filter it out

Cards Sorting

Event:

[
    {
        "label": "Updated", //{1}
        "default": true, //{2}
        "property": "updated" //{3}
    }
]
  1. A display name for the current sorting

  2. Determine if default sorting or not

  3. Which OC property to sort by

PlanningItem:

[
    {
        "label": "Updated", //{1}
        "default": true, //{2}
        "property": "updated" //{3}
    },
    {
        "label": "Prio", //{1}
        "property": "PlanningUrgency" //{3}
    },
    {
        "label": "ProdDate", //{1}
        "property": "PlanningProdDate" //{3}
    }
]
  1. A display name for the current sorting

  2. Determine if default sorting or not

  3. Which OC property to sort by

Assignment:

[
    {
        "label": "Updated", //{1}
        "default": true, //{2}
        "property": "updated" //{3}
    },
    {
        "label": "Covers From", //{1}
        "property": "AssignmentCoversFrom" //{3}
    }
]
  1. A display name for the current sorting

  2. Determine if default sorting or not

  3. Which OC property to sort by

Detail view components structure

Event:

Available loadable components for Event:

  • Accreditation

  • DateTimeInfo

  • Tags

  • PlanningItems

  • Participants

Event:Main content

  • determine what loadable components to display in main column

    [
      "Participants", //{1}
      "PlanningItems" //{1}
    ]

    Event:Right sidebar

  • determine what loadable components to display in right column

    [
      "Accreditation", //{1}
      "Tags", //{1}
      "DateTimeInfo" //{1}
    ]
  • A string representation of the loadable component to load in a specific position. The order states how they are displayed.

PlanningItem:

Available loadable components for PlanningItem:

  • Assignments

  • DateTimeInfo

  • ExternalDescription

  • Tags

  • RelatedItemInfo

PlanningItem:Main content

  • determine what loadable components to display in main column

    [
      "Assignments" //{1}
    ]

    PlanningItem:Right sidebar

  • determine what loadable components to display in right column

    [
      "RelatedItemInfo", //{1}
      "ExternalDescription", //{1}
      "Tags", //{1}
      "DateTimeInfo" //{1}
    ]
  • A string representation of the loadable component to load in a specific position. The order states how they are displayed.

Assignment:

Available loadable components for PlanningItem:

  • Articles

  • Assignees

  • DateTimeInfo

  • RelatedItemInfo

  • Tags

Assignment:Main content

  • determine what loadable components to display in main column

    [
      "Assignees", //{1}
      "Articles" //{1}
    ]

    Assignment:Right sidebar

  • determine what loadable components to display in right column

    [
      "RelatedItemInfo", //{1}
      "DateTimeInfo", //{1}
      "Tags" //{1}
    ]
  • A string representation of the loadable component to load in a specific position. The order states how they are displayed.

Detail info

A place to house detail view specific configuration

Event:

{
    "time": { //{1}
        "diff": 120, //{2}
        "steps": 15 //{3}
    }
}
  1. A internal key to define time properties (don't change)

  2. The amount of minutes difference between start and end when creating new, i.e start time 12:00 (12 AM) -> end time 14:00 (2 PM)

  3. The number of minutes to step by when changing time

PlanningItem:

{
    "time": { //{1}
        "diff": 120, //{2}
        "steps": 15 //{3}
    }
}
  1. A internal key to define time properties (don't change)

  2. The amount of minutes difference between start and end when creating new, i.e start time 12:00 (12 AM) -> end time 14:00 (2 PM)

  3. The number of minutes to step by when changing time

Assignment:

{
    "time": { //{1}
        "diff": 120, //{2}
        "steps": 15 //{3}
    }
}
  1. A internal key to define time properties (don't change)

  2. The amount of minutes difference between start and end when creating new, i.e start time 12:00 (12 AM) -> end time 14:00 (2 PM)

  3. The number of minutes to step by when changing time

Open Content Property mappings

Model keys to OC property mapping

Event:

{
    "xml": "EventXML", //{1}
    "uuid": "uuid", //{1}
    "mimetype": "mimetype", //{1}
    "name": "EventName", //{1}
    "sector": "EventSector", //{1}
    "startDate": "EventStartDate", //{1}
    "endDate": "EventEndDate", //{1}
    "etag": "checksum", //{1}
    "planningItem": { //{2}
        "property": "EventPlanningItemRelations" //{3}
    },
    "section": "EventSection", //{1}
    "pubStart": "EventStartDate", //{1}
    "pubStop": "EventEndDate" //{1}
}
  1. A key value pair where left part is internal keys and right part is OC properties

  2. Internal format to determine that the following part is a relation. Left part internal key

  3. Which property to contains the relation from OC

PlanningItem:

{
    "etag": "checksum", //{1}
    "xml": "PlanningXML", //{1}
    "mimetype": "mimetype", //{1}
    "headline": "PlanningHeadline", //{1}
    "urgency": "PlanningUrgency", //{1}
    "statusHRM": "PlanningStatusHRM", //{1}
    "sector": "PlanningSector", //{1}
    "startDate": "PlanningStartDate", //{1}
    "endDate": "PlanningEndDate", //{1}
    "event": { //{2}
        "property": "PlanningEventRelation" //{3}
    },
    "assignments": { //{2}
        "property": "PlanningAssignmentsRelation" //{3}
    },
    "section": "PlanningSection", //{1}
    "prodDate": "PlanningProdDate", //{1}
    "prodDateEnd": "PlanningProdDateEnd" //{1}
}
  1. A key value pair where left part is internal keys and right part is OC properties

  2. Internal format to determine that the following part is a relation. Left part internal key

  3. Which property to contains the relation from OC

Assignment:

{
    "etag": "checksum", //{1}
    "uuid": "uuid", //{1}
    "contentType": "contenttype", //{1}
    "xml": "AssignmentXML", //{1}
    "mimetype": "mimetype", //{1}
    "headline": "AssignmentHeadline", //{1}
    "type": "AssignmentType", //{1}
    "statusHRM": "AssignmentStatusHRM", //{1}
    "assigneeName": "AssignmentAssigneesName", //{1}
    "endDate": "AssignmentEndDate", //{1}
    "startDate": "AssignmentStartDate", //{1}
    "assignees": { //{2}
        "property": "AssignmentAssigneesRelation" //{3}
    },
    "articles": { //{2}
        "property": "AssignmentArticlesRelation" //{3}
    },
    "planningItem": { //{2}
        "property": "AssignmentPlanningItemRelation" //{3}
    },
    "coversTo": "AssignmentCoversTo", //{1}
    "coversFrom": "AssignmentCoversFrom" //{1}
}
  1. A key value pair where left part is internal keys and right part is OC properties

  2. Internal format to determine that the following part is a relation. Left part internal key

  3. Which property to contains the relation from OC

Articles:

{
    "headline": "ArticleHeadline", //{1}
    "leadin": "ArticleLeadin", //{1}
    "mimetype": "mimetype", //{1}
    "body": "ArticleBody", //{1}
    "uuid": "uuid", //{1}
    "created": "created", //{1}
    "status": "PubStatus", //{1}
    "updated": "updated", //{1}
    "authors": "Authors", //{1}
    "images": "ImageFilenames", //{1}
    "caption": "ArticleCaption" //{1}
}
  1. A key value pair where left part is internal keys and right part is OC properties

Concepts:

{
    "xml": "ConceptXML", //{1}
    "uuid": "uuid", //{1}
    "name": "ConceptName", //{1}
    "type": "ConceptImTypeFull", //{1}
    "avatar": { //{2}
        "property": "ConceptAvatarRelation" //{3}
    }
}
  1. A key value pair where left part is internal keys and right part is OC properties

  2. Internal format to determine that the following part is a relation. Left part internal key

  3. Which property to contains the relation from OC

Avatar:

{
    "uuid": "uuid", //{1}
    "filename": "Filename" //{1}
}
  1. A key value pair where left part is internal keys and right part is OC properties

Open Content Property fetching

Determine what properties to fetch from OC for each type. Left side is keys used in code and right is the named keys from property mapping (not OC properties)

Event:

[
    "xml", //{1}
    "planningItem.xml" //{2}
]
  1. A property mapping key to fetch

  2. An example where the property key is a relation and also fetching the sub key of that relation

PlanningItem:

[
    "xml", //{1}
    "event.xml", //{2}
    "assignments.xml" //{2}
]
  1. A property mapping key to fetch

  2. An example where the property key is a relation and also fetching the sub key of that relation

Assignment:

[
    "xml", //{1}
    "assignees.xml", //{2}
    "planningItem.xml" //{2}
]
  1. A property mapping key to fetch

  2. An example where the property key is a relation and also fetching the sub key of that relation

Article:

[
    "headline", //{1}
    "uuid", //{1}
    "status", //{1}
    "created", //{1}
    "updated", //{1}
    "leadin", //{1}
    "body", //{1}
    "authors" //{1}
]
  1. A property mapping key to fetch

Concept:

{
    "tags": [ //{1}
        "uuid", //{2}
        "name", //{2}
        "avatar.uuid", //{3}
        "avatar.filename" //{3}
    ],
    "assignees": [ //{1}
        "xml", //{2}
        "uuid", //{2}
        "name", //{2}
        "avatar.uuid", //{3}
        "avatar.filename" //{3}
    ],
    "organisers": [ //{1}
        "xml", //{2}
        "uuid", //{2}
        "name" //{2}
    ],
    "participants": [ //{1}
        "xml", //{2}
        "uuid", //{2}
        "name", //{2}
        "avatar.uuid", //{3}
        "avatar.filename" //{3}
    ]
}
  1. An internal key used to know what to fetch for specific concept types whitin the app

  2. A property mapping key to fetch

  3. An example where the property key is a relation and also fetching the sub key of that relation

OC-Queries & Suggestions mappings

Setup base queries for the different types as well as suggest fields to use

Event:

Base query

The base query for Events

contenttype: Event

Event suggest fields + sort order

The fields to use when using suggest search

{
    "name": 0, //{1}
    "section": 0 //{1}
}
  1. Left part is a property mapping key to fetch while the following number is a rank weight in order to sort the results. Higher number equals higher sorting order

Event labels

{
    "name": "Name", //{1}
    "section": "Section" //{1}
}
  1. A mapping from key to a Label, left part is the key specified in the fields config while the right part is the translated label to display in result

PlanningItem:

Base query

The base query for Planning Items

contenttype: Planning

Planning Item suggest fields + sort order

The fields to use when using suggest search

{
    "urgency": 0, // {1}
    "headline": 0, // {1}
    "statusHRM": 0, // {1}
    "section": 0 // {1}
}
  1. Left part is a property mapping key to fetch while the following number is a rank weight in order to sort the results. Higher number equals higher sorting order

Planning Item labels

{
    "urgency": "Prio", // {1}
    "headline": "Title", // {1}
    "statusHRM": "Status", // {1}
    "section": "Section" // {1}
}
  1. A mapping from key to a Label, left part is the key specified in the fields config while the right part is the translated label to display in result

Assignment:

Base query

The base query for Assignments

contenttype: Assignment

Planning Item suggest fields + sort order

The fields to use when using suggest search

{
    "headline": 0, // {1}
    "type": 0, // {1}
    "statusHRM": 0, // {1}
    "assigneeName": 0 // {1}
}
  1. Left part is a property mapping key to fetch while the following number is a rank weight in order to sort the results. Higher number equals higher sorting order

Planning Item labels

{
    "headline": "Headline", // {1}
    "type": "Assignment type", // {1}
    "statusHRM": "Status", // {1}
    "assigneeName": "Assignee" // {1}
}
  1. A mapping from key to a Label, left part is the key specified in the fields config while the right part is the translated label to display in result

Tags

{
    "planningItem": [ // {1}
        {
            "type": "topic", // {2} 
            "title": "Topic", // {3}
            "sortBy": "ConceptNameString", // {4}
            "iconClass": "message", // {5}
            "ocType": "x-im/topic", // {6}
            "ocProperty": "ConceptImTypeFull" // {7}
        },
        {
            "type": "category", // {2}
            "title": "Category", // {3}
            "sortBy": "ConceptNameString", // {4}
            "iconClass": "tag", // {5}
            "ocType": "x-im/category", // {6}
            "ocProperty": "ConceptImTypeFull" // {7}
        }
    ],
    "assignment": [ // {1}
        {
            "type": "topic", // {2}
            "title": "Topic", // {3}
            "sortBy": "ConceptNameString", // {4}
            "iconClass": "message", // {5}
            "ocType": "x-im/topic", // {6}
            "ocProperty": "ConceptImTypeFull" // {7}
        },
        {
            "type": "category", // {2}
            "title": "Category", // {3}
            "sortBy": "ConceptNameString", // {4}
            "iconClass": "tag", // {5}
            "ocType": "x-im/category", // {6}
            "ocProperty": "ConceptImTypeFull" // {7}
        }
    ],
    "event": [ // {1}
        {
            "type": "story", // {2}
            "title": "Story", // {3}
            "sortBy": "ConceptNameString", // {4}
            "iconClass": "brightness-max", // {5}
            "ocType": "x-im/story", // {6}
            "ocProperty": "ConceptImTypeFull" // {7}
        },
        {
            "type": "topic", // {2}  
            "title": "Topic", // {3}
            "sortBy": "ConceptNameString", // {4}
            "iconClass": "message", // {5}
            "ocType": "x-im/topic", // {6}
            "ocProperty": "ConceptImTypeFull" // {7}
        },
        {
            "type": "category", // {2} 
            "title": "Category", // {3}
            "sortBy": "ConceptNameString", // {4}
            "iconClass": "tag", // {5}
            "ocType": "x-im/category", // {6}
            "ocProperty": "ConceptImTypeFull" // {7}
        }
    ]
}
  1. Internal naming to determine what concept types to utilise for each NRP content types

  2. The specific Concept type

  3. A display name to show for the specific type

  4. What OC property to sort by

  5. The icon to display for the specific type (DripIcons)

  6. The full type name for the Concept

  7. Which OC property that contains the full type

Assignees

{
    "sortBy": "ConceptNameString", // {1}
    "iconClass": "user-id", // {2
    "ocType": "x-im/author", // {3}
    "ocProperty": "ConceptImTypeFull" // {4}
}
  1. What OC property to sort by

  2. The icon to display for the specific type (DripIcons)

  3. The full type name for the Concept

  4. Which OC property that contains the full type

Organisers

{
    "sortBy": "ConceptNameString", // {1}
    "limit": 15, // {2}
    "newOrganiser": { // {3}
        "type": "x-organiser/organisation", // {4}
        "uri": "organiser://organisation/", // {5}
        "conceptType": "organisation" // {6}
    },
    "properties": [ // {3}
        {
            "iconClass": "store", // {7}
            "ocType": "x-im/organisation", // {8}
            "ocProperty": "ConceptImTypeFull" // {9}
        },
        {
            "iconClass": "user", // {7}
            "ocType": "x-im/person", // {8}
            "ocProperty": "ConceptImTypeFull" // {9}
        }
    ]
}
  1. OC property to sort by

  2. number of items to search initially (default 15)

  3. Internal key (don't change)

  4. The type to write to the format

  5. The uri to write to the format

  6. The Concept type to match

  7. A icon to display for specific concept type (DripIcons)

  8. Which Concept type (ConceptImTypeFull)

  9. The OC property that holds the full type

Participants

{
    "sortBy": "ConceptNameString", // {1}
    "limit": 15, // {2}
    "newParticipant": { // {3}
        "type": "x-participant/person", // {4}
        "uri": "participant://person/", // {5}
        "conceptType": "person" // {6}
    },
    "properties": [ // {3}
        {
            "iconClass": "user-id", // {7}
            "ocType": "x-im/author", // {8}
            "ocProperty": "ConceptImTypeFull" // {9}
        },
        {
            "iconClass": "user", // {7}
            "ocType": "x-im/person", // {8}
            "ocProperty": "ConceptImTypeFull" // {9}
        }
    ]
}
  1. OC property to sort by

  2. number of items to search initially (default 15)

  3. Internal key (don't change)

  4. The type to write to the format

  5. The uri to write to the format

  6. The Concept type to match

  7. A icon to display for specific concept type (DripIcons)

  8. Which Concept type (ConceptImTypeFull)

  9. The OC property that holds the full type

Providers

Content Provider (LCC/OC)

LCC_PROVIDER // {1}
  1. The named content provider mapped in LCC/OC-communication plugin

ICP image content provider

{
    "article": { // {1}
        "provider": "tt-imgix", // {2}
        "function": "default", // {3}
        "identifier": "filename" // (4)
    },
    "avatar": { // {5}
        "provider": "tt-imgix", // {2}
        "function": "default", // {3}
        "identifier": "filename" // (4)
    }
}
  1. Internal key used by articles

  2. The provider to use from ICP in order to display image

  3. Which function on the specified provider to use

  4. Which type of identifier to use filename/uuid (depending on service)

  5. Internal key used to render Concept avatars

Map options

Maps settings

{
    "apiKey": "GOOGLE_MAPS_API_KEY" // {1}
}
  1. A valid Google maps api key in order to utilise the map functionality inside NRP

Writer

Writer config

{
    "endpoint": "URL_TO_WRITER", // {1}
    "openArticleInNewWindow": false // {2}
}
  1. Endpoint to a writer that works towards the same OC

  2. Options wether to open articles in new window or not

Debug

Log to console

Switchbutton: false/true // {1}
  1. Determine if extra debug outputs should be outputted into the console of the browser or not

Last updated