Code Monkey home page Code Monkey logo

bruit.io's Introduction

bruit.io

NPM Version License License Built With Stencil

bruit.io is a Web Component built with Stencil.js

Available on all frameworks that support Web Components such as

Angular React Ember Vue Stencil Polymer Ionic Meteor Backbone Aurelia Electron


bruit.io is a tool to get your users feedbacks, designed to be as simple to use as possible, following the Web Components standards. Users' feedbacks are sent directly to your favorite project management tools 🎉 .

bruit.io is built around an open source Web Component and a backend reciving the users feedback.

And we do no data retention at all about those feedbacks 👏


Getting started

start on bruit.io

By default, bruit.io component posts feedbacks to bruit.io api. If you wish, It can be connected with your own.

The free bruit.io api allows to pass feedbacks on to tools such as

Mail GitLab Trello GitHub Slack Basecamp

Table of Contents

Installation
Usage
Configuration
    BrtConfig
    BrtField
    BrtLabels
    BrtColors
Add data in feedbacks
Handle errors
Frameworks integration
Contributing
Known issues
Having troubles?

Installation

bruit.io can be installed either with a command line

npm install @bruit/component --save

Or by directly modifying your index.html file

    <script type="module" src="https://unpkg.com/@bruit/component/dist/bruit/bruit.esm.js"></script>
    <script nomodule src="https://unpkg.com/@bruit/component/dist/bruit/bruit.js"></script>

Usage

Simply add this tag wherever you want in your project:

<bruit-io> ... optional element to click ... </bruit-io>

These properties are available on the component:

Integration code examples are available for these platforms:

Javascript      Angular      React      Vue

Configuration

bruit-io Web Component has a config attribute, which takes a value of BrtConfig type.

BrtConfig

Describes the options for the bruit-io component

interface BrtConfig {
  apiKey?: string;
  form: Array<BrtField>;
  labels?: BrtLabels;
  colors?: BrtColors;
  closeModalOnSubmit?: boolean;
  apiUrl?: string;
  durationBeforeClosing?: number;
  elementToRenderSelector?: string;
  screenshot?: {
    maxWidth?: number,
    maxHeight?: number,
    imageType?: string,
    compression?: number
  }
}
Attribute Type Description Mandatory Default value
apiKey string your personal api key (create an api key) no -
form array<BrtField> inputs list for the generated form yes -
labels BrtLabels describes the labels of the modal (title / button / ...) no see
colors BrtColors Allows to pick your colors in the modal theming no see
closeModalOnSubmit boolean true to have modal closed automatically on submit (feedback is sent in background) no false
apiUrl string Allows to use some third party backend for feedback processing no see
durationBeforeClosing number Allows to define a number of milliseconds before the popup gets closed no -
elementToRenderSelector string sets the css selector of the element to use as the root of the rendering for the screenshot no document.body
screenshot.maxWidth number the maximum width of the generated screenshot. Set it to have the screenshot resized when it's too large no -
screenshot.maxHeight number the maximum height of the generated screenshot. Set it to have the screenshot resized when it's too tall no -
screenshot.imageType image/png ; image/jpeg the type of image to generate no image/png
screenshot.compression number the compression to apply to the screenshot between 1 (no compression) and 0 (fully compressed) ; only applies to image/jpeg type no 0.9

Typescript import :

import { BrtConfig } from '@bruit/component';

BrtField

Describes both the fields displayed in the popup form and the users' answers.

interface BrtField {
  id?: string;
  label: string;
  type: BrtFieldType;
  required?: boolean;
  value?: any;
  max?: number;
}
Attribute Type Description Mandatory
id string Unique identifier for the field no
label string Placeholder / label for the field yes
type BrtFieldType The input type of the field yes
required boolean true to make the field required to send the feedback no
value any The value typed by the user no
max number max number for rating type no

BrtConfig.form must contain one BrtField with id="agreement" and type="checkbox", used to check whether personal data should be sent with the feedback.

