Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FIX #740, Disable 'Autoplay' on videos recorded into Milestones #757

Closed
wants to merge 21 commits into from

Conversation

nadirlaskar
Copy link
Contributor

@nadirlaskar nadirlaskar commented May 6, 2019

Issue
Problem is that the milestone's description is stored in db as iframe element
<iframe class="ql-video" frameborder="0" allowfullscreen="true" src="https://ipfs.giveth.io/ipfs/xxxxxxxxxxx"></iframe><p><br /></p>"

( back-end solution )

Which can be solved by converting the back-end code to store and return as video tag
<video controls="" autoplay="false" name="media"><source src="https://ipfs.giveth.io/ipfs/xxxxxxxxxxx" type="video/webm"></video>

or ( front-end solution )

we can transform that description to video element here like this by extracting the source from the iframe source and assign it to the video source

renderDescription() {
    // Convert the iframe to video element
    let description = this.state.milestone.description;
    let src = description.match(/(?<=\bsrc=")[^"]*/)[0];
    if(src){
      description = `<video controls="" autoplay="false" name="media">
                  <source src=${src} type="video/webm">
      </video>`;
    }
    // Pass the transformed description
    return ReactHtmlParser(description, {
      transform(node, index) {
        if (node.attribs && node.attribs.class === 'ql-video') {
          return (
            <div className="video-wrapper" key={index}>
              {convertNodeToElement(node, index)}
            </div>
          );
        }
        return undefined;
      },
    });
  }

In this pull request, I changed files required to fix from the front-end side solution.

As server is sending video source of milestone video as description inside iframe tag. 
Which generates a video element by browser inside iframe having auto-play and other controls enabled by default leading to the auto-play issue.
As part of the front-end only fix, here i am converting the iframe to a video tag by reading
the iframe source and applying it to the video element.
@netlify
Copy link

netlify bot commented May 6, 2019

Deploy preview for giveth-dapp processing.

Building with commit a697336

https://app.netlify.com/sites/giveth-dapp/deploys/5cedf9b4b8fa3b0009dbf494

@nadirlaskar nadirlaskar changed the title FIX #740, Disable 'Autoplay' on videos recorded into Milestones WIP #740, Disable 'Autoplay' on videos recorded into Milestones May 6, 2019
Instead of using jquery to read iframe src  attribute, modified  to using regex to extract the attribute.
In order to not mutate the state of the component, making a copy of description for transforming
and passing it to create react node.
@nadirlaskar nadirlaskar changed the title WIP #740, Disable 'Autoplay' on videos recorded into Milestones FIX #740, Disable 'Autoplay' on videos recorded into Milestones May 6, 2019
@nadirlaskar
Copy link
Contributor Author

nadirlaskar commented May 6, 2019

There seems to be some error with CI due to following files,

Giveth/giveth-dapp/src/components/BackupWalletButton.jsx
Giveth/giveth-dapp/src/components/Balances.jsx
Giveth/giveth-dapp/src/components/ChangeMilestoneRecipientButton.jsx

...

Some cases the description value of the milestone is set to undefined,
added a if condition to check for that case.
@arbreton arbreton closed this May 30, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants