Render api/ content dynamically via api/root/ templates, which allows for splitting up collection descriptions. Update jquery-ui to include more components like accordions.agranig/rest
@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
CATALYST_DEBUG=1 DBIC_TRACE=1 DBIC_TRACE_PROFILE=console DEVEL_CONFESS_OPTIONS='objects builtin dump color source' perl `which plackup` -I ../ngcp-schema/lib -I lib -I ../sipwise-base/lib/ ngcp_panel.psgi --listen /tmp/ngcp_panel_sock --nproc 1 -s FCGI -r
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 260 B After Width: | Height: | Size: 418 B |
|
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 312 B |
|
Before Width: | Height: | Size: 178 B After Width: | Height: | Size: 205 B |
|
Before Width: | Height: | Size: 104 B After Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 125 B After Width: | Height: | Size: 348 B |
|
Before Width: | Height: | Size: 105 B After Width: | Height: | Size: 207 B |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 90 B After Width: | Height: | Size: 278 B |
|
Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 328 B |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 6.2 KiB |
@ -1,406 +0,0 @@
|
||||
/*!
|
||||
* jQuery UI CSS Framework 1.8.21
|
||||
*
|
||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Theming/API
|
||||
*/
|
||||
|
||||
/* Layout helpers
|
||||
----------------------------------*/
|
||||
.ui-helper-hidden { display: none; }
|
||||
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
|
||||
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
|
||||
.ui-helper-clearfix:after { clear: both; }
|
||||
.ui-helper-clearfix { zoom: 1; }
|
||||
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-disabled { cursor: default !important; }
|
||||
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||
|
||||
|
||||
/*!
|
||||
* jQuery UI CSS Framework 1.8.21
|
||||
*
|
||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Theming/API
|
||||
*
|
||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
|
||||
*/
|
||||
|
||||
|
||||
/* Component containers
|
||||
----------------------------------*/
|
||||
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
|
||||
.ui-widget .ui-widget { font-size: 1em; }
|
||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
|
||||
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
|
||||
.ui-widget-content a { color: #333333; }
|
||||
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
|
||||
.ui-widget-header a { color: #ffffff; }
|
||||
|
||||
/* Interaction states
|
||||
----------------------------------*/
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
|
||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
|
||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
|
||||
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
|
||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
|
||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
|
||||
.ui-widget :active { outline: none; }
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
|
||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
|
||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
|
||||
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
|
||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
|
||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
||||
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
|
||||
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
|
||||
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
|
||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
|
||||
|
||||
/* positioning */
|
||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||
.ui-icon-extlink { background-position: -32px -80px; }
|
||||
.ui-icon-newwin { background-position: -48px -80px; }
|
||||
.ui-icon-refresh { background-position: -64px -80px; }
|
||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||
.ui-icon-document { background-position: -32px -96px; }
|
||||
.ui-icon-document-b { background-position: -48px -96px; }
|
||||
.ui-icon-note { background-position: -64px -96px; }
|
||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||
.ui-icon-comment { background-position: -128px -96px; }
|
||||
.ui-icon-person { background-position: -144px -96px; }
|
||||
.ui-icon-print { background-position: -160px -96px; }
|
||||
.ui-icon-trash { background-position: -176px -96px; }
|
||||
.ui-icon-locked { background-position: -192px -96px; }
|
||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||
.ui-icon-tag { background-position: -240px -96px; }
|
||||
.ui-icon-home { background-position: 0 -112px; }
|
||||
.ui-icon-flag { background-position: -16px -112px; }
|
||||
.ui-icon-calendar { background-position: -32px -112px; }
|
||||
.ui-icon-cart { background-position: -48px -112px; }
|
||||
.ui-icon-pencil { background-position: -64px -112px; }
|
||||
.ui-icon-clock { background-position: -80px -112px; }
|
||||
.ui-icon-disk { background-position: -96px -112px; }
|
||||
.ui-icon-calculator { background-position: -112px -112px; }
|
||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||
.ui-icon-search { background-position: -160px -112px; }
|
||||
.ui-icon-wrench { background-position: -176px -112px; }
|
||||
.ui-icon-gear { background-position: -192px -112px; }
|
||||
.ui-icon-heart { background-position: -208px -112px; }
|
||||
.ui-icon-star { background-position: -224px -112px; }
|
||||
.ui-icon-link { background-position: -240px -112px; }
|
||||
.ui-icon-cancel { background-position: 0 -128px; }
|
||||
.ui-icon-plus { background-position: -16px -128px; }
|
||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||
.ui-icon-minus { background-position: -48px -128px; }
|
||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||
.ui-icon-close { background-position: -80px -128px; }
|
||||
.ui-icon-closethick { background-position: -96px -128px; }
|
||||
.ui-icon-key { background-position: -112px -128px; }
|
||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||
.ui-icon-scissors { background-position: -144px -128px; }
|
||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||
.ui-icon-copy { background-position: -176px -128px; }
|
||||
.ui-icon-contact { background-position: -192px -128px; }
|
||||
.ui-icon-image { background-position: -208px -128px; }
|
||||
.ui-icon-video { background-position: -224px -128px; }
|
||||
.ui-icon-script { background-position: -240px -128px; }
|
||||
.ui-icon-alert { background-position: 0 -144px; }
|
||||
.ui-icon-info { background-position: -16px -144px; }
|
||||
.ui-icon-notice { background-position: -32px -144px; }
|
||||
.ui-icon-help { background-position: -48px -144px; }
|
||||
.ui-icon-check { background-position: -64px -144px; }
|
||||
.ui-icon-bullet { background-position: -80px -144px; }
|
||||
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||
.ui-icon-play { background-position: 0 -160px; }
|
||||
.ui-icon-pause { background-position: -16px -160px; }
|
||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||
.ui-icon-seek-start { background-position: -80px -160px; }
|
||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||
.ui-icon-stop { background-position: -96px -160px; }
|
||||
.ui-icon-eject { background-position: -112px -160px; }
|
||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||
.ui-icon-power { background-position: 0 -176px; }
|
||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||
.ui-icon-signal { background-position: -32px -176px; }
|
||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Corner radius */
|
||||
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
|
||||
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
|
||||
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
|
||||
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
|
||||
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*!
|
||||
* jQuery UI Resizable 1.8.21
|
||||
*
|
||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Resizable#theming
|
||||
*/
|
||||
.ui-resizable { position: relative;}
|
||||
.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
|
||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
|
||||
* jQuery UI Selectable 1.8.21
|
||||
*
|
||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Selectable#theming
|
||||
*/
|
||||
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
|
||||
/*!
|
||||
* jQuery UI Slider 1.8.21
|
||||
*
|
||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Slider#theming
|
||||
*/
|
||||
.ui-slider { position: relative; text-align: left; }
|
||||
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
|
||||
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
|
||||
|
||||
.ui-slider-horizontal { height: .8em; }
|
||||
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
|
||||
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
||||
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
||||
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
||||
|
||||
.ui-slider-vertical { width: .8em; height: 100px; }
|
||||
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
|
||||
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
||||
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
||||
.ui-slider-vertical .ui-slider-range-max { top: 0; }/*!
|
||||
* jQuery UI Datepicker 1.8.21
|
||||
*
|
||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Datepicker#theming
|
||||
*/
|
||||
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
|
||||
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
||||
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
||||
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
||||
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
||||
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
||||
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
||||
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
|
||||
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||
.ui-datepicker select.ui-datepicker-month,
|
||||
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||
.ui-datepicker td { border: 0; padding: 1px; }
|
||||
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||
|
||||
/* with multiple calendars */
|
||||
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
|
||||
|
||||
/* RTL support */
|
||||
.ui-datepicker-rtl { direction: rtl; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
|
||||
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||
.ui-datepicker-cover {
|
||||
display: none; /*sorry for IE5*/
|
||||
display/**/: block; /*sorry for IE5*/
|
||||
position: absolute; /*must have*/
|
||||
z-index: -1; /*must have*/
|
||||
filter: mask(); /*must have*/
|
||||
top: -4px; /*must have*/
|
||||
left: -4px; /*must have*/
|
||||
width: 200px; /*must have*/
|
||||
height: 200px; /*must have*/
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
<h2 id="[% id %]">
|
||||
[% IF uri -%]
|
||||
<a href="[% uri %]" rel="collection">
|
||||
[% END -%]
|
||||
[% title %]
|
||||
[% IF uri -%]
|
||||
</a>
|
||||
[% END -%]
|
||||
</h2>
|
||||
|
||||
<dl>
|
||||
<dt id="draft-wilde-accept-post">Accept-Post header</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/draft-wilde-accept-post">draft-wilde-accept-post</a></dd>
|
||||
<dt id="rfc6902">JSON Patch</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/rfc6902">RFC 6902</a></dd>
|
||||
<dt id="draft-kelly-json-hal">HAL</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/draft-kelly-json-hal">draft-kelly-json-hal</a></dd>
|
||||
<dt id="rfc2616">HTTP</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a></dd>
|
||||
<dt id="rfc5988">Link headers</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/rfc5988">RFC 5988</a></dd>
|
||||
<dt id="rfc2119">MAY, MUST, RECOMMENDED</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/rfc2119">RFC 2119</a></dd>
|
||||
<dt id="rfc5789">PATCH method</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/rfc5789">RFC 5789</a></dd>
|
||||
<dt id="draft-snell-http-prefer">Prefer header</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/draft-snell-http-prefer">draft-snell-http-prefer</a></dd>
|
||||
<dt id="rfc6906">profile link relation</dt>
|
||||
<dd><a href="http://tools.ietf.org/html/rfc6906">RFC 6906</a></dd>
|
||||
<dt id="iana-relations">standard link relations</dt>
|
||||
<dd><a href="https://iana.org/assignments/link-relations">IANA link relations registry</a></dd>
|
||||
</dl>
|
||||
[% # vim: set tabstop=4 syntax=html expandtab: -%]
|
||||
@ -0,0 +1,16 @@
|
||||
<h2 id="[% id %]">
|
||||
[% IF uri -%]
|
||||
<a href="[% uri %]" rel="collection">
|
||||
[% END -%]
|
||||
[% title %]
|
||||
[% IF uri -%]
|
||||
</a>
|
||||
[% END -%]
|
||||
</h2>
|
||||
|
||||
<p>This documentation is also a machine-readable service document. The resource processing model is implied by
|
||||
the <a href="#draft-kelly-json-hal">JSON Hypertext Application Language</a>, draft version 06. This document
|
||||
specifies a <a href="#rfc6906">profile</a> by defining <a href="#relations">link relations</a> and their
|
||||
implied restrictions on the media type.</p>
|
||||
|
||||
[% # vim: set tabstop=4 syntax=html expandtab: -%]
|
||||
@ -0,0 +1,254 @@
|
||||
<h2 id="[% id %]">
|
||||
[% IF uri -%]
|
||||
<a href="[% uri %]" rel="collection">
|
||||
[% END -%]
|
||||
[% title %]
|
||||
[% IF uri -%]
|
||||
</a>
|
||||
[% END -%]
|
||||
</h2>
|
||||
|
||||
<code>
|
||||
[% INSERT 'js/contacts-item.json' -%]
|
||||
</code>
|
||||
|
||||
<h3>Examples</h3>
|
||||
<div class="examples">
|
||||
|
||||
<h4>Request available HTTP methods on the URI</h4>
|
||||
<p>
|
||||
[%
|
||||
cmd = 'curl -i -X OPTIONS -H \'Connection: close\' -E NGCP-API-client-certificate-1385650532.pem --cacert ca-cert.pem https://example.org:1443/api/contacts/';
|
||||
INCLUDE helpers/api_command.tt cmd=cmd;
|
||||
|
||||
request = [
|
||||
'OPTIONS /api/contacts/ HTTP/1.1'
|
||||
];
|
||||
response = [
|
||||
'HTTP/1.1 200 OK',
|
||||
'Allow: GET, HEAD, OPTIONS, POST',
|
||||
'<a href="#draft-wilde-accept-post">Accept-Post</a>: application/hal+json; profile="http://purl.org/sipwise/ngcp-api/#rel-contacts"',
|
||||
];
|
||||
INCLUDE helpers/api_req_res.tt request=request response=response;
|
||||
-%]
|
||||
</p>
|
||||
|
||||
<h4>Request the entire <i>contacts</i> collection</h4>
|
||||
<p>
|
||||
[%
|
||||
cmd = 'curl -i -X GET -H \'Connection: close\' -E NGCP-API-client-certificate-1385650532.pem --cacert ca-cert.pem https://example.org:1443/api/contacts/';
|
||||
INCLUDE helpers/api_command.tt cmd=cmd;
|
||||
|
||||
request = [
|
||||
'GET /api/contacts/ HTTP/1.1',
|
||||
];
|
||||
response = [
|
||||
'HTTP/1.1 200 OK
|
||||
Content-Type: application/hal+json; profile="http://purl.org/sipwise/ngcp-api/#rel-contacts"
|
||||
ETag: "ni:/sha3-256;JH7uV8gwV5paX1NL1WK0YPo8KgAMUl+UwqW4c1tm9DA"
|
||||
Last-Modified: Thu, 21 Nov 2013 16:34:07 GMT
|
||||
Link: <http://example.com/>; <a href="#rfc6906">rel=profile</a>
|
||||
<a href="#rfc5988">Link</a>: </api/contacts/>; rel=self
|
||||
Link: </api/resellers/?id=1>; rel="http://example.com/#rel-contacts"
|
||||
Link: </api/resellers/?id=2>; rel="http://example.com/#rel-contacts"
|
||||
|
||||
{
|
||||
"_embedded" : {
|
||||
"ngcp:contacts" : [
|
||||
{
|
||||
"_links" : {
|
||||
"collection" : {
|
||||
"href" : "/api/contacts/"
|
||||
},
|
||||
"curies" : {
|
||||
"href" : "http://example.com/#rel-{rel}",
|
||||
"name" : "ngcp",
|
||||
"templated" : true
|
||||
},
|
||||
"ngcp:resellers" : {
|
||||
"href" : "/api/resellers/?id=1"
|
||||
},
|
||||
"profile" : {
|
||||
"href" : "http://example.com/"
|
||||
},
|
||||
"self" : {
|
||||
"href" : "/api/contacts/?id=1"
|
||||
}
|
||||
},
|
||||
"city" : null,
|
||||
"company" : null,
|
||||
"country" : null,
|
||||
"email" : "default-customer@default.invalid",
|
||||
"firstname" : "Default",
|
||||
"lastname" : "Contact",
|
||||
"phonenumber" : null,
|
||||
"postcode" : null,
|
||||
"street" : null
|
||||
},
|
||||
{
|
||||
"_links" : {
|
||||
"collection" : {
|
||||
"href" : "/api/contacts/"
|
||||
},
|
||||
"curies" : {
|
||||
"href" : "http://example.com/#rel-{rel}",
|
||||
"name" : "ngcp",
|
||||
"templated" : true
|
||||
},
|
||||
"profile" : {
|
||||
"href" : "http://example.com/"
|
||||
},
|
||||
"self" : {
|
||||
"href" : "/api/contacts/?id=2"
|
||||
}
|
||||
},
|
||||
"city" : "McMurdo",
|
||||
"company" : "Internet Widgets",
|
||||
"country" : "AQ",
|
||||
"email" : "a.customr@mail.example.net",
|
||||
"firstname" : "Any",
|
||||
"lastname" : "Customr",
|
||||
"phonenumber" : null,
|
||||
"postcode" : "000045",
|
||||
"street" : null
|
||||
}
|
||||
]
|
||||
},
|
||||
"_links" : {
|
||||
"curies" : {
|
||||
"href" : "http://example.com/#rel-{rel}",
|
||||
"name" : "ngcp",
|
||||
"templated" : true
|
||||
},
|
||||
"ngcp:contacts" : [
|
||||
{
|
||||
"href" : "/api/resellers/?id=1"
|
||||
},
|
||||
{
|
||||
"href" : "/api/resellers/?id=2"
|
||||
}
|
||||
],
|
||||
"profile" : {
|
||||
"href" : "http://example.com/"
|
||||
},
|
||||
"self" : {
|
||||
"href" : "/api/contacts/"
|
||||
}
|
||||
}
|
||||
}',
|
||||
];
|
||||
INCLUDE helpers/api_req_res.tt request=request response=response;
|
||||
-%]
|
||||
</p>
|
||||
|
||||
<h4>Create a new <i>contacts</i> entry</h4>
|
||||
<p>
|
||||
[%
|
||||
cmd = 'curl -i -X POST -H \'Connection: close\' -E NGCP-API-client-certificate-1385650532.pem --cacert ca-cert.pem https://example.org:1443/api/contacts/ --data-binary \'{ "firstname": "John", "lastname": "Doe", "email": "john.doe@example.org", "city": null, "company": null, "country": null, "phonenumber": null, "postcode": null, "street": null, "_links" : { "http://purl.org/sipwise/ngcp-api/#rel-resellers": { "href": "/api/resellers/?id=1" } } }\' -H \'Content-Type: application/hal+json\'';
|
||||
INCLUDE helpers/api_command.tt cmd=cmd;
|
||||
|
||||
request = [
|
||||
'POST /api/contacts/ HTTP/1.1',
|
||||
'Content-Type: application/hal+json',
|
||||
'',
|
||||
'{
|
||||
"firstname": "John",
|
||||
"lastname": "Doe",
|
||||
"email": "john.doe@example.org",
|
||||
"city": null,
|
||||
"company": null,
|
||||
"country": null,
|
||||
"phonenumber": null,
|
||||
"postcode": null,
|
||||
"street": null,
|
||||
"_links" : {
|
||||
"http://purl.org/sipwise/ngcp-api/#rel-resellers": {
|
||||
"href": "/api/resellers/?id=1"
|
||||
}
|
||||
}
|
||||
}',
|
||||
];
|
||||
response = [
|
||||
'HTTP/1.1 201 Created',
|
||||
'Location: /api/contacts/?id=10',
|
||||
];
|
||||
|
||||
INCLUDE helpers/api_req_res.tt request=request response=response;
|
||||
-%]
|
||||
</p>
|
||||
|
||||
<h4>Update an existing <i>contacts</i> entry</h4>
|
||||
<p>
|
||||
[%
|
||||
cmd = 'curl -i -X PUT -H \'Connection: close\' -E NGCP-API-client-certificate-1385650532.pem --cacert ca-cert.pem https://example.org:1443/api/contacts/?id=10 --data-binary \'{ "firstname": "John", "lastname": "Doe", "email": "john.doe@example.org", "city": null, "company": null, "country": null, "phonenumber": null, "postcode": null, "street": null, "_links" : { "http://purl.org/sipwise/ngcp-api/#rel-resellers": { "href": "/api/resellers/?id=1" } } }\' -H \'Content-Type: application/hal+json\' -H \'If-Match: *\' -H \'Prefer: return=minimal\'';
|
||||
INCLUDE helpers/api_command.tt cmd=cmd extended=1;
|
||||
|
||||
request = [
|
||||
'PUT /api/contacts/?id=10 HTTP/1.1',
|
||||
'Content-Type: application/hal+json',
|
||||
'If-Match: *',
|
||||
'Prefer: return=minimal',
|
||||
'',
|
||||
'{
|
||||
"firstname": "John",
|
||||
"lastname": "Doe",
|
||||
"email": "john.doe@other.example.org",
|
||||
"city": null,
|
||||
"company": null,
|
||||
"country": null,
|
||||
"phonenumber": null,
|
||||
"postcode": null,
|
||||
"street": null,
|
||||
"_links" : {
|
||||
"http://purl.org/sipwise/ngcp-api/#rel-resellers": {
|
||||
"href": "/api/resellers/?id=1"
|
||||
}
|
||||
}
|
||||
}',
|
||||
];
|
||||
response = [
|
||||
'HTTP/1.1 204 No Content',
|
||||
'Preference-Applied: return=minimal',
|
||||
];
|
||||
|
||||
INCLUDE helpers/api_req_res.tt request=request response=response;
|
||||
-%]
|
||||
</p>
|
||||
|
||||
<h4>Update specific fields of an existing <i>contacts</i> entry</h4>
|
||||
<p>
|
||||
[%
|
||||
cmd = 'curl -i -X PATCH -H \'Connection: close\' -E NGCP-API-client-certificate-1385650532.pem --cacert ca-cert.pem https://example.org:1443/api/contacts/?id=10 --data-binary \'[ { "op": "replace", "path": "/email", "value": "other.john.doe@example.org" } ]\' -H \'Content-Type: application/json-patch+json\' -H \'If-Match: *\' -H \'Prefer: return=minimal\'';
|
||||
INCLUDE helpers/api_command.tt cmd=cmd extended=1;
|
||||
|
||||
request = [
|
||||
'PATCH /api/contacts/?id=10 HTTP/1.1',
|
||||
'Content-Type: application/json-patch+json',
|
||||
'If-Match: *',
|
||||
'Prefer: return=minimal',
|
||||
'',
|
||||
'[
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/email",
|
||||
"value": "other.john.doe@example.org"
|
||||
},
|
||||
{
|
||||
"op": "replace",
|
||||
"path": "/street",
|
||||
"value": "Some Street"
|
||||
}
|
||||
]',
|
||||
];
|
||||
response = [
|
||||
'HTTP/1.1 204 No Content',
|
||||
'Preference-Applied: return=minimal',
|
||||
];
|
||||
|
||||
INCLUDE helpers/api_req_res.tt request=request response=response;
|
||||
-%]
|
||||
</p>
|
||||
|
||||
|
||||
</div>
|
||||
[% # vim: set tabstop=4 syntax=html expandtab: -%]
|
||||
@ -0,0 +1,17 @@
|
||||
<h2 id="[% id %]">
|
||||
[% IF uri -%]
|
||||
<a href="[% uri %]" rel="collection">
|
||||
[% END -%]
|
||||
[% title %]
|
||||
[% IF uri -%]
|
||||
</a>
|
||||
[% END -%]
|
||||
</h2>
|
||||
|
||||
<h3><a href="#iana-relations">standard link relations</a></h3>
|
||||
<ul>
|
||||
<li id="self">self</li>
|
||||
<li id="collection">collection</li>
|
||||
<li id="item">item</li>
|
||||
</ul>
|
||||
[% # vim: set tabstop=4 syntax=html expandtab: -%]
|
||||
@ -0,0 +1,29 @@
|
||||
<h5>Example command</h5>
|
||||
<code>[% cmd %]</code>
|
||||
|
||||
[% IF extended -%]
|
||||
<p>
|
||||
Note that you need to pass the following additional headers for this request:
|
||||
<ul>
|
||||
<li><b>If-Match</b>
|
||||
<p>This header is used to verify the cache integrity of a resource. If two instances are retrieving the same resource using GET, and both are updating that resource, the instance doing the second update will have wrong assumptions about the current content of the resource (as it has been updated in the meanwhile). Therefore, an <b>ETag</b> header is passed to the client in the response to the GET request, and this value needs to be put into the <b>If-Match</b> header for subsequent operations. If the resource has been modified in the meanwhile, the API responds with a <b>412 Precondition Failed</b>, telling the client to perform another GET and retry the update. The following values can be passed in the <b>If-Match</b> header:
|
||||
<ul>
|
||||
<li><b>*</b> tells the server to forcefully override the resource, no matter whether the resource has been changed in the meanwhile or not. <i>This is useful for testing, but should <b>NOT</b> be used in production code!</i></li>
|
||||
<li>the value of the <b>ETag</b> header of a previous GET request. This ensures data integrity, and if the API responds with <b>412 Precondition Failed</b>, the client should GET the resource again, validate the result and retry the operation if necessary.</li>
|
||||
</ul>
|
||||
</p>
|
||||
</li>
|
||||
|
||||
<li><b>Prefer</b>
|
||||
<p>This header tells the API which type of response it expects. The following values are possible:
|
||||
<ul>
|
||||
<li><b>return=minimal</b> tells the API to respond with a <b>204 No Content</b> if the operation has been performed successfully, without returning the updated resource in the body.</li>
|
||||
<li><b>return=representation</b> will let the API respond with <b>200 OK</b> with the full representation of the updated resource in the body.</li>
|
||||
</ul>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</p>
|
||||
[% END -%]
|
||||
|
||||
[% # vim: set tabstop=4 syntax=html expandtab: -%]
|
||||
@ -0,0 +1,14 @@
|
||||
<h5>Example Request and Response</h5>
|
||||
<table>
|
||||
<tr><th>Request</th><th>Response</th></tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>[% FOR r IN request; r _ "\n"; END %]</code>
|
||||
</td>
|
||||
<td>
|
||||
<code>[% FOR r IN response; r _ "\n"; END %]</code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
[% # vim: set tabstop=4 syntax=html expandtab: -%]
|
||||