There are special values for the id attribute:

  • agreement: sets the field to use to check whether user agrees to send his personal data
  • title: sets the field used to display the title of feedback

Typescript import:

import { BrtField } from '@bruit/component';

BrtLabels

Used to describe the texts displayed in the modal.

interface BrtLabels {
  title?: string;
  introduction?: string;
  button?: string;
}
Attribute Description Default value
title Defines the title of the modal bruit.io
introduction Defines the description text send a feedback
button Defines the text of the submit button send

Typescript import:

import { BrtLabels } from '@bruit/component';

BrtColors

If you feel like an artist 🎨 , you may use BrtColors to change the theme of the modal.

This gives the possiblity to change the header, body, background, errors and focus colors.

Only hexadecimal values are allowed here.

interface BrtColors {
  header?: string;
  body?: string;
  background?: string;
  errors?: string;
  focus?: string;
}
Attribute Description Default value
header the modal's header color #2D8297
body the color for the background of the modal #eee
background the color used to dim what's behind the modal #444444ee
errors the text color to use for errors #c31313
focus the color to use on focused field #1f5a6

Typescript import:

import { BrtColors } from '@bruit/component';

BrtFeedback

By default, bruit.io component posts a feedback to bruit.io API (https://api.bruit.io/feedback).

If you wish, it can be connected with your own API.

To do it, you must provide a API endpoint, to be passed to BrtConfig as apiUrl.

bruit.io component posts a BrtFeedback to your API endpoint.

interface BrtFeedback {
  apiKey?: string;
  canvas?: string;
  url?: string;
  cookies?: BrtCookies;
  navigator?: BrtNavigatorInfo;
  display?: BrtScreenInfo;
  logs?: Array<BrtLog>;
  data: Array<BrtData>;
}

Typescript import:

import { BrtFeedback } from '@bruit/types';

Add data to the feedback

It is possible to automatically had technical data in the feedback, for example the version number of your application, the identifier of the user sending the feedback, etc.

This is done by using either the brt-data or brt-data-fn property on the component.

data

brt-data property is used to send an array of objects to add to the feedback to the component.

The property takes a BrtData array as a value.

dataFn

brt-data-fn property takes a function as a value. The function should return either an array of BrtData or a promise of an array of BrtData.

BrtData

Used to pass additional data to the feedback (ie the application version number)

interface BrtData {
  label: string;
  type?: string;
  value: any;
  id?: string;
}
Attribute Type Description Mandatory
label string a label for the data yes
type string the type of the data no
value any the value to send yes
id string an identifier for the data no

Typescript import:

import { BrtData } from '@bruit/component';

Handle errors

event

bruit-io emits onError events when an error occurs.

An error is of type BrtError, composed by a code and a text.

more information about errors

BrtError

Format of the errors which may be sent by the component.

interface BrtError {
  code: number;
  text: string;
}

Typescript import:

import { BrtError } from '@bruit/component';

Framework integrations

JavaScript

Integrating bruit-io component to a project without a JavaScript framework is pretty straight forward. When using a simple HTML page, bruit.io can be added from a CDN as follows:

<!DOCTYPE html>
<html lang="en">
  <head>
    <script type="module" src="https://unpkg.com/@bruit/component/dist/bruit/bruit.esm.js"></script>
    <script nomodule src="https://unpkg.com/@bruit/component/dist/bruit/bruit.js"></script>
  </head>
  ...
</html>

Then, you may add the bruit-io component directly:

<body>
  <bruit-io></bruit-io>
  ...
  <script>
    var bruitCmp = document.querySelector('bruit-io');


    bruitCmp.config = {
      // whatever your config is
    };
  </script>
</body>

from stencil documentation

Angular

Using bruit-io component within an Angular project is a two-step process. You need to:

  1. Include the CUSTOM_ELEMENTS_SCHEMA in the modules that use the components
  2. Call defineCustomElements() from main.ts (or some other appropriate place)

Including the Custom Elements Schema

Including the CUSTOM_ELEMENTS_SCHEMA in the module allows the use of Web Components in the HTML files. Here is an example of adding it to AppModule:

import { BrowserModule } from '@angular/platform-browser';
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule],
  bootstrap: [AppComponent],
  schemas: [CUSTOM_ELEMENTS_SCHEMA]
})
export class AppModule {}

