This is an automated email from the ASF dual-hosted git repository. dklco pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git
commit 4725823f4d275a5193309fb50629a3d5a848e481 Author: Dan Klco <[email protected]> AuthorDate: Tue Oct 22 10:04:05 2019 -0400 Abstracting the "taxonomy" field out to a more generic label field which can be used for different use cases --- ui/src/main/frontend/js/cms.taxonomy.js | 20 +++---- .../components/editor/fields/labelfield.json | 4 ++ .../components/editor/fields/labelfield/field.jsp | 47 ++++++++++++++++ .../editor/fields/labelfield/options.jsp | 20 +++++++ .../components/editor/fields/labelfield/values.jsp | 20 +++++++ .../components/editor/fields/taxonomy.json | 2 +- .../components/editor/fields/taxonomy/field.jsp | 62 ---------------------- .../components/editor/fields/taxonomy/options.jsp | 26 +++++++++ .../components/editor/fields/taxonomy/values.jsp | 28 ++++++++++ 9 files changed, 156 insertions(+), 73 deletions(-) diff --git a/ui/src/main/frontend/js/cms.taxonomy.js b/ui/src/main/frontend/js/cms.taxonomy.js index 5687368..c4f4445 100644 --- a/ui/src/main/frontend/js/cms.taxonomy.js +++ b/ui/src/main/frontend/js/cms.taxonomy.js @@ -19,19 +19,19 @@ /* eslint-env browser, es6 */ (function (rava) { 'use strict'; - rava.bind('.taxonomy', { + rava.bind('.labelfield', { events: { - '.taxonomy__add, .taxonomy__add *': { + '.labelfield__add, .labelfield__add *': { click: function (event) { event.preventDefault(); event.stopPropagation(); var context = this, span = document.createElement('span'), - val = context.querySelector('.taxonomy__field input').value, + val = context.querySelector('.labelfield__field input').value, found = false, title = context.querySelector('option[value="' + val + '"]').innerText; - span.innerHTML = context.querySelector('.taxonomy__template').innerHTML; - context.querySelectorAll('.taxonomy__item input').forEach(function (el) { + span.innerHTML = context.querySelector('.labelfield__template').innerHTML; + context.querySelectorAll('.labelfield__item input').forEach(function (el) { if (el.value === val) { found = true; } @@ -42,21 +42,21 @@ span.querySelector('input').value = val; if (title !== '') { - span.querySelector('.taxonomy__title').innerText = title; - this.closest('.taxonomy').querySelector('.taxonomy__container').appendChild(span); - context.querySelector('.taxonomy__field input').value = ''; + span.querySelector('.labelfield__title').innerText = title; + this.closest('.labelfield').querySelector('.labelfield__container').appendChild(span); + context.querySelector('.labelfield__field input').value = ''; } } } } }); - rava.bind('.taxonomy__item, .taxonomy__item *', { + rava.bind('.labelfield__item, .labelfield__item *', { events: { click: function () { event.preventDefault(); event.stopPropagation(); - this.closest('.taxonomy__item').remove(); + this.closest('.labelfield__item').remove(); } } }); diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield.json new file mode 100644 index 0000000..747e8fd --- /dev/null +++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield.json @@ -0,0 +1,4 @@ +{ + "jcr:primaryType": "nt:unstructured", + "sling:resourceSuperType" : "sling-cms/components/editor/fields/base" +} \ No newline at end of file diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/field.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/field.jsp new file mode 100644 index 0000000..d21b132 --- /dev/null +++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/field.jsp @@ -0,0 +1,47 @@ +<%-- /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ --%> + <%@include file="/libs/sling-cms/global.jsp"%> + <div class="labelfield"> + <fieldset disabled="disabled" class="labelfield__template is-hidden"> + <a class="button labelfield__item"> + <input type="hidden" name="${properties.name}" value="" /> + <span class="labelfield__title"> + </span> + <span class="jam jam-close"></span> + </a> + </fieldset> + <div class="labelfield__field field has-addons"> + <div class="control is-expanded"> + <input class="input" type="text" ${required} ${disabled} id="${properties.name}" list="labelfield-${fn:replace(resource.name,':','-')}" autocomplete="off" /> + </div> + <div class="control"> + <button class="labelfield__add button"> + <span class="jam jam-plus"> + <span class="is-vhidden"> + Add + </span> + </span> + </button> + </div> + </div> + <div class="labelfield__container"> + <sling:call script="values.jsp" /> + </div> + <sling:call script="options" /> +</div> \ No newline at end of file diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/options.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/options.jsp new file mode 100644 index 0000000..60ace42 --- /dev/null +++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/options.jsp @@ -0,0 +1,20 @@ +<%-- /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ --%> + <%@include file="/libs/sling-cms/global.jsp"%> + <%-- Load the options --%> \ No newline at end of file diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/values.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/values.jsp new file mode 100644 index 0000000..2ae2730 --- /dev/null +++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/labelfield/values.jsp @@ -0,0 +1,20 @@ +<%-- /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ --%> + <%@include file="/libs/sling-cms/global.jsp"%> + <%-- Load the values for the current field --%> \ No newline at end of file diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy.json index f42ffde..782a403 100644 --- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy.json +++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy.json @@ -1,6 +1,6 @@ { "jcr:primaryType": "sling:Component", - "sling:resourceSuperType" : "sling-cms/components/editor/fields/base", + "sling:resourceSuperType" : "sling-cms/components/editor/fields/labelfield", "componentType": "SlingCMS-FieldConfig", "jcr:title": "Sling CMS - Taxonomy Field" } \ No newline at end of file diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/field.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/field.jsp deleted file mode 100644 index c82bb68..0000000 --- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/field.jsp +++ /dev/null @@ -1,62 +0,0 @@ -<%-- /* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ --%> - <%@include file="/libs/sling-cms/global.jsp"%> - <div class="taxonomy"> - <fieldset disabled="disabled" class="taxonomy__template is-hidden"> - <a class="button taxonomy__item"> - <input type="hidden" name="${properties.name}" value="" /> - <span class="taxonomy__title"> - </span> - <span class="jam jam-close"></span> - </a> - </fieldset> - <div class="taxonomy__field field has-addons"> - <div class="control is-expanded"> - <input class="input" type="text" ${required} ${disabled} id="${properties.name}" list="taxonomy-${fn:replace(resource.name,':','-')}" autocomplete="off" /> - </div> - <div class="control"> - <button class="taxonomy__add button"> - <span class="jam jam-plus"> - <span class="is-vhidden"> - Add - </span> - </span> - </button> - </div> - </div> - <div class="taxonomy__container"> - <c:forEach var="item" items="${value}"> - <a class="button taxonomy__item"> - <input type="hidden" name="${properties.name}" value="${item}" /> - <span class="taxonomy__title"> - ${sling:encode(sling:getResource(resourceResolver,item).valueMap['jcr:title'],'HTML')} - </span> - <span class="jam jam-close"></span> - </a> - </c:forEach> - </div> - - <sling:getCAConfigResource resource="${slingRequest.requestPathInfo.suffixResource}" bucket="site" name="settings" var="sitesettings" /> - <datalist id="taxonomy-${fn:replace(resource.name,':','-')}"> - <c:set var="query" value="SELECT * FROM [sling:Taxonomy] WHERE ISDESCENDANTNODE([${not empty properties.basePath ? properties.basePath : sitesettings.valueMap.taxonomyroot}])" /> - <c:forEach var="taxonomy" items="${sling:findResources(resourceResolver,query,'JCR-SQL2')}"> - <option value="${taxonomy.path}">${taxonomy.valueMap['jcr:title']}</option> - </c:forEach> - </datalist> -</div> \ No newline at end of file diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/options.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/options.jsp new file mode 100644 index 0000000..0a99d81 --- /dev/null +++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/options.jsp @@ -0,0 +1,26 @@ +<%-- /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ --%> +<%@include file="/libs/sling-cms/global.jsp"%> +<sling:getCAConfigResource resource="${slingRequest.requestPathInfo.suffixResource}" bucket="site" name="settings" var="sitesettings" /> +<datalist id="taxonomy-${fn:replace(resource.name,':','-')}"> + <c:set var="query" value="SELECT * FROM [sling:Taxonomy] WHERE ISDESCENDANTNODE([${not empty properties.basePath ? properties.basePath : sitesettings.valueMap.taxonomyroot}])" /> + <c:forEach var="taxonomy" items="${sling:findResources(resourceResolver,query,'JCR-SQL2')}"> + <option value="${taxonomy.path}">${taxonomy.valueMap['jcr:title']}</option> + </c:forEach> +</datalist> \ No newline at end of file diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/values.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/values.jsp new file mode 100644 index 0000000..a1e0b40 --- /dev/null +++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/fields/taxonomy/values.jsp @@ -0,0 +1,28 @@ +<%-- /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ --%> + <%@include file="/libs/sling-cms/global.jsp"%> +<c:forEach var="item" items="${value}"> + <a class="button taxonomy__item"> + <input type="hidden" name="${properties.name}" value="${item}" /> + <span class="taxonomy__title"> + ${sling:encode(sling:getResource(resourceResolver,item).valueMap['jcr:title'],'HTML')} + </span> + <span class="jam jam-close"></span> + </a> +</c:forEach> \ No newline at end of file
