Git Product home page Git Product logo

ohmyform / ohmyform Goto Github PK

View Code? Open in Web Editor NEW
2.7K 37.0 420.0 23.62 MB

✏️ Free open source alternative to TypeForm, TellForm, or Google Forms ⛺

Home Page: https://ohmyform.com/

License: GNU Affero General Public License v3.0

Dockerfile 0.86% Python 0.47% Shell 0.15% Procfile 0.01% JavaScript 0.97% HTML 0.02% TypeScript 96.82% SCSS 0.69%
forms ohmyform tellform typeform googleforms docker container docker-compose embedable selfhosted

ohmyform's Introduction

OhMyForm

OhMyForm

Project Status Latest Release Docker Pulls Lokalise Last Commit

Deploy

Demo Username and password are just demo. We will reset the demo instance at least once for every new release and possibly more often so don't rely on it for sending actual forms expect no notice for resets.

An open source alternative to TypeForm that can create stunning mobile-ready forms, surveys and questionnaires.

Discord Financial Contributors on Open Collective

Table of Contents

Features

- Multi-Language Support
- 11 possible question types
- Editable start and end pages
- Export Submissions to XLS, JSON or CSV
- Native Analytics and Google Analytics Support
- Embeddable Forms
- Forms as a Service API
- Customizable Notifications on Form Submission
- Web Hooks on Form Submission
- Deployable with Heroku and DockerHub
- PostgreSQL and sqlite

On the Roadmap

- Custom Subdomains for each User
- Implement encryption for all form data
- Add Typeform API integration
- Add plugin/3rd party integration support (aka Slack)
- Create wiki for easy installation and setup
- Add Stripe/Payment Form field
- Add Custom Background and Dropdown Field Images
- Add File Upload Form Field

How to Contribute

Please checkout our contributing guide on ways to contribute to OhMyForm.

Quickstart

Follow documentation hosted on OhMyForm.com it will be the main and hopefully only location to obtain the up to date documentation.

If you pull the repository do not forget to execute: git submodule update --init

Some technical Insights

API

UI

Where to get help

Discord

Alternative Social

Twitter Instagram

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

ohmyform's People

Contributors

adrianp- avatar ahmedkrmn avatar chostakovitch avatar cuuupid avatar dlackty avatar felixcheruiyot avatar gitter-badger avatar james9074 avatar jmhbnz avatar josx avatar kmjayadeep avatar lalop avatar leo-orellana avatar leonardloo avatar leopere avatar loleg avatar mattiasaxell avatar mickaelandrieu avatar monizb avatar monkeywithacupcake avatar patcon avatar peterdavehello avatar real-or-random avatar spekulatius avatar spencerflagg avatar spkjess avatar stevesloan avatar toanalien avatar whitef0x0 avatar wodka 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  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  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

ohmyform's Issues

User Tiers

Admin, Moderator, User.

Admin meaning one that can modify, view, submit and delete everything.
Moderator one that can modify, view, submit, and delete some things.
User one that can view and submit some things.

Ultra-simple Discord-Esque permissions system might be nice long term but not likely necessary right now.

Trying to install dependencies locally causes post-install bower script to fail

When I tried running npm install in the root directory locally after cloning the repository the bower install threw an error:

bower                     ECONFLICT Unable to find suitable version for jquery

Not sure if this is required to get the app running locally but since it looked like a genuine error I decided to report it. I might even have a fix for this that I will make a PR of so that you can decide whether you want it or not.

Error on signup

What's this issue about?

App crashes when a user tries to sign up

Expected behavior

user should be signed up without crash

Actual behavior

app crashes

Steps to reproduce

enable signup and signup a new user

Environment


Dockerfile linting

https://github.com/hadolint/hadolint/wiki/DL4000 for the now deprecated MAINTAINER directive can be replaced with LABEL maintainer

https://github.com/hadolint/hadolint/wiki/DL3016 for npm and apk add we should likely be pinning versions, its more maintenance for us as the repository maintainers but its smart long term as we won't break peoples installations in the future if we do it this way. Either this or we should ensure to get some CI/CD tests setup to validate that what we push is 100%

Icons are not displayed in a fresh instance

What's this issue about?

Icons aren't showing up.
grafik
grafik

Expected behavior

The Icons from the rating and the trash icon to delete an entry in the form should be displayed.

Actual behavior