The CUSTOM_ELEMENTS_SCHEMA needs to be included in any module that uses bruit.io.

Calling defineCustomElements

bruit.io component includes a function used to load itself in the application window object. That function is called defineCustomElements() and needs to be executed once during the bootstrapping of your application. One convenient place to add it is in the main.ts file as follows:

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

import { applyPolyfills, defineCustomElements } from '@bruit/component/loader';
// if you want set bruit config :
// import BruitCoreConfig from '@bruit/component/dist/collection/start';

if (environment.production) {
  enableProdMode();
}

platformBrowserDynamic()
  .bootstrapModule(AppModule)
  .catch(err => console.log(err));
applyPolyfills().then(() => {
  defineCustomElements(window)

    // if you want set bruit config :
  // defineCustomElements(window).then(() => {
  //   BruitCore({
  //     logCacheLength: {
  //       click: 5
  //     }
  //   });
  // });
})

Using bruit.io in an Angular component

<bruit-io
  [config]="bruitConfig"
  [data]="bruitData"
  [dataFn]="bruitDataPromise()"
  (onError)="handleBruitError($event)"
></bruit-io>
public bruitConfig: BrtConfig = {
  apiKey:"xxxxxxxxxxx",
  form:[...]
};

public bruitData: Array<BrtData> = [
  {
    label:"version",
    value: environment.version
  }
];

constructor(private api : ApiService){}

bruitDataPromise(): Promise<Array<BrtData>>{
  return this.api.getUser().then( user =>
    [
      {
        label: "user id",
        value: user.id
      },
      {
        label: "user email",
        value: user.email
      }
    ]
  );
}

handleBruitError(error: BrtError){
  ...
}

from stencil documentation

React

With an application built using React CLI (namely create-react-app), the easiest way is to include the bruit-io component by calling the defineCustomElements() method in the index.js file.

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';

import { applyPolyfills, defineCustomElements } from '@bruit/component/loader';
// if you want set bruit config :
// import BruitCoreConfig from '@bruit/component/dist/collection/start';


ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();
applyPolyfills().then(() => {
  defineCustomElements(window);

  // if you want set bruit config :
  // defineCustomElements(window).then(() => {
  //   BruitCore({
  //     logCacheLength: {
  //       click: 5
  //     }
  //   });
  // });
});

from stencil documentation

Vue

In order to use the bruit-io Web Component inside of a Vue application, it should be modified to define the custom elements and to inform the Vue compiler which elements to ignore during compilation. This can all be done within the main.js file as follows:

import Vue from 'vue';
import App from './App.vue';
import { applyPolyfills, defineCustomElements } from '@bruit/component/loader';

Vue.config.productionTip = false;
Vue.config.ignoredElements = [/bruit-\w*/];

applyPolyfills().then(() => {
  defineCustomElements(window);
});

new Vue({
  render: h => h(App)
}).$mount('#app');

from stencil documentation

Contributing

Bruit.io web component is 100% free and open source. Contributing to bruit.io may involve writing TypeScript, TSX, Stencil, SCSS or Markdown depending on the component you are working on. We are looking for help in any of these areas!

Known issues

Having troubles ?

bruit.io's People

Contributors

chaves-pereira avatar gwno-syd avatar lamstutz avatar lionelsyd avatar malrok avatar thierrychampot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

bruit.io's Issues

test

Sent by louis Amstutz ([email protected]). Created by fire.


test


ig

Louis AMSTUTZ

