Expression Functions within Lightning Web Components












11














How can expression functions similar to Visualforce and Lightning Aura Components be achieved within lightning web components?



For example, <template if:true={index % 5 == 0}><br></template> expression index % 5 == 0 is not compyling at all.



accountList.html



   <template>
<template if:true={accounts.data}>
<template for:each={accounts.data} for:item='item' for:index='index'>
<!--LWC DOES NOT SUPPORT EXPRESSION FUNCTIONS-->
<!--<template if:true={index % 5 == 0}><br></template>-->
{item}
</template>
</template>
</template>


accountList.js



import {LightningElement, wire, track} from 'lwc';
import getAccounts from '@salesforce/apex/TestController.getAccounts';

export default class AccountList extends LightningElement {

@wire(getAccounts) accounts;

}


Since LWC doesn't support Expression Functions, I'd like to know how to work around this restriction.










share|improve this question





























    11














    How can expression functions similar to Visualforce and Lightning Aura Components be achieved within lightning web components?



    For example, <template if:true={index % 5 == 0}><br></template> expression index % 5 == 0 is not compyling at all.



    accountList.html



       <template>
    <template if:true={accounts.data}>
    <template for:each={accounts.data} for:item='item' for:index='index'>
    <!--LWC DOES NOT SUPPORT EXPRESSION FUNCTIONS-->
    <!--<template if:true={index % 5 == 0}><br></template>-->
    {item}
    </template>
    </template>
    </template>


    accountList.js



    import {LightningElement, wire, track} from 'lwc';
    import getAccounts from '@salesforce/apex/TestController.getAccounts';

    export default class AccountList extends LightningElement {

    @wire(getAccounts) accounts;

    }


    Since LWC doesn't support Expression Functions, I'd like to know how to work around this restriction.










    share|improve this question



























      11












      11








      11







      How can expression functions similar to Visualforce and Lightning Aura Components be achieved within lightning web components?



      For example, <template if:true={index % 5 == 0}><br></template> expression index % 5 == 0 is not compyling at all.



      accountList.html



         <template>
      <template if:true={accounts.data}>
      <template for:each={accounts.data} for:item='item' for:index='index'>
      <!--LWC DOES NOT SUPPORT EXPRESSION FUNCTIONS-->
      <!--<template if:true={index % 5 == 0}><br></template>-->
      {item}
      </template>
      </template>
      </template>


      accountList.js



      import {LightningElement, wire, track} from 'lwc';
      import getAccounts from '@salesforce/apex/TestController.getAccounts';

      export default class AccountList extends LightningElement {

      @wire(getAccounts) accounts;

      }


      Since LWC doesn't support Expression Functions, I'd like to know how to work around this restriction.










      share|improve this question















      How can expression functions similar to Visualforce and Lightning Aura Components be achieved within lightning web components?



      For example, <template if:true={index % 5 == 0}><br></template> expression index % 5 == 0 is not compyling at all.



      accountList.html



         <template>
      <template if:true={accounts.data}>
      <template for:each={accounts.data} for:item='item' for:index='index'>
      <!--LWC DOES NOT SUPPORT EXPRESSION FUNCTIONS-->
      <!--<template if:true={index % 5 == 0}><br></template>-->
      {item}
      </template>
      </template>
      </template>


      accountList.js



      import {LightningElement, wire, track} from 'lwc';
      import getAccounts from '@salesforce/apex/TestController.getAccounts';

      export default class AccountList extends LightningElement {

      @wire(getAccounts) accounts;

      }


      Since LWC doesn't support Expression Functions, I'd like to know how to work around this restriction.







      lightning-web-components






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 21 '18 at 15:37

























      asked Dec 21 '18 at 15:24









      Oleh Berehovskyi

      1578




      1578






















          3 Answers
          3






          active

          oldest

          votes


















          7














          EDIT: changed my answer because previous one was wrong:



          You have to write a JS expression that paginates your list like this:



          get getContacts() {
          return [
          ['a', 'b', 'c', 'd', 'e'], // Page 0, max 5 item
          ['f', 'g'], // Page 1
          ];
          }


          Then use two iterations in your template:



          <template for:each={getContacts} for:item="page">
          <template for:each={page} for:item="contact">
          {contact}
          </template>
          </template>





          share|improve this answer



















          • 2




            How does index get passed to this function?
            – Jayant Das
            Dec 21 '18 at 17:26










          • Thanks for pointing this out @JayantDas, I've edited my answer.
            – POZ
            Dec 21 '18 at 17:41



















          3














          There are multiple options. First, note, that all computations are in JavaScript, not in the markup.



          Option 1
          You implement the display of your {item} (which is currently only the JSON object), into a dedicated component AccountListItem. And implement in there the logic that @POZ suggested.



          Something along the lines of:



          import {LightningElement, api} from 'lwc';

          export default class AccountListItem extends LightningElement {
          @api index;
          @api item;

          get isMod5() {
          return this.index % 5 == 0;
          }
          }


          Option 2
          You use a wired function instead of a wired property. And then do some fun stuff with a changed data model. Although this is hacky.



          import {LightningElement, wire, track} from 'lwc';
          import getAccounts from '@salesforce/apex/TestController.getAccounts';

          export default class AccountList extends LightningElement {

          @wire(getAccounts)
          wiredAccounts({ error, data}) {
          if (error) {
          // do error handling, please
          } else if (data) {
          this.accounts = data.map((acct, index) => {
          return {
          acct: acct,
          isMod5: index % 5 == 0 ? true : false
          }
          })
          }
          }





          share|improve this answer































            0














            Because expressions are not allowed in Lightning Web Component template, you would have required a JavaScript getter function here. Refer to HTML Template Directives documentation for details.



            Excerpt below from documentation:




            if:true|false={expression}



            ..... (some text omitted)



            The engine doesn’t allow computed expressions. To compute the value of expression, use a getter in the JavaScript class.




            But, in your case you need to pass the index var in the iteration, so even having a getter function doesn't seem to do the job here.





            I am not completely sure of the use case here as why you want to utilize the index within the iteration, but as I don't see a way to set the index to a JS function, here's an approach that you can take by utilizing Composition.



            Even though this approach solves the problem here, but still seems to be an overhead of creating another component to achieve this what could have been achieved inline.



            The approach here is:




            • Create a custom LWC

            • Pass the index value to the component within the iteration in the parent component

            • Compute the value of the index within that component and perform your required operation


            Let's say I create a custom LWC as c-my-index-component, which looks like as below:



            <template>
            <template if:true={indexVar}>
            // do something
            </template>
            </template>


            In the JS, I have this property defined as:



            import { LightningElement, api, track } from 'lwc';
            export default class MyCustomIndex extends LightningElement {
            @track myVariable;

            set indexVar(value) {
            this.myVariable = value;
            }

            @api
            get indexVar() {
            return (this.myVariable % 5 === 0)
            }
            }


            And then finally I use it in my existing component in iteration as below:



            <template for:each={accounts.data} for:item='item' for:index='index'>
            <c-my-index-component key={item.Id} index-var={index}></c-my-index-component>
            // my other code
            </template>





            share|improve this answer























              Your Answer








              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "459"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f244460%2fexpression-functions-within-lightning-web-components%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              7














              EDIT: changed my answer because previous one was wrong:



              You have to write a JS expression that paginates your list like this:



              get getContacts() {
              return [
              ['a', 'b', 'c', 'd', 'e'], // Page 0, max 5 item
              ['f', 'g'], // Page 1
              ];
              }


              Then use two iterations in your template:



              <template for:each={getContacts} for:item="page">
              <template for:each={page} for:item="contact">
              {contact}
              </template>
              </template>





              share|improve this answer



















              • 2




                How does index get passed to this function?
                – Jayant Das
                Dec 21 '18 at 17:26










              • Thanks for pointing this out @JayantDas, I've edited my answer.
                – POZ
                Dec 21 '18 at 17:41
















              7














              EDIT: changed my answer because previous one was wrong:



              You have to write a JS expression that paginates your list like this:



              get getContacts() {
              return [
              ['a', 'b', 'c', 'd', 'e'], // Page 0, max 5 item
              ['f', 'g'], // Page 1
              ];
              }


              Then use two iterations in your template:



              <template for:each={getContacts} for:item="page">
              <template for:each={page} for:item="contact">
              {contact}
              </template>
              </template>





              share|improve this answer



















              • 2




                How does index get passed to this function?
                – Jayant Das
                Dec 21 '18 at 17:26










              • Thanks for pointing this out @JayantDas, I've edited my answer.
                – POZ
                Dec 21 '18 at 17:41














              7












              7








              7






              EDIT: changed my answer because previous one was wrong:



              You have to write a JS expression that paginates your list like this:



              get getContacts() {
              return [
              ['a', 'b', 'c', 'd', 'e'], // Page 0, max 5 item
              ['f', 'g'], // Page 1
              ];
              }


              Then use two iterations in your template:



              <template for:each={getContacts} for:item="page">
              <template for:each={page} for:item="contact">
              {contact}
              </template>
              </template>





              share|improve this answer














              EDIT: changed my answer because previous one was wrong:



              You have to write a JS expression that paginates your list like this:



              get getContacts() {
              return [
              ['a', 'b', 'c', 'd', 'e'], // Page 0, max 5 item
              ['f', 'g'], // Page 1
              ];
              }


              Then use two iterations in your template:



              <template for:each={getContacts} for:item="page">
              <template for:each={page} for:item="contact">
              {contact}
              </template>
              </template>






              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited Dec 21 '18 at 17:39

























              answered Dec 21 '18 at 17:17









              POZ

              1,19929




              1,19929








              • 2




                How does index get passed to this function?
                – Jayant Das
                Dec 21 '18 at 17:26










              • Thanks for pointing this out @JayantDas, I've edited my answer.
                – POZ
                Dec 21 '18 at 17:41














              • 2




                How does index get passed to this function?
                – Jayant Das
                Dec 21 '18 at 17:26










              • Thanks for pointing this out @JayantDas, I've edited my answer.
                – POZ
                Dec 21 '18 at 17:41








              2




              2




              How does index get passed to this function?
              – Jayant Das
              Dec 21 '18 at 17:26




              How does index get passed to this function?
              – Jayant Das
              Dec 21 '18 at 17:26












              Thanks for pointing this out @JayantDas, I've edited my answer.
              – POZ
              Dec 21 '18 at 17:41




              Thanks for pointing this out @JayantDas, I've edited my answer.
              – POZ
              Dec 21 '18 at 17:41













              3














              There are multiple options. First, note, that all computations are in JavaScript, not in the markup.



              Option 1
              You implement the display of your {item} (which is currently only the JSON object), into a dedicated component AccountListItem. And implement in there the logic that @POZ suggested.



              Something along the lines of:



              import {LightningElement, api} from 'lwc';

              export default class AccountListItem extends LightningElement {
              @api index;
              @api item;

              get isMod5() {
              return this.index % 5 == 0;
              }
              }


              Option 2
              You use a wired function instead of a wired property. And then do some fun stuff with a changed data model. Although this is hacky.



              import {LightningElement, wire, track} from 'lwc';
              import getAccounts from '@salesforce/apex/TestController.getAccounts';

              export default class AccountList extends LightningElement {

              @wire(getAccounts)
              wiredAccounts({ error, data}) {
              if (error) {
              // do error handling, please
              } else if (data) {
              this.accounts = data.map((acct, index) => {
              return {
              acct: acct,
              isMod5: index % 5 == 0 ? true : false
              }
              })
              }
              }





              share|improve this answer




























                3














                There are multiple options. First, note, that all computations are in JavaScript, not in the markup.



                Option 1
                You implement the display of your {item} (which is currently only the JSON object), into a dedicated component AccountListItem. And implement in there the logic that @POZ suggested.



                Something along the lines of:



                import {LightningElement, api} from 'lwc';

                export default class AccountListItem extends LightningElement {
                @api index;
                @api item;

                get isMod5() {
                return this.index % 5 == 0;
                }
                }


                Option 2
                You use a wired function instead of a wired property. And then do some fun stuff with a changed data model. Although this is hacky.



                import {LightningElement, wire, track} from 'lwc';
                import getAccounts from '@salesforce/apex/TestController.getAccounts';

                export default class AccountList extends LightningElement {

                @wire(getAccounts)
                wiredAccounts({ error, data}) {
                if (error) {
                // do error handling, please
                } else if (data) {
                this.accounts = data.map((acct, index) => {
                return {
                acct: acct,
                isMod5: index % 5 == 0 ? true : false
                }
                })
                }
                }





                share|improve this answer


























                  3












                  3








                  3






                  There are multiple options. First, note, that all computations are in JavaScript, not in the markup.



                  Option 1
                  You implement the display of your {item} (which is currently only the JSON object), into a dedicated component AccountListItem. And implement in there the logic that @POZ suggested.



                  Something along the lines of:



                  import {LightningElement, api} from 'lwc';

                  export default class AccountListItem extends LightningElement {
                  @api index;
                  @api item;

                  get isMod5() {
                  return this.index % 5 == 0;
                  }
                  }


                  Option 2
                  You use a wired function instead of a wired property. And then do some fun stuff with a changed data model. Although this is hacky.



                  import {LightningElement, wire, track} from 'lwc';
                  import getAccounts from '@salesforce/apex/TestController.getAccounts';

                  export default class AccountList extends LightningElement {

                  @wire(getAccounts)
                  wiredAccounts({ error, data}) {
                  if (error) {
                  // do error handling, please
                  } else if (data) {
                  this.accounts = data.map((acct, index) => {
                  return {
                  acct: acct,
                  isMod5: index % 5 == 0 ? true : false
                  }
                  })
                  }
                  }





                  share|improve this answer














                  There are multiple options. First, note, that all computations are in JavaScript, not in the markup.



                  Option 1
                  You implement the display of your {item} (which is currently only the JSON object), into a dedicated component AccountListItem. And implement in there the logic that @POZ suggested.



                  Something along the lines of:



                  import {LightningElement, api} from 'lwc';

                  export default class AccountListItem extends LightningElement {
                  @api index;
                  @api item;

                  get isMod5() {
                  return this.index % 5 == 0;
                  }
                  }


                  Option 2
                  You use a wired function instead of a wired property. And then do some fun stuff with a changed data model. Although this is hacky.



                  import {LightningElement, wire, track} from 'lwc';
                  import getAccounts from '@salesforce/apex/TestController.getAccounts';

                  export default class AccountList extends LightningElement {

                  @wire(getAccounts)
                  wiredAccounts({ error, data}) {
                  if (error) {
                  // do error handling, please
                  } else if (data) {
                  this.accounts = data.map((acct, index) => {
                  return {
                  acct: acct,
                  isMod5: index % 5 == 0 ? true : false
                  }
                  })
                  }
                  }






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Dec 21 '18 at 17:41









                  codeyinthecloud

                  3,2991423




                  3,2991423










                  answered Dec 21 '18 at 17:39









                  muenzpraeger

                  1491




                  1491























                      0














                      Because expressions are not allowed in Lightning Web Component template, you would have required a JavaScript getter function here. Refer to HTML Template Directives documentation for details.



                      Excerpt below from documentation:




                      if:true|false={expression}



                      ..... (some text omitted)



                      The engine doesn’t allow computed expressions. To compute the value of expression, use a getter in the JavaScript class.




                      But, in your case you need to pass the index var in the iteration, so even having a getter function doesn't seem to do the job here.





                      I am not completely sure of the use case here as why you want to utilize the index within the iteration, but as I don't see a way to set the index to a JS function, here's an approach that you can take by utilizing Composition.



                      Even though this approach solves the problem here, but still seems to be an overhead of creating another component to achieve this what could have been achieved inline.



                      The approach here is:




                      • Create a custom LWC

                      • Pass the index value to the component within the iteration in the parent component

                      • Compute the value of the index within that component and perform your required operation


                      Let's say I create a custom LWC as c-my-index-component, which looks like as below:



                      <template>
                      <template if:true={indexVar}>
                      // do something
                      </template>
                      </template>


                      In the JS, I have this property defined as:



                      import { LightningElement, api, track } from 'lwc';
                      export default class MyCustomIndex extends LightningElement {
                      @track myVariable;

                      set indexVar(value) {
                      this.myVariable = value;
                      }

                      @api
                      get indexVar() {
                      return (this.myVariable % 5 === 0)
                      }
                      }


                      And then finally I use it in my existing component in iteration as below:



                      <template for:each={accounts.data} for:item='item' for:index='index'>
                      <c-my-index-component key={item.Id} index-var={index}></c-my-index-component>
                      // my other code
                      </template>





                      share|improve this answer




























                        0














                        Because expressions are not allowed in Lightning Web Component template, you would have required a JavaScript getter function here. Refer to HTML Template Directives documentation for details.



                        Excerpt below from documentation:




                        if:true|false={expression}



                        ..... (some text omitted)



                        The engine doesn’t allow computed expressions. To compute the value of expression, use a getter in the JavaScript class.




                        But, in your case you need to pass the index var in the iteration, so even having a getter function doesn't seem to do the job here.





                        I am not completely sure of the use case here as why you want to utilize the index within the iteration, but as I don't see a way to set the index to a JS function, here's an approach that you can take by utilizing Composition.



                        Even though this approach solves the problem here, but still seems to be an overhead of creating another component to achieve this what could have been achieved inline.



                        The approach here is:




                        • Create a custom LWC

                        • Pass the index value to the component within the iteration in the parent component

                        • Compute the value of the index within that component and perform your required operation


                        Let's say I create a custom LWC as c-my-index-component, which looks like as below:



                        <template>
                        <template if:true={indexVar}>
                        // do something
                        </template>
                        </template>


                        In the JS, I have this property defined as:



                        import { LightningElement, api, track } from 'lwc';
                        export default class MyCustomIndex extends LightningElement {
                        @track myVariable;

                        set indexVar(value) {
                        this.myVariable = value;
                        }

                        @api
                        get indexVar() {
                        return (this.myVariable % 5 === 0)
                        }
                        }


                        And then finally I use it in my existing component in iteration as below:



                        <template for:each={accounts.data} for:item='item' for:index='index'>
                        <c-my-index-component key={item.Id} index-var={index}></c-my-index-component>
                        // my other code
                        </template>





                        share|improve this answer


























                          0












                          0








                          0






                          Because expressions are not allowed in Lightning Web Component template, you would have required a JavaScript getter function here. Refer to HTML Template Directives documentation for details.



                          Excerpt below from documentation:




                          if:true|false={expression}



                          ..... (some text omitted)



                          The engine doesn’t allow computed expressions. To compute the value of expression, use a getter in the JavaScript class.




                          But, in your case you need to pass the index var in the iteration, so even having a getter function doesn't seem to do the job here.





                          I am not completely sure of the use case here as why you want to utilize the index within the iteration, but as I don't see a way to set the index to a JS function, here's an approach that you can take by utilizing Composition.



                          Even though this approach solves the problem here, but still seems to be an overhead of creating another component to achieve this what could have been achieved inline.



                          The approach here is:




                          • Create a custom LWC

                          • Pass the index value to the component within the iteration in the parent component

                          • Compute the value of the index within that component and perform your required operation


                          Let's say I create a custom LWC as c-my-index-component, which looks like as below:



                          <template>
                          <template if:true={indexVar}>
                          // do something
                          </template>
                          </template>


                          In the JS, I have this property defined as:



                          import { LightningElement, api, track } from 'lwc';
                          export default class MyCustomIndex extends LightningElement {
                          @track myVariable;

                          set indexVar(value) {
                          this.myVariable = value;
                          }

                          @api
                          get indexVar() {
                          return (this.myVariable % 5 === 0)
                          }
                          }


                          And then finally I use it in my existing component in iteration as below:



                          <template for:each={accounts.data} for:item='item' for:index='index'>
                          <c-my-index-component key={item.Id} index-var={index}></c-my-index-component>
                          // my other code
                          </template>





                          share|improve this answer














                          Because expressions are not allowed in Lightning Web Component template, you would have required a JavaScript getter function here. Refer to HTML Template Directives documentation for details.



                          Excerpt below from documentation:




                          if:true|false={expression}



                          ..... (some text omitted)



                          The engine doesn’t allow computed expressions. To compute the value of expression, use a getter in the JavaScript class.




                          But, in your case you need to pass the index var in the iteration, so even having a getter function doesn't seem to do the job here.





                          I am not completely sure of the use case here as why you want to utilize the index within the iteration, but as I don't see a way to set the index to a JS function, here's an approach that you can take by utilizing Composition.



                          Even though this approach solves the problem here, but still seems to be an overhead of creating another component to achieve this what could have been achieved inline.



                          The approach here is:




                          • Create a custom LWC

                          • Pass the index value to the component within the iteration in the parent component

                          • Compute the value of the index within that component and perform your required operation


                          Let's say I create a custom LWC as c-my-index-component, which looks like as below:



                          <template>
                          <template if:true={indexVar}>
                          // do something
                          </template>
                          </template>


                          In the JS, I have this property defined as:



                          import { LightningElement, api, track } from 'lwc';
                          export default class MyCustomIndex extends LightningElement {
                          @track myVariable;

                          set indexVar(value) {
                          this.myVariable = value;
                          }

                          @api
                          get indexVar() {
                          return (this.myVariable % 5 === 0)
                          }
                          }


                          And then finally I use it in my existing component in iteration as below:



                          <template for:each={accounts.data} for:item='item' for:index='index'>
                          <c-my-index-component key={item.Id} index-var={index}></c-my-index-component>
                          // my other code
                          </template>






                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited Dec 21 '18 at 20:54

























                          answered Dec 21 '18 at 15:46









                          Jayant Das

                          12.2k2723




                          12.2k2723






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Salesforce Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.





                              Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                              Please pay close attention to the following guidance:


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f244460%2fexpression-functions-within-lightning-web-components%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Morgemoulin

                              Scott Moir

                              Souastre