There aren't any icons on the site. Do I something wrong?

Steps to reproduce

I followed this steps on a freshly installed ubuntu server 18.04:

Step One: git clone https://github.com/ohmyform/ohmyform.git
Step Two: Modify anything you want to in the source.
Step Three: cd ohmyform
Step Four: docker-compose up -d
Step Five: docker-compose ps

Environment

Ubuntu Server 18.04.3

User Management in Backend

What's this issue about?

Right now users can register but there is no way to manage them

Expected behavior

add at least a minimal user management in the backend

Actual behavior

Steps to reproduce

Environment

About the Feature

Fix all hotkeys and keyboard shortcuts

In 2019 the primary method of access to the internet is via mobile however there are many users still on Desktops and Laptops this is still a significant number of users that could use the hotkeys to power through making selections and answering questions in OhMyForm. Our goal will be to have the UI never get in the way of getting the metrics/answers you need.

One of the blocking issues here is simply that the hotkeys only really work reliably for English and even with that, it's pretty twitchy. We really need to make sure that users can reliably use every UI element without an issue before we go much further into development.

Angular or Vue

What's this issue about?

right now ohmyform runs on angularjs (1.7.8)

Since an upgrade to angular (2 and up) will require a rewrite perhaps switch to another platform that is easier to extend.

Features I'd like to see then:

  • modern development stack with typescript (less bugs)
  • more components (there should not be the mixing of files as it is right now)
  • get rid of hashbangs -> each path should be rendered and therefor be seo friendly
  • reduce dependencies of various libraries
  • expose api on clean endpoints and provide redoc / swagger for api access
  • add proper api key handling

my personal preference is to switch to VueJS (with NuxtJS to handle the frontend - and NestJS to provide the API)

Improve Subdomain handling

What's this issue about?

right now a lot of checks are done just to figure out the right subdomain.

Expected behavior

without configuration a regular domain should be regarded as the default domain. and subdomains as subdomains (user names)

somedomain.com
user1.somedomain.com

further the root domain sould be settable to a subdomain with an env variable.

Actual behavior

weird logic that tries to do something similar

Steps to reproduce

Environment

About the Feature

[docker] websocket connection doesn't work

Steps to reproduce:

  • Go to design tab and try to change any field. Open console and see the error
WebSocket connection to 'wss://ohmyform.mydomain.com:5000/socket.io/?EIO=3&transport=websocket' failed: Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR

I use traefik, here is my docker setup:

version: "3"

services:
  redis:
    image: redis
    networks:
      - backend

  mongo:
    image: mongo
    volumes:
      - "${STORAGE}/mongo:/data"
    networks:
      - backend

  ohmyform:
    image: ohmyform/ohmyform:0.2.3
    #build: .
    #volumes:
    #  - ".:/opt/app"
    environment:
      CREATE_ADMIN: "TRUE"
      SOCKET_URL: 'localhost:5000'
      SOCKET_PORT: "5000"
      SOCKET_PORT_EXTERN_VISIBLE: "TRUE"
      MONGODB_URI: mongodb://mongo/ohmyform
      REDIS_URL: redis://redis
      MAILER_SMTP_HOST: mail
      MAILER_SMTP_PORT: 1025
    # command: grunt dev # override command to have livereloading on file change
    ports:
      - "5000:5000"
    depends_on:
      - mongo
      - redis
    networks:
      - backend
      - webproxy
    labels:
      - "traefik.enable=true"
      - "traefik.backend=ohmyform"
      - "traefik.frontend.rule=Host:ohmyform.mydomain.com"
      - "traefik.frontend.priority=20"
      - "traefik.port=5000"
      - "traefik.docker.network=webproxy"
      - "traefik.webservice.frontend.entryPoints=http,https,ws,wss"

  mail:
    image: mailhog/mailhog
    ports:
      - "5050:8025"
    networks:
      - backend

networks:
  backend:
  webproxy:
    external: true

Image selection question type

What's this issue about?

Image selection question type.

About the Feature

Provide the ability to have a multiple-choice question whereby the available options are images, that are uploaded via the browser. Typeform has this functionality, and also provides the option of setting regular size or supersize images – also with the option of randomising the order.

Discord invite link expired

Hi,

Sorry -- this is probably the wrong place, but couldn't find anywhere else on the Contact page.
I tried to join your Discord project but I am told the link has expired.

Cheers