Développeur full-stack

06 13 06 11 01 - 02 72 01 38 28

Partenaire informatique des projets innovants

6 rue Rose Dieng Kuntz, CS60691, 44306 NANTES CEDEX 3

twitter

Data are not added to feedbacks

Usages already tried

        <bruit-io [config]="bruitConfig" [dataFn]="getBrtData" slot="start">
        </bruit-io>
        <bruit-io [config]="bruitConfig" [data]="brtData" slot="start">
        </bruit-io>
        <bruit-io [config]="bruitConfig" [data]="getBrtData()" slot="start">
        </bruit-io>

CORS issue with images in screenshot

Hi, just getting started with Bruit and so far loving it. However, I do have one request I think would improve it even more.
I'm submitting a ... (check one with "x")
[ ] bug report
[x] feature request
[ ] support request => Please do not submit support requests here, use one of these channels: https://forum.ionicframework.com/ or https://stencil-worldwide.slack.com

Current behavior:
I see you are using html2canvas for screenshots, but cannot see a way to pass through options. Specifically, I need to se the useCORS: true option. At the moment my screenshots do not render any images as they are coming from another domain.

Expected behavior:
It would be great to either expose all the html2canvas options or at least allow the useCORS option to be set to true. Failing this any guidance on how to update this in a fork would be great.

Steps to reproduce:
N/A

Related code:
N/A

insert any relevant code here

Other information:
I am using this with a Vue js app built with the Quasar framework.

Warning de version

  • n'afficher le warning de version que s'il est vraiment inférieur (et non pas juste différent)

  • rendre moins visible le warning de numéro de version

Problème avec font-awesome

J'ai voulu intégrer bruit.io dans pitangoo web, j'ai eu un soucis d'affichage de l'icone depuis font awesome

A priori, un style dans le composant fait sauter l'attribut font-family dans les éléments encapsulés

Check Github workflow - Generated by Bruit.io

Feedback reported on Thu Feb 28 2019 at 16:08:20 (GMT+0100) from https://bruit.io/get-started?tool=github-api

Description

Tell us your email so that we can contact you

[email protected]

Tell us your comment or ask your question

Hey there I couldn't setup with github - I got "503 Service Unvailable". Is this a temporary problem?

Context

Browser : Chrome 72.0 (Supported features)
Operating System : Mac OS 10.14
Display : 2880 x 1800
Language : English 🇺🇸
DoNotTrack : enabled
Network : 10Mbps (down) / 4g (ECT)

screenshot
application.log

ERROR Error: Uncaught (in promise): undefined

Bug report

Description

Ton commentaire

Une erreur apparait dans les logs à l'ouverture de la popup de bruit.io

Context

Logs

