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 |
+
+
+
+
Legend
+
+ - Future: obligations that are due more than three months into the future.
+ - Emerging: obligations that are due within the next three months.
+ - Active: obligations that must currently be supported.
+ - Deprecated: obligations that are being phased out and have entered into a deprecation phase before being retired.
+ - Retired: obligations that have expired or are superceded and no longer need to be supported.
+
+
+
# 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,"").concat(i,">")}},{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 %>
+