Sam

Signup Not Working - Both on main website and Docker build

What's this issue about?

The signup page does not work and it when signup is clicked, it shows a message:
"Couldn't complete registration due to errors:
{"message":""}"

When I try to login, it says user does not exist.
When I try to reset password, it says the user's email is not verified, but I did not get any email

Expected behavior

Sign up the user without errors and send a verification email

Actual behavior

Throwing error message and no email being sent

full stand alone documentation

About the Feature

I can't use docker on all my clients so I would like to see a full installing documentation.

Most environments already got DB and mail servers so there's no need to duplicate work.

Even if is specific to a distro it's better than nothing and the community will fill the gaps when needed.

Order of Precedence and Website documentation of such.

Configuration of OhMyForm should be determined with an order of precedence for configuration.

For example, one option would be that settings in a docker-compose.yml file would take precedence over all other configurations made. Then next would be considered any configuration files passed to the container via volumes. Then the defaults.

This should be discussed a little and pro's and conned out a little bit at least before we commit to a decision.

Demonstration Mode envvar flag.

It would be good to see a Demo Mode where the app could respond differently and have notifications on the login page with the login creds for root//root and user//user accounts.

Language Support Mandarin

Metrics collection reports that it would be smart to support Mandarin as well to increase adoption.

Minor UI Improvement: On first question obtain focus.

Google.com immediately obtains your cursor for instant searching, this should be the behavior with OMF we absolutely should have someone immediately able to start delving into the form. We want to aim to have forms be sleek, fast, and responsive. Any steps between the user beginning and ending their QA session are steps that should be considered for removal. Obviously, we have to keep some steps but reductive single purpose views where the goal of the web view is immediately obvious should be built into every step.

Self Promotion

We need to consistently link to how to contribute/work with to OhMyForm. If people haven't debranded OhMyForm by option for deployment in their environment make sure to link back to our contributions page/website whatever we prefer.

My idea here is to encourage a full circle of github/website > dev > users > contributions conversions. The users should intuitively know how to get back to us if the DevOps deploying OhMyForm choose to thank us via letting us have something similar to the "View on Github" red tape banner thing on the top right of some projects.

Plesk installation

What's this issue about?

I would like to make this software work by not issuing a docker compose. Instead, I would like to download the core image from the Docker repository via the Plesk interface, and connect it to local instances of Redis, MongoDB and so on.

Expected behavior

I would expect to have an environment variable that I could customize with the address of the MongoDB database.

Actual behavior

Seems to be hardwired, or not published.

Steps to reproduce

Install the docker image in a Plesk interface, then try to run it. It will not find the MongoDB database, so if you start one you'll want to wire it up but it's not in the env vars of the ohmyform docker image.

Environment

Plesk Onyx 17.5 on Centos 7.

About the Feature

I would like to receive some help in making this work on Plesk, a web panel used on a large percentage of web servers worldwide. This would mean that OhMyForm could work in a shared environment much easier.

examples page not found

What's this issue about?

The readme links to https://ohmyform.com/examples but "This does not exist".

Expected behavior

no broken links

Actual behavior

broken links

Steps to reproduce

click on link

Environment

  • NixOS 19.09.1685.e9ef090eb54 (Loris)
  • Chromium 78.0.3904.108
  • on a Thinkpad X230
  • what else do you need?

Create a developers guide and add it to the website.

We need documentation where we enable developers more effectively, so far we've nailed helping people get installed and hopefully reducing the degree of drift between configurations where we have to account for colossal variance rather than the goal but we need to concern ourselves with Developer Experience as well as Operator Experience and User Experience.

No hardcoded strings in the UI

If we want to have proper localization we are going to need languages files that the web app can pull the strings from, also important would be some method to establish the hotkeys required for making a selection in the forms.

Missing links in README.md table of contents

What's this issue about?

README.md table of contents has links to missing content, i.e. "How to contribute" and "On the Roadmap for v1.0.0".

Expected behavior

Clicking on the link in table of content should redirect to the content.

Actual behavior

Nothing happens.

Steps to reproduce

Click one of the aforementioned links in the table of contents.

Update nomenclature before we get popular.

Ideally, we should be avoiding getting stuck with TellForm names in any of the examples or database structure long term so if we can sift through with a find & replace function and remove everything without removing direct references to the upstream.

Form Settings cause crash if the form just got a new field