Here are the last logs retreived
Time Type Description
17:10:01 200 GET http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeynRlQWpZ1zDH7GuECFo-2FAMv4HR-2BD9V7gVodGhXVHB0n7X3hYZbKvynEfDvtG-2FqAskZkhg-2BNWTv3jjgtPbLMlvGs-3D_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPaom0V8gqxG-2FWxO6wr3EOawKaInO85LASkqXOn9nmRbfGWfnsN8rpm71Zx0wHzeqKmr-2BLL6-2BNrComKXBmtcXt48anJMUgE95Bc5AeX0iNCn-2BpsdNnEM-2FlTWmNtb3GjVo9dxwRZvbq9VzBShkf4wRkbo-3D
17:10:00 => GET http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeynRlQWpZ1zDH7GuECFo-2FAMv4HR-2BD9V7gVodGhXVHB0n7X3hYZbKvynEfDvtG-2FqAskZkhg-2BNWTv3jjgtPbLMlvGs-3D_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPe4GrS9QGB0gOA9Cd6lhfy7wpTIc6YUUxzEW1n95B215-2FwueHyxK1SFu9KsrsOogEJNNt8W20B1OiOOjcAL0GIWYHwhSIoTuHg0HRis-2F1ur4qdWQSHXStNGXnlmfh1cORbW6BnsFrsoFfb5mAYvyI3g-3D
17:10:00 200 POST http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeykWSxlhMD-2BHDPB1FFSOWKn98vzLPh-2BcsX4bDnBYW6NY-2B2ybYfVDBZXReL-2FhlbmYP1MDwDUja79Q77elOddV15JpupdA8uyrdIWtq-2FnKduZ1oYq2NTUMGiboO4NOZldCSOfWbetmd-2FwlgnCc1tqywWcA-3D_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPbIZVfpCInBjyhBY74jlh1Dw60boF6iCrfXbCpxiwu25UfWlZEtrFQmXEvxRLsig9Fst8ISTVjfgCaqgtr7fE2CvOnJjIZigZpTUXrOA5eyMxql8-2BSnMHCoA1QCzwwwNJLqutnXqJQf5epKftjOKrTw-3D
17:09:59 => POST http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeykWSxlhMD-2BHDPB1FFSOWKn98vzLPh-2BcsX4bDnBYW6NY-2B2ybYfVDBZXReL-2FhlbmYP1MDwDUja79Q77elOddV15JpupdA8uyrdIWtq-2FnKduZ1oYq2NTUMGiboO4NOZldCSOfWbetmd-2FwlgnCc1tqywWcA-3D_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPXpLDLD3PCoaYKeNFnc-2FPttHBffAjc0yAze3-2BkqhgL2eSO82EH92jCwzrWEZ-2Fr7eqw7mUmXdW38LW4QBJvyvtSXlKI813i-2BPUYr11NQ9i3IaDcaFOLv8M-2FxQQPKL-2BZ0VC4lFKs4rIQp6tZdvCC8ZQCo-3D
17:09:59 200 POST http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeysV60-2FLSbnWEE7mYGXxz6xR44VhGSv4FOAMEHFgUfrlhr8i1DYG-2B2L06un7VYgiOXkgAo-2BnO2ySzV28EDUPMgG-2F2wU-2B60L1Zi9RsqB2cLvzN_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPZaWdVVh9lZ7vDYo9RHZUuJJ-2FwAsW-2FW1DV40WQFRo8L7z8pe0WcslsT0JWr3jkl6ffATuttvXBuo7fu53nBZFamBecLfy7EqgiKYMOih48L6krqIxoF44MbVCn7H599QIpFmv-2FY0BsL6clCTWKWkrnQ-3D
17:09:59 => POST http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeysV60-2FLSbnWEE7mYGXxz6xR44VhGSv4FOAMEHFgUfrlhr8i1DYG-2B2L06un7VYgiOXkgAo-2BnO2ySzV28EDUPMgG-2F2wU-2B60L1Zi9RsqB2cLvzN_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPbiDt2sVjdaFTjCYAJLyrImAQB0pNxWrQPbZHpnFl3mHR5eO1VObpP0Cl3FY-2Be5gYsMogDJdei1lL9qC5yQS6chq1jTL74Cp3Sx0ecK5lUbaOFynoGz0zPEUlazbPuxO4gOcyH5XuItGqPdxtZPi6Zw-3D
---

