diff --git a/components/lib/basecomponent/BaseComponent.vue b/components/lib/basecomponent/BaseComponent.vue index 67a5de8f6..1fd821c5c 100644 --- a/components/lib/basecomponent/BaseComponent.vue +++ b/components/lib/basecomponent/BaseComponent.vue @@ -2,6 +2,19 @@ import { ObjectUtils } from 'primevue/utils'; import { mergeProps } from 'vue'; +const inlineStyles = { + hiddenAccessible: { + border: '0', + clip: 'rect(0 0 0 0)', + height: '1px', + margin: '-1px', + overflow: 'hidden', + padding: '0', + position: 'absolute', + width: '1px' + } +}; + export default { name: 'BaseComponent', props: { @@ -37,6 +50,19 @@ export default { }, ptmo(obj = {}, key = '', params = {}) { return this.getPTValue(obj, key, params); + }, + css(key = '', params = {}) { + return !this.isUnstyled ? ObjectUtils.getItemValue(this.getOption(this.$options.style && this.$options.style.classes, key), { instance: this, props: this.$props, state: this.$data, ...params }) : undefined; + }, + style(key = '', when = true, params = {}) { + if (when) { + const self = ObjectUtils.getItemValue(this.getOption(this.$options.style && this.$options.style.inlineStyles, key), { instance: this, props: this.$props, state: this.$data, ...params }); + const base = ObjectUtils.getItemValue(this.getOption(inlineStyles, key), { instance: this, props: this.$props, state: this.$data, ...params }); + + return [base, self]; + } + + return undefined; } }, computed: { @@ -44,7 +70,7 @@ export default { return ObjectUtils.getItemValue(this.getOption(this.$primevue.config.pt, this.$.type.name), this.defaultsParams); }, defaultsParams() { - return { instance: this.$ }; + return { instance: this }; }, isUnstyled() { return this.unstyled !== undefined ? this.unstyled : this.$primevue.config.unstyled; diff --git a/components/lib/calendar/BaseCalendar.vue b/components/lib/calendar/BaseCalendar.vue new file mode 100644 index 000000000..ec1c41b6d --- /dev/null +++ b/components/lib/calendar/BaseCalendar.vue @@ -0,0 +1,459 @@ + diff --git a/components/lib/calendar/Calendar.vue b/components/lib/calendar/Calendar.vue index 4b77f242f..1b32769b8 100755 --- a/components/lib/calendar/Calendar.vue +++ b/components/lib/calendar/Calendar.vue @@ -1,12 +1,12 @@ - - diff --git a/components/lib/ripple/Ripple.js b/components/lib/ripple/Ripple.js index 90b31e0ba..d45f032f0 100644 --- a/components/lib/ripple/Ripple.js +++ b/components/lib/ripple/Ripple.js @@ -16,6 +16,7 @@ function create(el) { ink.className = 'p-ink'; ink.setAttribute('role', 'presentation'); ink.setAttribute('aria-hidden', 'true'); + ink.setAttribute('data-p-ink', 'true'); el.appendChild(ink); ink.addEventListener('animationend', onAnimationEnd); diff --git a/components/lib/utils/DomHandler.js b/components/lib/utils/DomHandler.js index d71a81018..2699b57ab 100755 --- a/components/lib/utils/DomHandler.js +++ b/components/lib/utils/DomHandler.js @@ -167,6 +167,12 @@ export default { return false; }, + addStyles(element, styles = {}) { + if (element) { + Object.entries(styles).forEach(([key, value]) => (element.style[key] = value)); + } + }, + find(element, selector) { return this.isElement(element) ? element.querySelectorAll(selector) : []; }, @@ -175,6 +181,32 @@ export default { return this.isElement(element) ? element.querySelector(selector) : null; }, + getAttribute(element, name) { + if (element) { + const value = element.getAttribute(name); + + if (!isNaN(value)) { + return +value; + } + + if (value === 'true' || value === 'false') { + return value === 'true'; + } + + return value; + } + + return undefined; + }, + + isAttributeEquals(element, name, value) { + return element ? this.getAttribute(element, name) === value : false; + }, + + isAttributeNotEquals(element, name, value) { + return !this.isAttributeEquals(element, name, value); + }, + getHeight(el) { if (el) { let height = el.offsetHeight; @@ -203,15 +235,15 @@ export default { absolutePosition(element, target) { if (element) { - let elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element); - let elementOuterHeight = elementDimensions.height; - let elementOuterWidth = elementDimensions.width; - let targetOuterHeight = target.offsetHeight; - let targetOuterWidth = target.offsetWidth; - let targetOffset = target.getBoundingClientRect(); - let windowScrollTop = this.getWindowScrollTop(); - let windowScrollLeft = this.getWindowScrollLeft(); - let viewport = this.getViewport(); + const elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element); + const elementOuterHeight = elementDimensions.height; + const elementOuterWidth = elementDimensions.width; + const targetOuterHeight = target.offsetHeight; + const targetOuterWidth = target.offsetWidth; + const targetOffset = target.getBoundingClientRect(); + const windowScrollTop = this.getWindowScrollTop(); + const windowScrollLeft = this.getWindowScrollLeft(); + const viewport = this.getViewport(); let top, left; if (targetOffset.top + targetOuterHeight + elementOuterHeight > viewport.height) { @@ -236,7 +268,7 @@ export default { relativePosition(element, target) { if (element) { - let elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element); + const elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element); const targetHeight = target.offsetHeight; const targetOffset = target.getBoundingClientRect(); const viewport = this.getViewport();