What's this issue about?

Editor crashes when trying to open form settings

Expected behavior

editor should not crash

Actual behavior

angular.js:15567 TypeError: Cannot read property 'map' of undefined
    at controller (configure-form.client.directive.js:19)
    at Object.invoke (angular.js:5141)
    at S.instance (angular.js:11704)
    at p (angular.js:10517)
    at angular.js:10931
    at angular.js:17945
    at m.$digest (angular.js:19112)
    at m.$apply (angular.js:19500)
    at HTMLAnchorElement.<anonymous> (angular.js:28955)
    at HTMLAnchorElement.dispatch (jquery.min.js:2)
    at HTMLAnchorElement.v.handle (jquery.min.js:2)
    at HTMLAnchorElement.c (raven.js:337)

Steps to reproduce

open any form and add a new field, then go to Form Settings

Environment

latest docker

About the Feature

Demo server died after type error.

root@GoldenGod:~/ohmyform# docker-compose ps
         Name                        Command               State                 Ports
----------------------------------------------------------------------------------------------------
ohmyform_mail_1           MailHog                          Up       1025/tcp, 0.0.0.0:5050->8025/tcp
ohmyform_mongo_1          docker-entrypoint.sh mongod      Up       27017/tcp
ohmyform_mongoexpress_1   tini -- /docker-entrypoint ...   Up       0.0.0.0:5051->8081/tcp
ohmyform_redis_1          docker-entrypoint.sh redis ...   Up       6379/tcp
ohmyform_tellform_1       docker-entrypoint.sh node  ...   Exit 1
root@GoldenGod:~/ohmyform# docker-compose logs -f --tail=100 tellform
Attaching to ohmyform_tellform_1
tellform_1      | {"message":"\u001b[0mGET /static/lib/angular-ui-date/src/date.js \u001b[32m200 \u001b[0m0.485 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/lib/tableExport.jquery.plugin/tableExport.min.js \u001b[32m200 \u001b[0m0.493 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/lib/ngclipboard/dist/ngclipboard.min.js \u001b[32m200 \u001b[0m0.431 ms - 681\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/lib/bootstrap-switch/dist/js/bootstrap-switch.min.js \u001b[32m200 \u001b[0m0.343 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/lib/angular-bootstrap-switch/dist/angular-bootstrap-switch.min.js \u001b[32m200 \u001b[0m0.422 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/lib/ng-quill/src/ng-quill.js \u001b[32m200 \u001b[0m0.371 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/config.js \u001b[32m200 \u001b[0m0.573 ms - 750\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/application.js \u001b[32m200 \u001b[0m0.276 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/dist/populate_template_cache.js \u001b[32m200 \u001b[0m0.364 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/dist/form_populate_template_cache.js \u001b[32m200 \u001b[0m0.497 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/core.client.module.js \u001b[32m200 \u001b[0m0.355 ms - 140\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/forms.client.module.js \u001b[32m200 \u001b[0m0.376 ms - 322\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/users.client.module.js \u001b[32m200 \u001b[0m0.340 ms - 129\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/config/core.client.routes.js \u001b[32m200 \u001b[0m0.450 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/controllers/header.client.controller.js \u001b[32m200 \u001b[0m0.313 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/services/menus.client.service.js \u001b[32m200 \u001b[0m0.494 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/services/subdomain.client.service.js \u001b[32m200 \u001b[0m0.620 ms - 207\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/config/forms.client.config.js \u001b[32m200 \u001b[0m0.522 ms - 961\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/config/forms.client.routes.js \u001b[32m200 \u001b[0m0.419 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/config/users.client.config.js \u001b[32m200 \u001b[0m0.289 ms - 801\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/services/forms.client.service.js \u001b[32m200 \u001b[0m0.257 ms - 733\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/config/users.client.routes.js \u001b[32m200 \u001b[0m0.394 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/controllers/authentication.client.controller.js \u001b[32m200 \u001b[0m0.384 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/controllers/change_password.client.controller.js \u001b[32m200 \u001b[0m0.428 ms - 790\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/controllers/settings.client.controller.js \u001b[32m200 \u001b[0m0.418 ms - 784\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/controllers/password.client.controller.js \u001b[32m200 \u001b[0m0.507 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/controllers/verify.client.controller.js \u001b[32m200 \u001b[0m0.437 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/services/auth.client.service.js \u001b[32m200 \u001b[0m0.436 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/services/authorizer.client.service.js \u001b[32m200 \u001b[0m0.270 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/services/user.client.service.js \u001b[32m200 \u001b[0m0.338 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/services/users.client.service.js \u001b[32m200 \u001b[0m0.498 ms - 270\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/config/i18n/english.js \u001b[32m200 \u001b[0m0.371 ms - 496\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/config/i18n/french.js \u001b[32m200 \u001b[0m0.278 ms - 426\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/config/i18n/german.js \u001b[32m200 \u001b[0m0.291 ms - 408\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/config/i18n/italian.js \u001b[32m200 \u001b[0m0.369 ms - 401\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/config/i18n/spanish.js \u001b[32m200 \u001b[0m0.484 ms - 405\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/config/i18n/swedish.js \u001b[32m200 \u001b[0m0.389 ms - 406\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/controllers/list-forms.client.controller.js \u001b[32m200 \u001b[0m0.473 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/controllers/admin-form.client.controller.js \u001b[32m200 \u001b[0m0.385 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/directives/edit-submissions-form.client.directive.js \u001b[32m200 \u001b[0m0.508 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/directives/edit-form.client.directive.js \u001b[32m200 \u001b[0m0.632 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/directives/configure-form.client.directive.js \u001b[32m200 \u001b[0m0.356 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/directives/design-form.client.directive.js \u001b[32m200 \u001b[0m0.336 ms - 348\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/directives/field-icon.client.directive.js \u001b[32m200 \u001b[0m0.465 ms - 873\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/directives/share-form.client.directive.js \u001b[32m200 \u001b[0m0.350 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/services/submissions.client.service.js \u001b[32m200 \u001b[0m0.425 ms - 437\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/services/form-fields.client.service.js \u001b[32m200 \u001b[0m0.258 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/config/i18n/english.js \u001b[32m200 \u001b[0m0.477 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/config/i18n/french.js \u001b[32m200 \u001b[0m0.354 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/config/i18n/german.js \u001b[32m200 \u001b[0m0.525 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/config/i18n/italian.js \u001b[32m200 \u001b[0m0.462 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/config/i18n/spanish.js \u001b[32m200 \u001b[0m0.426 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/users/config/i18n/swedish.js \u001b[32m200 \u001b[0m0.951 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/config/i18n/english.js \u001b[32m200 \u001b[0m0.362 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/config/i18n/french.js \u001b[32m200 \u001b[0m0.336 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/config/i18n/german.js \u001b[32m200 \u001b[0m0.331 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/config/i18n/italian.js \u001b[32m200 \u001b[0m0.320 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/config/i18n/spanish.js \u001b[32m200 \u001b[0m0.419 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/forms.client.module.js \u001b[32m200 \u001b[0m0.422 ms - 185\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/forms/admin/config/i18n/swedish.js \u001b[32m200 \u001b[0m0.352 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/directives/analytics-service.client.directive.js \u001b[32m200 \u001b[0m0.326 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/directives/key-to-option.client.directive.js \u001b[32m200 \u001b[0m0.270 ms - 810\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/directives/key-to-truthy.client.directive.js \u001b[32m200 \u001b[0m0.316 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/config/forms.client.config.js \u001b[32m200 \u001b[0m0.732 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/config/i18n/english.js \u001b[32m200 \u001b[0m0.587 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/config/i18n/french.js \u001b[32m200 \u001b[0m0.401 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/config/i18n/german.js \u001b[32m200 \u001b[0m0.377 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/config/i18n/italian.js \u001b[32m200 \u001b[0m0.352 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/config/i18n/spanish.js \u001b[32m200 \u001b[0m0.332 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/config/i18n/swedish.js \u001b[32m200 \u001b[0m0.447 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/controllers/submit-form.client.controller.js \u001b[32m200 \u001b[0m0.362 ms - 404\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/directives/field.client.directive.js \u001b[32m200 \u001b[0m0.428 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/directives/on-enter-key.client.directive.js \u001b[32m200 \u001b[0m0.451 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/directives/on-finish-render.client.directive.js \u001b[32m200 \u001b[0m0.475 ms - 859\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/services/current-form.client.service.js \u001b[32m200 \u001b[0m0.324 ms - 346\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/directives/submit-form.client.directive.js \u001b[32m200 \u001b[0m0.421 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/services/forms.client.service.js \u001b[32m200 \u001b[0m0.352 ms - 672\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/services/time-counter.client.service.js \u001b[32m200 \u001b[0m0.274 ms - 755\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/form_modules/forms/base/services/socket.io.client.service.js \u001b[32m200 \u001b[0m0.407 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/img/logo_white.svg \u001b[32m200 \u001b[0m0.542 ms - 9508\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET /static/modules/core/img/brand/favicon.ico \u001b[32m200 \u001b[0m0.527 ms - 15086\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mPOST /auth/signin \u001b[33m400 \u001b[0m3.025 ms - 46\u001b[0m\n","level":"info"}
tellform_1      | {"message":"\u001b[0mGET / \u001b[32m200 \u001b[0m68.976 ms - -\u001b[0m\n","level":"info"}
tellform_1      | {"error":{},"level":"error","message":"uncaughtException: Callback must be a function\nTypeError [ERR_INVALID_CALLBACK]: Callback must be a function\n  at Object.randomBytes (internal/crypto/random.js:48:11)\n  at Object.options.source (/opt/app/node_modules/rand-token/index.js:60:25)\n  at Object.generate (/opt/app/node_modules/rand-token/index.js:95:29)\n  at /opt/app/node_modules/email-verification/index.js:301:68\n  at /opt/app/node_modules/mongoose/lib/model.js:4462:16\n  at /opt/app/node_modules/mongoose/lib/query.js:4283:12\n  at model.Query.Query._completeOne (/opt/app/node_modules/mongoose/lib/query.js:1995:12)\n  at Immediate.Query.base.findOne.call (/opt/app/node_modules/mongoose/lib/query.js:2057:10)\n  at Immediate.<anonymous> (/opt/app/node_modules/mongoose/node_modules/mquery/lib/utils.js:116:16)\n  at runCallback (timers.js:705:18)\n  at tryOnImmediate (timers.js:676:5)\n  at processImmediate (timers.js:658:5)\n  at process.topLevelDomainCallback (domain.js:126:23)\n","stack":"TypeError [ERR_INVALID_CALLBACK]: Callback must be a function\n  at Object.randomBytes (internal/crypto/random.js:48:11)\n  at Object.options.source (/opt/app/node_modules/rand-token/index.js:60:25)\n  at Object.generate (/opt/app/node_modules/rand-token/index.js:95:29)\n  at /opt/app/node_modules/email-verification/index.js:301:68\n  at /opt/app/node_modules/mongoose/lib/model.js:4462:16\n  at /opt/app/node_modules/mongoose/lib/query.js:4283:12\n  at model.Query.Query._completeOne (/opt/app/node_modules/mongoose/lib/query.js:1995:12)\n  at Immediate.Query.base.findOne.call (/opt/app/node_modules/mongoose/lib/query.js:2057:10)\n  at Immediate.<anonymous> (/opt/app/node_modules/mongoose/node_modules/mquery/lib/utils.js:116:16)\n  at runCallback (timers.js:705:18)\n  at tryOnImmediate (timers.js:676:5)\n  at processImmediate (timers.js:658:5)\n  at process.topLevelDomainCallback (domain.js:126:23)\n","exception":true,"date":"Thu Jul 18 2019 00:18:42 GMT+0000 (Coordinated Universal Time)","process":{"pid":1,"uid":0,"gid":0,"cwd":"/opt/app","execPath":"/usr/local/bin/node","version":"v10.16.0","argv":["/usr/local/bin/node","/opt/app/server.js"],"memoryUsage":{"rss":138514432,"heapTotal":76132352,"heapUsed":65752632,"external":38177190}},"os":{"loadavg":[0,0.00732421875,0],"uptime":16108},"trace":[{"column":11,"file":"internal/crypto/random.js","function":"Object.randomBytes","line":48,"method":"randomBytes","native":false},{"column":25,"file":"/opt/app/node_modules/rand-token/index.js","function":"Object.options.source","line":60,"method":"options.source","native":false},{"column":29,"file":"/opt/app/node_modules/rand-token/index.js","function":"Object.generate","line":95,"method":"generate","native":false},{"column":68,"file":"/opt/app/node_modules/email-verification/index.js","function":null,"line":301,"method":null,"native":false},{"column":16,"file":"/opt/app/node_modules/mongoose/lib/model.js","function":null,"line":4462,"method":null,"native":false},{"column":12,"file":"/opt/app/node_modules/mongoose/lib/query.js","function":null,"line":4283,"method":null,"native":false},{"column":12,"file":"/opt/app/node_modules/mongoose/lib/query.js","function":"model.Query.Query._completeOne","line":1995,"method":"Query.Query._completeOne","native":false},{"column":10,"file":"/opt/app/node_modules/mongoose/lib/query.js","function":"Immediate.Query.base.findOne.call","line":2057,"method":"Query.base.findOne.call","native":false},{"column":16,"file":"/opt/app/node_modules/mongoose/node_modules/mquery/lib/utils.js","function":"","line":116,"method":null,"native":false},{"column":18,"file":"timers.js","function":"runCallback","line":705,"method":null,"native":false},{"column":5,"file":"timers.js","function":"tryOnImmediate","line":676,"method":null,"native":false},{"column":5,"file":"timers.js","function":"processImmediate","line":658,"method":null,"native":false},{"column":23,"file":"domain.js","function":"process.topLevelDomainCallback","line":126,"method":"topLevelDomainCallback","native":false}]}
tellform_1      | Thu, 18 Jul 2019 00:18:42 GMT uncaughtException: Callback must be a function
tellform_1      | TypeError [ERR_INVALID_CALLBACK]: Callback must be a function
tellform_1      |   at Object.randomBytes (internal/crypto/random.js:48:11)
tellform_1      |   at Object.options.source (/opt/app/node_modules/rand-token/index.js:60:25)
tellform_1      |   at Object.generate (/opt/app/node_modules/rand-token/index.js:95:29)
tellform_1      |   at /opt/app/node_modules/email-verification/index.js:301:68
tellform_1      |   at /opt/app/node_modules/mongoose/lib/model.js:4462:16
tellform_1      |   at /opt/app/node_modules/mongoose/lib/query.js:4283:12
tellform_1      |   at model.Query.Query._completeOne (/opt/app/node_modules/mongoose/lib/query.js:1995:12)
tellform_1      |   at Immediate.Query.base.findOne.call (/opt/app/node_modules/mongoose/lib/query.js:2057:10)
tellform_1      |   at Immediate.<anonymous> (/opt/app/node_modules/mongoose/node_modules/mquery/lib/utils.js:116:16)
tellform_1      |   at runCallback (timers.js:705:18)
tellform_1      |   at tryOnImmediate (timers.js:676:5)
tellform_1      |   at processImmediate (timers.js:658:5)
tellform_1      |   at process.topLevelDomainCallback (domain.js:126:23)
tellform_1      |
ohmyform_tellform_1 exited with code 1```

Rating option not working

What's this issue about?

When I am selecting rating as the option, nothing is shown

Expected behavior

On selection of Rating as form type, and 10 steps, I should be able to get 10 clickable shapes based on shape selection.

Actual behavior

Nothing is shown below the Title

Steps to reproduce

1. Launch ohmyform using docker and run it locally
2. Create a new form
3. Select Rating on Add New Field.
4. Try changing the number of steps and save the form.
5. View Form 

Environment

OS-X

Release 1.0

Description

recreate the complete api in nestjs - idea is to have it working and still be compatible with the current frontend.

Motivation and Context

#16
#37
#36
#35
#34
#23
#19
#15

Types of changes

rewrite, the mongo structure has to stay exactly the same!

Checklist:

  • create schema with mongoose
  • add authentication
  • add registration
  • authentication synchronisation between old and new code
  • form editing
  • form submission
  • user editing
  • form view

Design Refresh

What's this issue about?

New color schema with Flat design.

image10

Expected behavior

it should look modern

Actual behavior

it's not

About the Feature

ideally provide documentation as well in how to override the color schema

Focus first field

What's this issue about?

when opening a form the first field should focus

Expected behavior

focus first field of form

Actual behavior

no focus to any field

Steps to reproduce

create a form with at least one field, open the page to edit the entries

Environment

About the Feature

Language Compatibility Hindi

Metrics for the app has pointed out that Hindi and other languages from India would be a smart move for adoption.

Favicon is missing from the website

What's this issue about?

Favicon is in the project but it's not visible on the website

Expected behavior

User should see favicon in the browser tab

Actual behavior

User sees placeholder image

Steps to reproduce

Go to https://ohmyform.com/

Environment

Production

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.