Generated by Bruit.io
If you like it, let it be known ! [![Github Logo](http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeygAq-2FIMagqkL6LNXh8MTn1WlKJ5JHXmMkLI0qNV9mQIGe4GJkEUZPC-2FJic99ptn1vg-3D-3D_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPTonrHoVvP2LF-2FbHZwxTafk89y47FytngjCxdCzOHHlgZt2n0CVHCPxLB1-2FmDozDTfRoJ7yR2K57gKLUDRZwF7x9DFByE9vRyBZnFoIvfQOaalkul3AKmb-2BSK5YfOoUl9RVcrB1D1Gt6A0ujX6xcVzg-3D](http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeyjLwDereG4Q2sQ74YhHgtKUDsnhLDvp-2BNa3pk0-2FBk5OB_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPbZCwWb6GfYtpXm06r7ECMvb86W0aqpRNfK277Kd3J4CA3kCkd7z3KeGE00jFBzdNue7h57iWL6VLjiT8IkFtoA8zIKUXIw1NEyHBNKxPkqL5DFbV-2FnFCZMJAN4-2F-2FyVxCqTwKCQoNzrZ-2Bn-2FfnfCz098-3D [![Twitter Logo](http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeygAq-2FIMagqkL6LNXh8MTn1Xa6v5SjGFsd-2Bd-2FChxxH7WxGnbzzEcJTsDcKW0zMMgSNA-3D-3D_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPbf1V25YvF4THkjKy-2Fwzt-2Bn6Iadwy6-2FFPLf5MP6L1yg1u8lpG1MyW7jpRpkrlaVxIKggkwtfjlZLMcVFFfY60Yz48IkI5fayl0GJ8NbPl1F6kP0SpPYIPfUkRF3afSRr-2FtmaKqmCzy3Qsgp3voDC8mI-3D](http://url5335.bruit.io/wf/click?upn=p-2Fez452mTwoaza0QVfBeymH9g7G11Fps2bgbyUDDzJOL3MJLBCqjJts66vpCcWCGzId6V0O2nkKCm6OpVzjo3pKLavWANQMEurJE31Mr0uMXx78SMwioPbOa6nuSZbd1uVdnW3BQ9YFKoVLZDCiH239-2FBd2SfK68FTxOiCUg6NVN-2F0iClYts7WKd1yMOlpJO_vpp7fe2k-2B4xFEZnWCLA5s1Wx3sSKVyvdsLS-2B9gYY6-2Fv02H-2F65SdThYNwGD60D73vz1gjBD3N8lo-2B9EEgVUA2d6-2Ftekx3yLyeJ01pm5qBKKQ1vlT9Oxp0Jvyw6YxKcJ7bEyyWZqDS0s15Fd3IdpOiPd3jZgyxBT7r-2Bl-2BHmFClrN9VFBXz2-2FLgGnvMOgcxxxRuFjcdnXOsf0Cxqj4vhP-2F-2FJYELLF8-2FQhmZACsRGot6KZ85ZmYnDi3qpfu1BfMcpKjMaVli-2BfTO8a8Y1uN7g90KE9GEBKAadvCLNGrDK5YvAY4-3D ~bruit.io

application.log

screenshot

Generate Jasmine test files from user events

The idea would be to generate a functional test file which would reproduce the user's input on a project so the developer can reproduce the steps more easily.

Il existe des librairies "d'espionnage" qui génère des tests à partir des évènements utilisateurs

Impossible de typer les données sur le composant

Constaté sur PITANGOO web

J'ai créé un attribut bruitData que je passe en paramètre au composant bruit.io

footer.component.ts

public readonly bruitData: BrtData[] = [];

footer.component.html

<bruit-io id="bruit" [config]="bruitConfig" [data]="bruitData">

J'ai une erreur de compilation :

ERROR in node_modules/@bruit/component/dist/types/stencil.core.d.ts(133,23): error TS2315: Type 'CustomEvent' is not generic. node_modules/@bruit/component/dist/types/stencil.core.d.ts(202,46): error TS2304: Cannot find name 'HTMLDialogElement'.

En supprimant le type, ça passe :
footer.component.ts

public readonly bruitData = [];

viewport reference

si on place le composant dans un element avec une propriété transform, perspective ou filter qui est différente de none... la modal ce place par rapport a cet attribut.

https://developer.mozilla.org/fr/docs/Web/CSS/position

solution :

  • placer le composant a la racine (body) et faire un bouton qui declenche un evenement qui ouvre la modal ?
  • la modal fait un appendChild sur body ?

URL initiale

Ajouter dans les logs l'URL au démarrage de l'app (la toute première, avant tout changement)

Styling of widget

Assuming that the style in the screenshot does not reflect the intended style of the widget, the style rules should be more targeted to the widget's elements so any local stylesheet doesn't interfere.

Or make it easy to have user-defined styles.

Unless I am missing something in the docs about styling?

image

HttpTool.overrideXMLHttpRequest tries to read an inaccessible property

Bruit version: @bruit/component 1.3.13

I'm submitting a ... (check one with "x")
[X] bug report
[ ] feature request
[ ] support request

Current behavior:
Our error logging system encountered this error:

Failed to read the 'responseText' property from 'XMLHttpRequest': The value is only accessible if the object's 'responseType' is '' or 'text' (was 'blob').

Method: HttpTool.overrideXMLHttpRequest

Line: HttpTool.logResponse(method, e.target.responseURL, e.target.status, e.target.responseText);

https://datanator.info/static/node_modules/@bruit/component/dist/esm-es5/bruit-core_4.entry.js
https://datanator.info/static/node_modules/@bruit/component/dist/esm-es5/bruit-core_4.entry.js:8481:in responseText
https://datanator.info/src/instrumentation/xhr.ts:41:in 

Corriger le bug qui interprète les champs de type textarea en checkbox

Resources:
Before submitting an issue, please consult our docs.

Stencil version: (run npm list @stencil/core from a terminal/cmd prompt and paste output below):

 -- (empty)

I'm submitting a ... (check one with "x")
[x] bug report
[ ] feature request
[ ] support request => Please do not submit support requests here, use one of these channels: https://forum.ionicframework.com/ or https://stencil-worldwide.slack.com

Current behavior:

image

Expected behavior:

"Votre commentaire" should display and behave as a textArea

Steps to reproduce:
import and use bruit 1.3.9
try and send a report

Related code:

  form: [
    {
      label: 'Votre commentaire',
      type: 'textarea',
      required: true
    },
    {
      id: 'agreement',
      type: 'checkbox',
      label: 'Je donne mon accord pour l\'ajout d\'informations techniques à mon message',
      value: null
    }
  ]

Other information:

Mettre à jour le README

Le README n'est pas à jour pour Angular (ex: on doit importer la méthode defineBruitElements depuis @bruit/component/dist/init)

When the agreement checkbox is present, it should be required

I'm submitting a ... (check one with "x")
[X ] bug report
[ ] feature request
[ ] support request => Please do not submit support requests here, use one of these channels: https://forum.ionicframework.com/ or https://stencil-worldwide.slack.com

Current behavior:
Currently, when the "agreement" is set to required: true and the agreement checkbox is not checked, the modal window does not display an error when users click the "send" button.

Bruit configuration

bruitConfig: {
  form: [
    {
      id: 'agreement',
      type: 'checkbox',
      label:
        'I also agree to send a screenshot and technical information about my browser',
      value: false,
      required: true,
    },
  ],
}

JavaScript error

An invalid form control with name='agreement' is not focusable.

Expected behavior:

  • The agreement checkbox should be marked with * when required: true
  • When the agreement checkbox is required, the checkbox is unchecked, and a user clicks the "send" button, Bruit should display an error message which indicates that the checkbox must be checked.
    • Alternatively, the "send" button should be disabled when the form is invalid.

Copying and pasting buggy on app website

Copying and pasting does not work on the website. A dialog appears that states 'Copied to clipboard' but it's not.

Latest MacOS
Latest Stable Chrome

Using cmd + c & cmd +v OR right click, copy

initializeComponent tries to read a property of an undefined variable

Bruit version: @bruit/component 1.3.13

I'm submitting a ... (check one with "x")
[X] bug report
[ ] feature request
[ ] support request

Current behavior:
Our error logging system encountered this error:

Cannot read property 'isProxied' of undefined
at initializeComponent of @bruit/component/dist/esm-es5/core-60c61d30.js:1436

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.