diff --git a/slate/source/includes/endpoint-version-schedule/index.html.md b/slate/source/includes/endpoint-version-schedule/index.html.md index eb0d4059..1a75eb8f 100644 --- a/slate/source/includes/endpoint-version-schedule/index.html.md +++ b/slate/source/includes/endpoint-version-schedule/index.html.md @@ -55,8 +55,39 @@ These dates may be subject to change depending upon new or changed legislative a | **Y24 #4** | 09/09/2024 | 0 | | **Y24 #5** | 11/11/2024 | 0 | +
+
+
+ Obligations @ +
+ +
+
Collapse obligations
+ + +
+ +
+ × +
+ # Endpoint Version Schedule + The following tables describe the endpoint versions and the dates they become binding within the data standards. **Binding Date** indicates the dates the particular version of an endpoint becomes binding in the data standards. diff --git a/slate/source/includes/introduction/_intro.md b/slate/source/includes/introduction/_intro.md index 976ac85f..935c7e51 100644 --- a/slate/source/includes/introduction/_intro.md +++ b/slate/source/includes/introduction/_intro.md @@ -1,8 +1,6 @@ ```diff -The Version Delta tab can be used to see in context changes between -this version of the standards and the immediately previous version -of the standards. +The Version Delta tab can be used to see in context changes between this version of the standards and the immediately previous version of the standards. This text is an example of a new addition to the standards: + New text added here @@ -10,9 +8,7 @@ This text is an example of a new addition to the standards: This text is an example of text removed from the standards: - Old text removed -Note: changes to request and response payloads are listed at the -beginning of the relevant API section due to the documentation -being auto generated from OpenAPI specification files. +Note: changes to request and response payloads are listed at the beginning of the relevant API section due to the documentation being auto generated from OpenAPI specification files. ``` These standards have been developed as part of the Australian Government's introduction of the [Consumer Data Right](https://www.accc.gov.au/focus-areas/consumer-data-right "ACCC Consumer Data Right webpage") legislation to give Australians greater control over their data. diff --git a/slate/source/includes/releasenotes/releasenotes.1.17.0.html.md b/slate/source/includes/releasenotes/releasenotes.1.17.0.html.md index f926b8ae..9b072ff6 100644 --- a/slate/source/includes/releasenotes/releasenotes.1.17.0.html.md +++ b/slate/source/includes/releasenotes/releasenotes.1.17.0.html.md @@ -19,6 +19,7 @@ This release addresses the following change requests raised on [Standards Mainte - [Standards Maintenance Issue 503: Fix documentation defect for CDR Arrangement JWT method](https://github.com/ConsumerDataStandardsAustralia/standards-maintenance/issues/503) - [Standards Maintenance Issue 504: Correct Data Language for Contact Details (profile scope and individual claims)](https://github.com/ConsumerDataStandardsAustralia/standards-maintenance/issues/504) +- [Standards Maintenance Issue 482: JWT signing non-normative examples use unsupported signing algorithm)](https://github.com/ConsumerDataStandardsAustralia/standards-maintenance/issues/482) ### Decision Proposals @@ -31,8 +32,9 @@ This release addresses the following Decision Proposals published on [Standards] |Change|Description|Link| |------|-----------|----| +| Obligation date highlighting | Highlighting based on a date pickers has been added for the Endpoint versioning schedule to enhance documentation functionality. This feature allows users to select a target date and determine what obligations apply at that date. | [Endpoint versioning schedule](../../includes/endpoint-version-schedule/) | Obligation Dates Table | A series of fixed obligation milestones were agreed in Maintenance Iteration 10. This set of milestones will be used to pin breaking changes to a deterministic series of possible obligation dates. | [Obligation Dates]() | - +| Scrollable diffs and examples | Added previous and next buttons to support easy scrolling between all diffs and non-normative examples. This feature is context dependent on the tab being viewed | N/A | ## API End Points @@ -44,6 +46,8 @@ This release addresses the following Decision Proposals published on [Standards] |Change|Description|Link| |------|-----------|----| +| Self-signed JWT Client Authentication non-normative example | [**Standards Maintenance #482**](https://github.com/ConsumerDataStandardsAustralia/standards-maintenance/issues/482): Updated self-signed JWT client authentication non-normative example `alg` field from HS256 to PS256 | [Client Authentication](../../index.html#client-authentication) | +| CDR Arrangement Revocation End Point non-normative example | [**Standards Maintenance #482**](https://github.com/ConsumerDataStandardsAustralia/standards-maintenance/issues/482): Updated data recipient hosted CDR Arrangement Revocation End Point non-normative example `alg` field from HS256 to PS256 | [Security Endpoints](../../index.html#security-endpoints) | ## Consumer Experience diff --git a/slate/source/includes/security/_client_authentication.md b/slate/source/includes/security/_client_authentication.md index 651602fe..c25d9d9d 100644 --- a/slate/source/includes/security/_client_authentication.md +++ b/slate/source/includes/security/_client_authentication.md @@ -79,7 +79,7 @@ Authorization: Bearer eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyNDU2In0.ey ## Decoded Bearer token JWT { - "alg":"HS256", + "alg":"PS256", "typ":"JWT", "kid":"12456" } @@ -93,6 +93,12 @@ Authorization: Bearer eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyNDU2In0.ey } ``` +```diff +Updated self-signed JWT client authentication non-normative example `alg` field from HS256 to PS256 +``` + + + Data Recipient Software Products and Data Holders supporting the self-signed JWT authentication of clients using a signed JWT **MUST** do so according to the following requirements: diff --git a/slate/source/includes/security/endpoints/_cdr_arrangement_revocation.md b/slate/source/includes/security/endpoints/_cdr_arrangement_revocation.md index 9dfca93f..a59a4da9 100644 --- a/slate/source/includes/security/endpoints/_cdr_arrangement_revocation.md +++ b/slate/source/includes/security/endpoints/_cdr_arrangement_revocation.md @@ -88,7 +88,7 @@ Authorization: Bearer eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyNDU2In0.ey ## Decoded cdr_arrangement_jwt JWT { "typ": "JWT", - "alg": "HS256", + "alg": "PS256", "kid":"12456" } { @@ -96,6 +96,11 @@ Authorization: Bearer eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyNDU2In0.ey } ``` +```diff +Updated Data Recipient end point non-normative example `alg` field from HS256 to PS256 +``` + + **Data Recipient hosted endpoint** The location of the Data Recipient Software Product CDR Arrangement Revocation End Point is determined by the `RecipientBaseURI` provided by the Data Recipient Software Product in the client Software Statement Assertion (SSA). diff --git a/slate/source/javascripts/all_nosearch.js b/slate/source/javascripts/all_nosearch.js index 0d84e53f..ee7695b0 100755 --- a/slate/source/javascripts/all_nosearch.js +++ b/slate/source/javascripts/all_nosearch.js @@ -2,6 +2,8 @@ //= require ./app/_toc //= require ./app/_lang //= require ./app/_tooltips +//= require ./app/_datepicker +//= require ./app/_scroll $(function() { loadToc($('#toc'), '.toc-link', '.toc-list-h2', 10); diff --git a/slate/source/javascripts/app/_datepicker.js b/slate/source/javascripts/app/_datepicker.js new file mode 100644 index 00000000..e11f419d --- /dev/null +++ b/slate/source/javascripts/app/_datepicker.js @@ -0,0 +1,133 @@ +//= require ../lib/_jquery +//= require ../lib/_datepicker + +;(function () { + 'use strict'; + + $(init); + + function highlight(endDate, $participantObligations) { + + $participantObligations.each(function(index) { + if ( !isValidDate(endDate) ) { + $(this).removeClass(); + } else { + var bindingDateString = $(this).find("td").eq(5).text(); + var bindingDate = stringToDate(bindingDateString, 3,2,1); + + var retirementDateString = $(this).find("td").eq(6).text() + var retirementDate = stringToDate(retirementDateString, 3,2,1); + + //var deprecationDate = stringToDate($(this).find("td").eq(7).text(), 3,2,1); + + var today = new Date(); + var threeMonthsAgo = new Date(); threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3); + + // reset + var milestoneDate = isValidDate(endDate) ? endDate : today; + var decoration = ""; + $(this).removeClass(); + + // determine obligation decoration + if (isValidDate(retirementDate) && (milestoneDate >= retirementDate) ) { + decoration = "retired-obligation"; + } else if ( isValidDate(bindingDate) ) { + if ( milestoneDate >= bindingDate ) { + if (isValidDate(retirementDate) && milestoneDate < retirementDate) { + decoration = "deprecated-obligation"; + } else { + decoration = "active-obligation"; + } + } else if ( bindingDate <= threeMonthsAgo ) { + decoration = "emerging-obligation"; + } else if ( milestoneDate < bindingDate ) { + decoration = "future-obligation"; + } else { + decoration = "inactive-obligation"; + } + } + + $(this).addClass(decoration); + + } + }); + } + + function isValidDate(dateObject) { + return !isNaN(dateObject.valueOf()); + } + + function isDate(dateString, dayPosition=1, monthPosition=2, yearPosition=3) { + + var dateObject = stringToDate(dateString, dayPosition, monthPosition, yearPosition) + + return isValidDate(dateObject); + } + + + function stringToDate(dateString, dayPosition=1, monthPosition=2, yearPosition=3) { + if (Math.min(dayPosition, monthPosition, yearPosition) != 1 || + Math.max(dayPosition, monthPosition, yearPosition) != 3 ) { return new Date("NaN"); } + + if (!dateString) { return new Date("NaN"); } + + var dateParts = dateString.split(/(?:-|\/)+/); + + if (dateParts.length != 3) { return new Date("NaN"); } + + // month is 0-based, that's why we need dateParts[1] - 1 + return new Date(+dateParts[yearPosition-1], dateParts[monthPosition-1] - 1, +dateParts[dayPosition-1].replace(/\*|†|‡/g, "")); + } + + function eltToDate($dateObject) { + return isDate($dateObject.val()) ? $dateObject.datepicker('getDate') : new Date("NaN"); + } + + + function init() { + + $('.content table').addClass('obligations'); + var $participantObligations = $('.obligations tr'); + var $endDate = $('#end-date'); + + var options = { + autoHide: true, + language: 'en-GB', + format: 'dd/mm/yyyy' + } + + $endDate.datepicker(options); + + + $endDate.on('change', function () { + var endDate = eltToDate($endDate); + if ( isValidDate(endDate) ) { + $("#date-picker").addClass("date-chosen"); + $("#date-picker .cancel").removeClass("hide"); + $("#date-picker .cancel").show(); + } else { + $("#date-picker").removeClass("date-chosen"); + $("#date-picker .cancel").addClass("hide"); + $("#date-picker .cancel").hide(); + } + + highlight(endDate, $participantObligations); + }); + + $("#date-picker .cancel").on('click', function () { + $("#date-picker input").val(''); + $("#date-picker").removeClass("date-chosen"); + $("#date-picker .cancel").addClass("hide"); + $("#date-picker .cancel").hide(); + var endDate = eltToDate($endDate); + highlight(endDate, $participantObligations); + }); + + $(".collapse-obligations-toggle input").on('click', function () { + console.log(new Date().getTime()+": toggle"); + $(".obligations").toggleClass('collapse-obligations'); + }); + + } + +})(); diff --git a/slate/source/javascripts/app/_lang.js b/slate/source/javascripts/app/_lang.js index 85f611fb..2d328610 100755 --- a/slate/source/javascripts/app/_lang.js +++ b/slate/source/javascripts/app/_lang.js @@ -162,8 +162,13 @@ under the License. } } + // if we click on a language tab, activate that language $(function() { + $("blockquote").each(function() { + $(this).addClass("tab-examples"); + }); + $(".lang-selector a").on("click", function() { var language = $(this).data("language-name"); pushURL(language); diff --git a/slate/source/javascripts/app/_scroll.js b/slate/source/javascripts/app/_scroll.js new file mode 100644 index 00000000..a7af4bbc --- /dev/null +++ b/slate/source/javascripts/app/_scroll.js @@ -0,0 +1,89 @@ +;(function () { + 'use strict'; + + $(init); + + function scroll(classNames) { + var $allElements = {}; + $.each(classNames, function(index, value) { + $allElements[value] = {'elts': $('.tab-'+value), 'last': 0 }; + $allElements[value].last = $allElements[value].elts.length - 1; + }); + + + $("#scroll-next").click(function () { + var minDistance = Number.MAX_SAFE_INTEGER; + var $nextElement = null; + var currentPosition = $(window).scrollTop(); + + var $activeTab = $($('.lang-selector').find('.active')[0] || $('.lang-selector').find('.tab-selector').first()); + var tabKey = $activeTab.data('languageName'); + + if ($allElements[tabKey] !== undefined) { + var $elementList = $allElements[tabKey].elts; + + $elementList.each(function(index) { + + var delta = $(this).position().top - currentPosition - 40; + + if (delta >= 0 && delta < minDistance) { + minDistance = delta; + $nextElement = $(this); + } + }); + + if (!$nextElement) { $nextElement = $($elementList[0]); } + + if($nextElement.length) { + $('html, body').stop(true).animate({ + scrollTop: ($nextElement.offset().top - 30) + }, 800); + } + } + + return false; + }); + + $("#scroll-prev").click(function () { + var minDistance = Number.MAX_SAFE_INTEGER; + var $prevElement = null; + var currentPosition = $(window).scrollTop(); + var lastIndex = 0; + + + var $activeTab = $($('.lang-selector').find('.active')[0] || $('.lang-selector').find('.tab-selector').first()); + var tabKey = $activeTab.data('languageName'); + + if ($allElements[tabKey] !== undefined) { + var $elementList = $allElements[tabKey].elts; + lastIndex = $allElements[tabKey].last; + + $elementList.each(function(index) { + + var delta = currentPosition - 40 - $(this).position().top; + + if (delta >= 0 && delta < minDistance) { + minDistance = delta; + $prevElement = $(this); + } + }); + + if (!$prevElement) { $prevElement = $($elementList[lastIndex]); } + + if($prevElement.length) { + $('html, body').stop(true).animate({ + scrollTop: ($prevElement.offset().top - 30) + }, 800); + } + } + return false; + }); + } + + function init() { + + scroll(['examples', 'diff']); + + } + +})(); \ No newline at end of file diff --git a/slate/source/javascripts/lib/_datepicker.js b/slate/source/javascripts/lib/_datepicker.js new file mode 100644 index 00000000..bb787b44 --- /dev/null +++ b/slate/source/javascripts/lib/_datepicker.js @@ -0,0 +1,10 @@ +/*! + * Datepicker v1.0.10 + * https://fengyuanchen.github.io/datepicker + * + * Copyright 2014-present Chen Fengyuan + * Released under the MIT license + * + * Date: 2020-09-29T14:46:10.983Z + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).jQuery)}(this,function(k){"use strict";function s(t,e){for(var i=0;i
',offset:10,zIndex:1e3,filter:null,show:null,hide:null,pick:null},t="undefined"!=typeof window,e=t?window:{},i=t&&"ontouchstart"in e.document.documentElement,l="datepicker",r="click.".concat(l),h="focus.".concat(l),o="hide.".concat(l),c="keyup.".concat(l),d="pick.".concat(l),a="resize.".concat(l),u="scroll.".concat(l),p="show.".concat(l),f="touchstart.".concat(l),g="".concat(l,"-hide"),y={},m=0,v=1,w=2,D=Object.prototype.toString;function b(t){return"string"==typeof t}var C=Number.isNaN||e.isNaN;function $(t){return"number"==typeof t&&!C(t)}function x(t){return void 0===t}function F(t){return"date"===(e=t,D.call(e).slice(8,-1).toLowerCase())&&!C(t.getTime());var e}function M(a,s){for(var t=arguments.length,n=new Array(2i.getFullYear(),6===d&&(c=p)),!p&&s&&(p=!1===s.call(this.$element,u,"year"));var f=n+d===h,g=f?"year picked":"year";o.push(this.createItem({picked:f,disabled:p,text:n+d,view:p?"year disabled":g,highlighted:u.getFullYear()===r}))}this.$yearsPrev.toggleClass(a,l),this.$yearsNext.toggleClass(a,c),this.$yearsCurrent.toggleClass(a,!0).html("".concat(n+-5+t," - ").concat(n+6).concat(t)),this.$years.html(o.join(""))},renderMonths:function(){for(var t=this.options,e=this.startDate,i=this.endDate,a=this.viewDate,s=t.disabledClass||"",n=t.monthsShort,r=k.isFunction(t.filter)&&t.filter,h=a.getFullYear(),a=new Date,o=a.getFullYear(),l=a.getMonth(),c=this.date.getFullYear(),d=this.date.getMonth(),u=[],p=!1,f=!1,g=0;g<=11;g+=1){var y=new Date(h,g,1),m=!1;e&&(m=(p=y.getFullYear()===e.getFullYear())&&y.getMonth()i.getMonth()),!m&&r&&(m=!1===r.call(this.$element,y,"month"));var v=h===c&&g===d,w=v?"month picked":"month";u.push(this.createItem({disabled:m,picked:v,highlighted:h===o&&y.getMonth()===l,index:g,text:n[g],view:m?"month disabled":w}))}this.$yearPrev.toggleClass(s,p),this.$yearNext.toggleClass(s,f),this.$yearCurrent.toggleClass(s,p&&f).html(h+t.yearSuffix||""),this.$months.html(u.join(""))},renderDays:function(){var t,e=this.$element,i=this.options,a=this.startDate,s=this.endDate,n=this.viewDate,r=this.date,h=i.disabledClass,o=i.filter,l=i.months,c=i.weekStart,d=i.yearSuffix,u=n.getFullYear(),p=n.getMonth(),n=new Date,f=n.getFullYear(),g=n.getMonth(),y=n.getDate(),m=r.getFullYear(),v=r.getMonth(),w=r.getDate(),k=[],D=u,b=p,n=!1;0===p?(--D,b=11):--b,t=O(D,b);var C,r=new Date(u,p,1);for((C=r.getDay()-parseInt(c,10)%7)<=0&&(C+=7),a&&(n=r.getTime()<=a.getTime()),P=t-(C-1);P<=t;P+=1){var $=new Date(D,b,P),x=!1;a&&(x=$.getTime()=s.getTime()),P=1;P<=C;P+=1){var V=new Date(M,Y,P),T=M===m&&Y===v&&P===w,I=!1;s&&(I=V.getTime()>s.getTime()),!I&&o&&(I=!1===o.call(e,V,"day")),F.push(this.createItem({disabled:I,picked:T,highlighted:M===f&&Y===g&&V.getDate()===y,muted:!0,text:P,view:"day next"}))}for(var S=[],P=1;P<=t;P+=1){var N=new Date(u,p,P),j=!1;a&&(j=N.getTime()s.getTime()),!j&&o&&(j=!1===o.call(e,N,"day"));var q=u===m&&p===v&&P===w,A=q?"day picked":"day";S.push(this.createItem({disabled:j,picked:q,highlighted:u===f&&p===g&&N.getDate()===y,text:P,view:j?"day disabled":A}))}this.$monthPrev.toggleClass(h,n),this.$monthNext.toggleClass(h,c),this.$monthCurrent.toggleClass(h,n&&c).html(i.yearFirst?"".concat(u+d," ").concat(l[p]):"".concat(l[p]," ").concat(u).concat(d)),this.$days.html(k.join("")+S.join("")+F.join(""))}},A="".concat(l,"-top-left"),t="".concat(l,"-top-right"),W="".concat(l,"-bottom-left"),e="".concat(l,"-bottom-right"),z=[A,t,W,e].join(" "),J=function(){function i(t){var e=1a.getTime()&&(s=new Date(a)),this.endDate=a),this.date=s,this.viewDate=new Date(s),this.initialDate=new Date(this.date),this.bind(),(e.autoShow||this.inline)&&this.show(),e.autoPick&&this.pick()}},{key:"build",value:function(){var t,e,i;this.built||(this.built=!0,t=this.$element,e=this.options,i=k(e.template),this.$picker=i,this.$week=i.find(Y("week")),this.$yearsPicker=i.find(Y("years picker")),this.$yearsPrev=i.find(Y("years prev")),this.$yearsNext=i.find(Y("years next")),this.$yearsCurrent=i.find(Y("years current")),this.$years=i.find(Y("years")),this.$monthsPicker=i.find(Y("months picker")),this.$yearPrev=i.find(Y("year prev")),this.$yearNext=i.find(Y("year next")),this.$yearCurrent=i.find(Y("year current")),this.$months=i.find(Y("months")),this.$daysPicker=i.find(Y("days picker")),this.$monthPrev=i.find(Y("month prev")),this.$monthNext=i.find(Y("month next")),this.$monthCurrent=i.find(Y("month current")),this.$days=i.find(Y("days")),this.inline?k(e.container||t).append(i.addClass("".concat(l,"-inline"))):(k(document.body).append(i.addClass("".concat(l,"-dropdown"))),i.addClass(g).css({zIndex:parseInt(e.zIndex,10)})),this.renderWeek())}},{key:"unbuild",value:function(){this.built&&(this.built=!1,this.$picker.remove())}},{key:"bind",value:function(){var t=this.options,e=this.$element;k.isFunction(t.show)&&e.on(p,t.show),k.isFunction(t.hide)&&e.on(o,t.hide),k.isFunction(t.pick)&&e.on(d,t.pick),this.isInput&&e.on(c,k.proxy(this.keyup,this)),this.inline||(t.trigger?this.$trigger.on(r,k.proxy(this.toggle,this)):this.isInput?e.on(h,k.proxy(this.show,this)):e.on(r,k.proxy(this.show,this)))}},{key:"unbind",value:function(){var t=this.$element,e=this.options;k.isFunction(e.show)&&t.off(p,e.show),k.isFunction(e.hide)&&t.off(o,e.hide),k.isFunction(e.pick)&&t.off(d,e.pick),this.isInput&&t.off(c,this.keyup),this.inline||(e.trigger?this.$trigger.off(r,this.toggle):this.isInput?t.off(h,this.show):t.off(r,this.show))}},{key:"showView",value:function(t){var e=this.$yearsPicker,i=this.$monthsPicker,a=this.$daysPicker,s=this.format;if(s.hasYear||s.hasMonth||s.hasDay)switch(Number(t)){case w:i.addClass(g),a.addClass(g),s.hasYear?(this.renderYears(),e.removeClass(g),this.place()):this.showView(m);break;case v:e.addClass(g),a.addClass(g),s.hasMonth?(this.renderMonths(),i.removeClass(g),this.place()):this.showView(w);break;default:e.addClass(g),i.addClass(g),s.hasDay?(this.renderDays(),a.removeClass(g),this.place()):this.showView(v)}}},{key:"hideView",value:function(){!this.inline&&this.options.autoHide&&this.hide()}},{key:"place",value:function(){var t,e,i,a,s,n,r,h,o,l,c;this.inline||(o=this.$element,c=this.options,t=this.$picker,e=k(document).outerWidth(),i=k(document).outerHeight(),a=o.outerWidth(),s=o.outerHeight(),n=t.width(),r=t.height(),h=(l=o.offset()).left,o=l.top,l=parseFloat(c.offset),c=A,C(l)&&(l=10),r').concat(a.text,"")}},{key:"getValue",value:function(){var t=this.$element;return this.isInput?t.val():t.text()}},{key:"setValue",value:function(t){var e=0 <% language_tabs.each do |lang| %> <% if lang.is_a? Hash %> - <%= lang.values.first %> + <%= lang.values.first %> <% else %> - <%= lang %> + <%= lang %> <% end %> <% end %> <% end %> +
+ + +
diff --git a/slate/source/stylesheets/extends/_datepicker.scss b/slate/source/stylesheets/extends/_datepicker.scss new file mode 100644 index 00000000..3df676f6 --- /dev/null +++ b/slate/source/stylesheets/extends/_datepicker.scss @@ -0,0 +1,352 @@ +@import '../variables'; + +/*! + * Datepicker v1.0.10 + * https://fengyuanchen.github.io/datepicker + * + * Copyright 2014-present Chen Fengyuan + * Released under the MIT license + * + * Date: 2020-09-29T14:46:09.037Z + */.datepicker-container{background-color:#fff;direction:ltr;font-size:12px;left:0;line-height:30px;position:fixed;-webkit-tap-highlight-color:transparent;top:0;-ms-touch-action:none;touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:210px;z-index:-1}.datepicker-container:after,.datepicker-container:before{border:5px solid transparent;content:" ";display:block;height:0;position:absolute;width:0}.datepicker-dropdown{border:1px solid #ccc;-webkit-box-shadow:0 3px 6px #ccc;box-shadow:0 3px 6px #ccc;-webkit-box-sizing:content-box;box-sizing:content-box;position:absolute;z-index:1}.datepicker-inline{position:static}.datepicker-top-left,.datepicker-top-right{border-top-color:#39f}.datepicker-top-left:after,.datepicker-top-left:before,.datepicker-top-right:after,.datepicker-top-right:before{border-top:0;left:10px;top:-5px}.datepicker-top-left:before,.datepicker-top-right:before{border-bottom-color:#39f}.datepicker-top-left:after,.datepicker-top-right:after{border-bottom-color:#fff;top:-4px}.datepicker-bottom-left,.datepicker-bottom-right{border-bottom-color:#39f}.datepicker-bottom-left:after,.datepicker-bottom-left:before,.datepicker-bottom-right:after,.datepicker-bottom-right:before{border-bottom:0;bottom:-5px;left:10px}.datepicker-bottom-left:before,.datepicker-bottom-right:before{border-top-color:#39f}.datepicker-bottom-left:after,.datepicker-bottom-right:after{border-top-color:#fff;bottom:-4px}.datepicker-bottom-right:after,.datepicker-bottom-right:before,.datepicker-top-right:after,.datepicker-top-right:before{left:auto;right:10px}.datepicker-panel>ul{margin:0;padding:0;width:102%}.datepicker-panel>ul:after,.datepicker-panel>ul:before{content:" ";display:table}.datepicker-panel>ul:after{clear:both}.datepicker-panel>ul>li{background-color:#fff;cursor:pointer;float:left;height:30px;list-style:none;margin:0;padding:0;text-align:center;width:30px}.datepicker-panel>ul>li:hover{background-color:#e5f2ff}.datepicker-panel>ul>li.muted,.datepicker-panel>ul>li.muted:hover{color:#999}.datepicker-panel>ul>li.highlighted{background-color:#e5f2ff}.datepicker-panel>ul>li.highlighted:hover{background-color:#cce5ff}.datepicker-panel>ul>li.picked,.datepicker-panel>ul>li.picked:hover{color:#39f}.datepicker-panel>ul>li.disabled,.datepicker-panel>ul>li.disabled:hover{background-color:#fff;color:#ccc;cursor:default}.datepicker-panel>ul>li.disabled.highlighted,.datepicker-panel>ul>li.disabled:hover.highlighted{background-color:#e5f2ff}.datepicker-panel>ul>li[data-view="month next"],.datepicker-panel>ul>li[data-view="month prev"],.datepicker-panel>ul>li[data-view="year next"],.datepicker-panel>ul>li[data-view="year prev"],.datepicker-panel>ul>li[data-view="years next"],.datepicker-panel>ul>li[data-view="years prev"],.datepicker-panel>ul>li[data-view=next]{font-size:18px}.datepicker-panel>ul>li[data-view="month current"],.datepicker-panel>ul>li[data-view="year current"],.datepicker-panel>ul>li[data-view="years current"]{width:150px}.datepicker-panel>ul[data-view=months]>li,.datepicker-panel>ul[data-view=years]>li{height:52.5px;line-height:52.5px;width:52.5px}.datepicker-panel>ul[data-view=week]>li,.datepicker-panel>ul[data-view=week]>li:hover{background-color:#fff;cursor:default}.datepicker-hide{display:none} + +@media (min-width: $tablet-width) { + .content { + -webkit-transform: initial !important; + + .input-group-text { + padding: .375rem .75rem; + margin-bottom: 0; + font-size: 0.8rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: .25rem; + } + .input-group>.input-group-prepend>.input-group-text { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + #date-picker { + position: fixed; + right: 0; + top: 0; + z-index: 9999; + + &.date-chosen { + .cancel { + float: right; + display: block; + background-color: #ddd; + border-radius: 30px; + padding: 3px 4px 4px 4px; + z-index: 999; + right: 16px; + top: 16px; + position: absolute; + line-height: 8px; + font-size: 11px; + font-weight: bold; + color: #666; + cursor: pointer; + } + } + .cancel.hide { display: none; } + } + .input-group { + background: #fdfdfd; + padding: 13px 10px 10px 10px; + border: 1px solid #fdfdfd; + border-radius: 4px; + float: right; + } + .input-group>.form-control:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .input-group>input:not(:last-of-type) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .input-group>input:last-of-type { + padding-right: 22px; + } + .input-group>.form-control, .input-group>.form-control-plaintext { + position: relative; + min-width: 0; + margin-bottom: 0; + } + .form-control, .input-group-prepend { + float: left; + display: block; + z-index: 2; + position: relative; + + .input-group-text { + border-bottom: 1px solid #bbb; + } + } + .form-control { + display: block; + position: relative; + top: -3px; + left: -1px; + height: calc(0.8rem + 1px); + padding: .4rem; + font-size: 0.8rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: .25rem; + width: 6em; + border-left: 0; + transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; + border-bottom: 1px solid #bbb; + } + + .obligations tr.active-obligation td { + background-color: rgb(205, 249, 205) !important; + border-top-color: lightgreen; + font-weight: bold; + color: green; + } + .obligations tr.inactive-obligation td { + background-color: #eee !important; + border-top-color: #ccc; + color: #999; + font-weight: normal; + + .method.get, .method.delete, .method.put, .method.post {background-color: #ccc !important;} + } + .obligations tr.retired-obligation td { + background-color: #eee !important; + border-top-color: #ccc; + color: #999; + font-weight: normal; + text-decoration: line-through; + font-style: italic; + .method.get, .method.delete, .method.put, .method.post {background-color: #ccc !important;} + } + .obligations tr.retired-obligation-red td { + background-color: rgb(252, 234, 234) !important; + border-top-color: lightpink; + color: red; + text-decoration: line-through; + font-style: italic; + font-weight: normal; + .method.get, .method.delete, .method.put, .method.post {background-color: lightpink !important;} + } + .obligations tr.deprecated-obligation td { + background-color: rgb(255, 238, 205) !important; + border-top-color: orange; + font-weight: normal; + } + .obligations tr.future-obligation td { + background-color: rgb(177, 199, 250) !important; + border-top-color: darkblue; + font-style: italic; + font-weight: normal; + } + + .obligations.collapse-obligations { + tr.inactive-obligation td, + tr.retired-obligation td, + tr.future-obligation { + display:none; + } + } + .obligations tr.emerging-obligation td { + background-color: #6ff7ed !important; + border-top-color: darkblue; + font-style: italic; + font-weight: normal; + } + + /* basic positioning */ + .legend { width: 30%; } + .input-group .legend-title { + text-transform: uppercase; + font-size: 0.6em; + font-weight: bold; + background-color: #d3d7da; + line-height: 20px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + clear: both; + position: relative; + top: -5px; + padding: 2px 0 4px; + border: 1px solid #ccc; + border-top-width: 0; + + a {color: #666; text-decoration: none; padding: 0 0 2px 12px;} + } + + .lightbox .legend-title { + text-transform: uppercase; + font-size: 0.8em; + background: #ddd; + padding: 10px 0 8px 12px; + border-bottom: 1px solid #999; + font-weight: bold; + line-height: 20px; + } + + .legend ul { + list-style: none; + margin: 10vh auto 0; + width: 100%; + margin-block-start: 0; + margin-block-end: 0; + margin-inline-start: 0; + padding-inline-start: 0; + } + .legend li { float: left; margin-right: 10px; background: #fdfdfd;width: 100%; padding: 12px 6px 8px 12px; } + .legend li span { border: 1px solid; border-radius: 3px; float: left; width: 12px; height: 12px; margin: 4px 6px 2px 2px; } + /* your colors */ + .legend .legend-future-obligations { background-color: rgb(177, 199, 250) !important; border-color: darkblue; } + .legend .legend-emerging-obligations { background-color: #6ff7ed !important; border-color: darkblue; } + .legend .legend-active-obligations { background-color: rgb(205, 249, 205) !important; border-color: lightgreen; } + .legend .legend-deprecated-obligations { background-color: rgb(255, 238, 205) !important; border-color: orange; } + .legend .legend-retired-obligations { background-color: #eee !important; border-color: #ccc; } + + /** LIGHTBOX MARKUP **/ + + .lightbox { + /* Default to hidden */ + display: none; + + /* Overlay entire screen */ + position: fixed; + z-index: 99999; + top: 0; + left: 0; + right: 0; + bottom: 0; + + /* A bit of padding around image */ + padding: 1em; + + /* Translucent background */ + background: rgba(0, 0, 0, 0.8); + } + /* Unhide the lightbox when it's the target */ + .lightbox:target { + display: block; + } + + .lightbox .legend { + /* Full width and height */ + width: 50%; + height: auto; + background-position: center; + background-repeat: no-repeat; + background-size: contain; + margin: 0 auto; + margin: 10vh auto 0; + border-radius: 3px; + overflow: hidden; + border: 1px solid #000; + box-shadow: 0 0 8px 2px rgba(0,0,0,0.8); + } + + .defocus { + width: 100%; + height: 100%; + display: block; + position: absolute; + z-index: 1; + background: none; + text-decoration: none; + } + + .collapse-obligations-toggle { + background-color: #d3d7da; + border: 1px solid #ccc; + clear:both; + top: -5px; + position: relative; + padding: 14px 0 10px 12px; + + .toggle-title { + text-transform: uppercase; + font-size: 0.6em; + font-weight: bold; + line-height: 0.6em; + color: #666; + } + + /* The switch - the box around the slider */ + .switch { + position: absolute; + display: inline-block; + width: 30px; + height: 17px; + top: 8px; + right: 0.5em; + } + + /* Hide default HTML checkbox */ + .switch input { + opacity: 0; + width: 0; + height: 0; + } + + /* The slider */ + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #999; + -webkit-transition: .4s; + transition: .4s; + } + + .slider:before { + position: absolute; + content: ""; + height: 13px; + width: 13px; + left: 2px; + bottom: 2px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; + } + + input:checked + .slider { + background-color: #2196F3; + } + + input:focus + .slider { + box-shadow: 0 0 1px #2196F3; + } + + input:checked + .slider:before { + -webkit-transform: translateX(13px); + -ms-transform: translateX(13px); + transform: translateX(13px); + } + + /* Rounded sliders */ + .slider.round { + border-radius: 17px; + } + + .slider.round:before { + border-radius: 50%; + } + } + } +} \ No newline at end of file diff --git a/slate/source/stylesheets/extends/_tabs.scss b/slate/source/stylesheets/extends/_tabs.scss index 2f22c817..de3260f7 100644 --- a/slate/source/stylesheets/extends/_tabs.scss +++ b/slate/source/stylesheets/extends/_tabs.scss @@ -95,3 +95,49 @@ $tab-border-color: lightgray !default; } } +.tab-diff code { + word-wrap: break-word; + white-space: pre-wrap; + word-break: break-word; +} + + +.scroll-buttons { + float: right; + position: fixed; + right: 0.5em; + z-index: 99999; +} + +a.scroll-button { + text-decoration: none !important; + display: inline-block !important; + padding: 0 9px !important; + margin: 3px 3px 3px 0; + line-height: 24px !important; + font-size: 12px; + font-weight: bold; + background-color: #999; + color: white !important; +} + +a.scroll-button:hover { + background-color: #f1f1f1; + color: black !important; +} + +.scroll-button.round { + border-radius: 50%; +} + +.scroll-buttons { + display: none; +} + +@media (min-width: $tablet-width) { + .scroll-buttons { + display: block; + } +} + + diff --git a/slate/source/stylesheets/extends/images/ui-icons_444444_256x240.png b/slate/source/stylesheets/extends/images/ui-icons_444444_256x240.png new file mode 100644 index 00000000..237ad87e Binary files /dev/null and b/slate/source/stylesheets/extends/images/ui-icons_444444_256x240.png differ diff --git a/slate/source/stylesheets/extends/images/ui-icons_555555_256x240.png b/slate/source/stylesheets/extends/images/ui-icons_555555_256x240.png new file mode 100644 index 00000000..2b7de01a Binary files /dev/null and b/slate/source/stylesheets/extends/images/ui-icons_555555_256x240.png differ diff --git a/slate/source/stylesheets/extends/images/ui-icons_777620_256x240.png b/slate/source/stylesheets/extends/images/ui-icons_777620_256x240.png new file mode 100644 index 00000000..1224286b Binary files /dev/null and b/slate/source/stylesheets/extends/images/ui-icons_777620_256x240.png differ diff --git a/slate/source/stylesheets/extends/images/ui-icons_777777_256x240.png b/slate/source/stylesheets/extends/images/ui-icons_777777_256x240.png new file mode 100644 index 00000000..4e613071 Binary files /dev/null and b/slate/source/stylesheets/extends/images/ui-icons_777777_256x240.png differ diff --git a/slate/source/stylesheets/extends/images/ui-icons_cc0000_256x240.png b/slate/source/stylesheets/extends/images/ui-icons_cc0000_256x240.png new file mode 100644 index 00000000..75e410c6 Binary files /dev/null and b/slate/source/stylesheets/extends/images/ui-icons_cc0000_256x240.png differ diff --git a/slate/source/stylesheets/extends/images/ui-icons_ffffff_256x240.png b/slate/source/stylesheets/extends/images/ui-icons_ffffff_256x240.png new file mode 100644 index 00000000..c05e3359 Binary files /dev/null and b/slate/source/stylesheets/extends/images/ui-icons_ffffff_256x240.png differ diff --git a/slate/source/stylesheets/screen.css.scss b/slate/source/stylesheets/screen.css.scss index 231517fe..23c8f176 100755 --- a/slate/source/stylesheets/screen.css.scss +++ b/slate/source/stylesheets/screen.css.scss @@ -3,6 +3,7 @@ @import 'variables'; @import 'icon-font'; @import 'extends/tabs'; +@import 'extends/datepicker'; // @import 'rtl'; // uncomment to switch to RTL format /* @@ -926,3 +927,4 @@ content: '<<< END DISCUSS?'; } } } + diff --git a/swagger-gen/api/cds_dcr.json b/swagger-gen/api/cds_dcr.json index 4bf736bd..4089c574 100644 --- a/swagger-gen/api/cds_dcr.json +++ b/swagger-gen/api/cds_dcr.json @@ -104,12 +104,10 @@ "type": "string" } } - }, - "content": {} + } }, "403": { - "description": "The client does not have permission to read, update or delete the Client", - "content": {} + "description": "The client does not have permission to read, update or delete the Client" } }, "x-scopes": [ @@ -185,12 +183,10 @@ "type": "string" } } - }, - "content": {} + } }, "403": { - "description": "The client does not have permission to read, update or delete the Client", - "content": {} + "description": "The client does not have permission to read, update or delete the Client" } }, "x-scopes": [ @@ -227,8 +223,7 @@ ], "responses": { "204": { - "description": "Client deleted", - "content": {} + "description": "Client deleted" }, "401": { "description": "Request failed due to unknown or invalid Client or invalid access token", @@ -240,16 +235,13 @@ "type": "string" } } - }, - "content": {} + } }, "403": { - "description": "The client does not have permission to read, update or delete the Client", - "content": {} + "description": "The client does not have permission to read, update or delete the Client" }, "405": { - "description": "Method Not Allowed. The requested method is unsupported", - "content": {} + "description": "Method Not Allowed. The requested method is unsupported" } }, "x-scopes": [ @@ -565,16 +557,13 @@ "type": "string" } } - }, - "content": {} + } }, "403Error": { - "description": "The client does not have permission to read, update or delete the Client", - "content": {} + "description": "The client does not have permission to read, update or delete the Client" }, "405Error": { - "description": "Method Not Allowed. The requested method is unsupported", - "content": {} + "description": "Method Not Allowed. The requested method is unsupported" } }, "parameters": { diff --git a/swagger-gen/api/cds_register.json b/swagger-gen/api/cds_register.json index bef09210..b13988a4 100644 --- a/swagger-gen/api/cds_register.json +++ b/swagger-gen/api/cds_register.json @@ -430,8 +430,7 @@ "type": "string" } } - }, - "content": {} + } }, "400": { "description": "Missing Required Header / Invalid Version / Invalid Path Parameter", @@ -541,8 +540,7 @@ "type": "string" } } - }, - "content": {} + } }, "400": { "description": "Missing Required Header / Invalid Version / Invalid Path Parameter", @@ -652,8 +650,7 @@ "type": "string" } } - }, - "content": {} + } }, "400": { "description": "Missing Required Header / Invalid Version / Invalid Path Parameter", @@ -763,8 +760,7 @@ "type": "string" } } - }, - "content": {} + } }, "400": { "description": "Missing Required Header / Invalid Version / Invalid Path Parameter", @@ -1666,8 +1662,7 @@ "type": "string" } } - }, - "content": {} + } }, "UnsupportedVersion": { "description": "Unsupported Version",