/*! elementor-pro - v3.28.0 - 30-03-2025 */ "use strict"; (self["webpackChunkelementor_pro"] = self["webpackChunkelementor_pro"] || []).push([["woocommerce-checkout-page"],{ /***/ "../modules/woocommerce/assets/js/frontend/handlers/base.js": /*!******************************************************************!*\ !*** ../modules/woocommerce/assets/js/frontend/handlers/base.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; class Base extends elementorModules.frontend.handlers.Base { getDefaultSettings() { return { selectors: { stickyRightColumn: '.e-sticky-right-column' }, classes: { stickyRightColumnActive: 'e-sticky-right-column--active' } }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { $stickyRightColumn: this.$element.find(selectors.stickyRightColumn) }; } bindEvents() { // Add our wrapper class around the select2 whenever it is opened. elementorFrontend.elements.$document.on('select2:open', event => { this.addSelect2Wrapper(event); }); } addSelect2Wrapper(event) { // The select element is recaptured every time because the markup can refresh const selectElement = jQuery(event.target).data('select2'); if (selectElement.$dropdown) { selectElement.$dropdown.addClass('e-woo-select2-wrapper'); } } isStickyRightColumnActive() { const classes = this.getSettings('classes'); return this.elements.$stickyRightColumn.hasClass(classes.stickyRightColumnActive); } activateStickyRightColumn() { const elementSettings = this.getElementSettings(), $wpAdminBar = elementorFrontend.elements.$wpAdminBar, classes = this.getSettings('classes'); let stickyOptionsOffset = elementSettings.sticky_right_column_offset || 0; if ($wpAdminBar.length && 'fixed' === $wpAdminBar.css('position')) { stickyOptionsOffset += $wpAdminBar.height(); } if ('yes' === this.getElementSettings('sticky_right_column')) { this.elements.$stickyRightColumn.addClass(classes.stickyRightColumnActive); this.elements.$stickyRightColumn.css('top', stickyOptionsOffset + 'px'); } } deactivateStickyRightColumn() { if (!this.isStickyRightColumnActive()) { return; } const classes = this.getSettings('classes'); this.elements.$stickyRightColumn.removeClass(classes.stickyRightColumnActive); } /** * Activates the sticky column * * @return {void} */ toggleStickyRightColumn() { if (!this.getElementSettings('sticky_right_column')) { this.deactivateStickyRightColumn(); return; } if (!this.isStickyRightColumnActive()) { this.activateStickyRightColumn(); } } equalizeElementHeight($element) { if ($element.length) { $element.removeAttr('style'); // First remove the custom height we added so that the new height can be re-calculated according to the content let maxHeight = 0; $element.each((index, element) => { maxHeight = Math.max(maxHeight, element.offsetHeight); }); if (0 < maxHeight) { $element.css({ height: maxHeight + 'px' }); } } } /** * WooCommerce prints the Purchase Note separated from the product name by a border and padding. * In Elementor's Order Summary design, the product name and purchase note are displayed un-separated. * To achieve this design, it is necessary to access the Product Name line before the Purchase Note line to adjust * its padding. Since this cannot be achieved in CSS, it is done in this method. * * @param {Object} $element * * @return {void} */ removePaddingBetweenPurchaseNote($element) { if ($element) { $element.each((index, element) => { jQuery(element).prev().children('td').addClass('product-purchase-note-is-below'); }); } } /** * `elementorPageId` and `elementorWidgetId` are added to the url in the `_wp_http_referer` input which is then * received when WooCommerce does its cart and checkout ajax requests e.g `update_order_review` and `update_cart`. * These query strings are extracted from the url and used in our `load_widget_before_wc_ajax` method. */ updateWpReferers() { const selectors = this.getSettings('selectors'), wpHttpRefererInputs = this.$element.find(selectors.wpHttpRefererInputs), url = new URL(document.location); url.searchParams.set('elementorPageId', elementorFrontend.config.post.id); url.searchParams.set('elementorWidgetId', this.getID()); wpHttpRefererInputs.attr('value', url); } } exports["default"] = Base; /***/ }), /***/ "../modules/woocommerce/assets/js/frontend/handlers/checkout-page.js": /*!***************************************************************************!*\ !*** ../modules/woocommerce/assets/js/frontend/handlers/checkout-page.js ***! \***************************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _base = _interopRequireDefault(__webpack_require__(/*! ./base */ "../modules/woocommerce/assets/js/frontend/handlers/base.js")); class Checkout extends _base.default { getDefaultSettings() { const defaultSettings = super.getDefaultSettings(...arguments); return { selectors: { ...defaultSettings.selectors, container: '.elementor-widget-woocommerce-checkout-page', loginForm: '.e-woocommerce-login-anchor', loginSubmit: '.e-woocommerce-form-login-submit', loginSection: '.e-woocommerce-login-section', showCouponForm: '.e-show-coupon-form', couponSection: '.e-coupon-anchor', showLoginForm: '.e-show-login', applyCoupon: '.e-apply-coupon', checkoutForm: 'form.woocommerce-checkout', couponBox: '.e-coupon-box', address: 'address', wpHttpRefererInputs: '[name="_wp_http_referer"]' }, classes: defaultSettings.classes, ajaxUrl: elementorProFrontend.config.ajaxurl }; } getDefaultElements() { const selectors = this.getSettings('selectors'); return { ...super.getDefaultElements(...arguments), $container: this.$element.find(selectors.container), $loginForm: this.$element.find(selectors.loginForm), $showCouponForm: this.$element.find(selectors.showCouponForm), $couponSection: this.$element.find(selectors.couponSection), $showLoginForm: this.$element.find(selectors.showLoginForm), $applyCoupon: this.$element.find(selectors.applyCoupon), $loginSubmit: this.$element.find(selectors.loginSubmit), $couponBox: this.$element.find(selectors.couponBox), $checkoutForm: this.$element.find(selectors.checkoutForm), $loginSection: this.$element.find(selectors.loginSection), $address: this.$element.find(selectors.address) }; } bindEvents() { super.bindEvents(...arguments); this.elements.$showCouponForm.on('click', event => { event.preventDefault(); this.elements.$couponSection.slideToggle(); }); this.elements.$showLoginForm.on('click', event => { event.preventDefault(); this.elements.$loginForm.slideToggle(); }); this.elements.$applyCoupon.on('click', event => { event.preventDefault(); this.applyCoupon(); }); this.elements.$loginSubmit.on('click', event => { event.preventDefault(); this.loginUser(); }); elementorFrontend.elements.$body.on('updated_checkout', () => { this.applyPurchaseButtonHoverAnimation(); this.updateWpReferers(); }); } onInit() { super.onInit(...arguments); this.toggleStickyRightColumn(); this.updateWpReferers(); this.equalizeElementHeight(this.elements.$address); // Equalize
boxes height if (elementorFrontend.isEditMode()) { this.elements.$loginForm.show(); this.elements.$couponSection.show(); this.applyPurchaseButtonHoverAnimation(); } } onElementChange(propertyName) { if ('sticky_right_column' === propertyName) { this.toggleStickyRightColumn(); } } onDestroy() { super.onDestroy(...arguments); this.deactivateStickyRightColumn(); } applyPurchaseButtonHoverAnimation() { const purchaseButtonHoverAnimation = this.getElementSettings('purchase_button_hover_animation'); if (purchaseButtonHoverAnimation) { // This element is recaptured every time because the checkout markup can refresh jQuery('#place_order').addClass('elementor-animation-' + purchaseButtonHoverAnimation); } } applyCoupon() { // Wc_checkout_params is required to continue, ensure the object exists // eslint-disable-next-line camelcase if (!wc_checkout_params) { return; } this.startProcessing(this.elements.$couponBox); const data = { // eslint-disable-next-line camelcase security: wc_checkout_params.apply_coupon_nonce, coupon_code: this.elements.$couponBox.find('input[name="coupon_code"]').val() }; jQuery.ajax({ type: 'POST', // eslint-disable-next-line camelcase url: wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'apply_coupon'), context: this, data, success(code) { jQuery('.woocommerce-error, .woocommerce-message').remove(); this.elements.$couponBox.removeClass('processing').unblock(); if (code.includes('woocommerce-error') || code.includes('does not exist')) { jQuery('html, body').animate({ scrollTop: 0 }, 'fast'); } if (code) { this.elements.$checkoutForm.before(code); this.elements.$couponSection.slideUp(); elementorFrontend.elements.$body.trigger('applied_coupon_in_checkout', [data.coupon_code]); elementorFrontend.elements.$body.trigger('update_checkout', { update_shipping_method: false }); } }, dataType: 'html' }); } loginUser() { this.startProcessing(this.elements.$loginSection); const data = { action: 'elementor_woocommerce_checkout_login_user', username: this.elements.$loginSection.find('input[name="username"]').val(), password: this.elements.$loginSection.find('input[name="password"]').val(), nonce: this.elements.$loginSection.find('input[name="woocommerce-login-nonce"]').val(), remember: this.elements.$loginSection.find('input#rememberme').prop('checked') }; jQuery.ajax({ type: 'POST', url: this.getSettings('ajaxUrl'), context: this, data, success(code) { code = JSON.parse(code); this.elements.$loginSection.removeClass('processing').unblock(); const messages = jQuery('.woocommerce-error, .woocommerce-message'); messages.remove(); if (code.logged_in) { location.reload(); } else { this.elements.$checkoutForm.before(code.message); elementorFrontend.elements.$body.trigger('checkout_error', [code.message]); } } }); } startProcessing($form) { if ($form.is('.processing')) { return; } /** * .block() is from a jQuery blockUI plugin loaded by WooCommerce. This code is based on WooCommerce * core in order for the Checkout widget to behave the same as WooCommerce Checkout pages. */ $form.addClass('processing').block({ message: null, overlayCSS: { background: '#fff', opacity: 0.6 } }); } } exports["default"] = Checkout; /***/ }) }]); //# sourceMappingURL=woocommerce-checkout-page.470384546c61ebcaa89d.bundle.js.map Söder – InfoNile
skip to Main Content

Söder

Dagens lunch serveras mellan 10.00 och 15.00, och för bara 129 kronor kan du välja mellan utvalda pizzor, kebab, korvmeny, hamburgare och sallad. – Våra portioner är väl tilltagna, vår service är personlig och vår ambition är alltid att överträffa förväntningar, säger han. På Sylveniusgatan 12 B i Fyrislund får nu Royal Grill nytt liv. Här hittar du klassiska favoriter som pizza, hamburgare och grillrätter.

Det var på nyårsdagen som XL Grillen i Fyrislund kommunicerade att de stänger efter att i flera år serverat pizza, kebab och hamburgare till matgästerna. Idag är det folktomt när man äter, ägarna står och glor och pizzan är oätbar. Bakom satsningen står Ali Tas, en rutinerade restaurangägare med erfarenhet från bland annat Dalarna, Västmaland och Uppsala. Slå dig ner, koppla av och upplev genuin persisk gästfrihet i en miljö där persianroyalgrill.se mat, gemenskap och tradition står i centrum.

&#128077; Recensioner av Persian Royal Grill Restaurang

Kvällen var ett test för att se om den nya menyn uppskattades– särskilt av restaurangens tidigare pizzeriagäster. "Vi själva saknade den här maten när vi bodde i Kalv, och det tror jag de som bor i Linköping gör också." Det var först när den kungliga kocken pensionerade sig som maten spreds till folket. För 150 år sen var det endast kungligheter i Iran som åt kobide. Namnet "Royal Persian Grill" är en vink till den persiska maten, och särskilt rätten kobides. Om maten är bra nog, är folk villiga att åka en bit – vi tänker att det stämmer här också, säger Sepideh.

&#128204; Plats för Persian Royal Grill Restaurang

Det Persika köket har ökat i popularitet de senaste åren och den är mer efterfrågad nu än någonsin tidigare. Persiska köket, en matkultur baserad på erfarenhet och recept som har gått från persiska dynastin för år sedan till dagens generation. Granatäpplekärnor och berberisbär bidrar med syra och sötma, mezebrickor bidrar till samtal och gemenskap.

Tasty dishes in Linköping

Idag är det folktomt när man äter, ägarna står och glor och pizzan är oätbar. Två spett med högrevfärs, serveras med saffransris och grillad tomat Grillad aubergineröra med ägg, tomat och vitlök serveras med saffransris eller bröd Halloumi, färska örter, kidneybönor, och torkad lime, serveras med saffransris

Lammracks

Över hela staden hittar du härliga matställen där du kan njuta av autentiska matupplevelser med såväl den klassiska maten från Irans olika delar till mer innovativa rätter. Som namnet avslöjar serveras persiska grillrätter, men även flera sorters ris, bröd och olika röror får plats på menyn bland persiska tillbehör. Men om man bortser från detta så är restaurangen trevlig, härlig inredning, dov belysning och glad atmosfär.

⏰ Öppettider för Persian Royal Grill Restaurang

  • "Vi själva saknade den här maten när vi bodde i Kalv, och det tror jag de som bor i Linköping gör också."
  • Dålig pizza, undrar ifall om leksans knäcke kommer att stämma dem, dem verkar ha snott receptet.
  • Sen är det också viktigt att använda kött av hög kvalitet och rätt proportioner av kalv och lamm för konsistensens skull.
  • Persiska köket, en matkultur baserad på erfarenhet och recept som har gått från persiska dynastin för år sedan till dagens generation.

Det står pulled oumph på menyn men jag fick bara en margaritha med veganska grytbitar och sås. De gör en skrattretande vegetarisk kebabpizza. Tycker egentligen synd om henne, förstår i grunden att hon behöver någon att leka/vara med stackaren. Hård och kompakt pizzabotten. Med sitt utbud av specialiteter som inkluderar restaurang, kebab, hämtmat, lunchrestaurang, pizzeria och pizza avhämtning, erbjuder det här stället något för alla. Jag har inte haft någon direkt uppfattning om persisk mat tidigare, maten här blev jag glatt överraskad av.

Vi serverar autentisk persisk mat lagad enligt traditionella recept, med noggrant utvalda råvaror och generöst med smak. Granatäpplekärnor och berberisbär bidrar med sin syra och sötma, mezebrickor öppnar upp till samtal och glädje. Våra populära naanbröd som vi knådar för hand och vårt ris kokas på traditionellt vis. Du kan hitta allt från gyllene saffransmojito till kolgrillat lamm med ett stort urval av såser. Välkommen in till vår hemtrevliga och lugna oas av smaker, där våra kuddar är inbjudande och gjorda för dig som inte har bråttom.

Välkommen till Tehran Grill

Sen är det också viktigt att använda kött av hög kvalitet och rätt proportioner av kalv och lamm för konsistensens skull. Ali Tas har jobbar i cirka 20 år med att driva liknande restauranger i Dalarna och Västmanland. Den andra januari skrev nämligen den nya ägaren Ali Tas på pappret för att överta restaurangen, som från och med nu kommer att heta Royal Grill. För den som ännu inte upptäckt restaurangen är det hög tid att göra det nu – inte minst för att uppleva förändringen med den nya ägaren. Vi ser till att varje gäst känner sig välkommen och uppskattad, säger Ali.

Gasolgrillen är utrustad med en svart kontrollpanel och nedfällbara sidobord i plast, vilket gör den både praktisk och platsbesparande. Den andra januari skrev nämligen den nya ägaren Ali Tas på pappret för att överta restaurangen, som från och med nu kommer att heta Royal Grill. Staden är full av bra ställen som serverar utsökt persisk mat i mysiga miljöer som skapar känslan av Tusen och en natt.

Discussion

This Post Has 0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top
Search