Quantcast
Channel: Webix Blog
Viewing all 244 articles
Browse latest View live

How to Сreate Multi-line Inputs for Homogeneous User Data

$
0
0

Very often you have to design web apps that collect a lot of monotonous data from users, e.g., information about their previous employment, skills, working hours, preferences, etc. This is when you face the time-consuming necessity to write code for many repeated input fields and maintain value processing logic.

Surely, you can solve this issue by allowing users to write anything their heart desires in a textarea. But such an approach has nothing to do with a user-friendly interface. Besides, processing the collected information can become a real headache in this case.

A better solution is creating one dynamic control which you’ll be able to apply multiple times to your complicated forms. Sounds interesting? Read on to learn how to do it.

View code >>

Creating Your Own Multi-Line Component

It’s quite a common case when data received from users contains a lot of similar items, e.g. like in the following sample dataset with data for a CV:

{
  name:"Dr. Arienette Wolfe",
  email:"arienette.wolfe@lupinhospital.com",
  qualification:[
    { step:"University of Zurich, Doctor of Medicine", time:{ start:"2009-9-1", end:"2015-6-25" }},
    { step:"Internship at Princeton - Plainsboro Teaching Hospital, New Jersey, USA", time:{ start:"2015-9-1", end:"2016-5-30" }},
    { step:"Resident Doctor", time:{ start:"2016-6-1", end:"2019-1-11" }}
  ]
}

In real life, datasets might come with bigger bunches of similar data inside. It would be great to have a UI component that would instantly visualize these data in multiple inputs and collect user input afterwards.

Let’s create a component that will automatically build several lines of similar inputs:

– a text input for a step in a career,
– a DateRangePicker for selecting the date interval,
– an icon for adding new lines / removing the current line.

1. Creating the component

We will create the component on the basis of Webix Forminput, because this will allow you to align the component in a form alongside with other widgets, and name the component “multidate”.

webix.protoUI({
  name:"multidate",
}, webix.ui.forminput);

All “multidate” lines will look almost the same, so let’s define a method that will create them. Each line will be a form that contains a set of repeated input fields, so you will be able to use the Webix Form API for working with its values.

webix.protoUI({
  name:"multidate",
  _getForm:function(mode){
    const id = webix.uid();
    return {
      view:"form", id:id, borderless:true, padding:0, cols:[
        { view:"text", label:"Step", labelWidth:50, name:"step" },
        { view:"daterangepicker", name:"time", label:"When", labelWidth:50 },
        this._getIcon(mode,id)
      ]
    }
  },
  _getIcon(mode,id){
    return { view:"icon", icon:"wxi-"+mode+"-circle" }
  }
}, webix.ui.forminput);

Next, let’s create the main line on $init of the component and place it onto a layout inside the Forminput. After that, let’s store line IDs in the array for easy access to them.

webix.protoUI({
  name:"multidate",
  $init:function(config){
    config.body = {
      margin:5, rows:[this._getForm("plus")]
    };
    this.$ready.push(() => {
      this._inputs = [this.queryView("form").config.id];
    });  
  },
  _getForm:function(mode){ /* ... */ }
}, webix.ui.forminput);

Mind that the first line can only add more lines but it cannot be removed, that is why it has the ‘plus’ icon.

2. Adding new lines

Now let’s teach “multidate” to add more lines below the main one. Define the addInput() method that will add a line to the component. The configuration of a line is built by the same _getForm() method, just mind that the icon is different:

addInput:function(){
    const section = this.getBody().addView(this._getForm("minus"));
    this._inputs.push(section);
}

As you might have already guessed, the method should be called on clicking the ‘plus’ icon:

webix.protoUI({
 name:"multidate",
 ...
  _getIcon(mode,id){
    return {
        view:"icon", icon:"wxi-"+mode+"-circle",
        click:() => {
            if (mode == "plus") this.addInput();
        }
      };
  },
 addInput:function(view){ /* ... */}
}, webix.ui.forminput);

3. Removing lines

By now the user can only add the lines, so let’s add a way to remove them. Define a method that will first remove the ID of the line from the _inputs collection and then remove the line itself.

removeInput:function(id){
    for (var i = 0; i < this._inputs.length; i++){
      if (this._inputs[i] == id){
        this._inputs.splice(i, 1);
        break;
      }
    }
    this.getBody().removeView(id);
}

Next, attach removeInput() to the “minus” icon of a line.

webix.protoUI({
 ...
 _getIcon:function(mode,id){
    return {
        view:"icon", icon:"wxi-"+mode+"-circle",
        click:() => {
            if (mode == "plus") this.addInput();
            else  this.removeInput(id);
          }
      };
  },
  removeInput:function(id){ /* ... */ }
},webix.ui.forminput);

Now users can remove a line by clicking its “minus” icon.

4. Getting the value of the component

Ok, now we have a nice user-friendly control, but how can you get its data?

Here is the getValue() method. It gets the values of each form with the help of its getValues() method, pushes it into an array and returns this array:

webix.protoUI({
 ...
 getValue(){
    let values = [];
    this._inputs.forEach((view) => {
        values.push($$(view).getValues());
    });
    return values;
  }
}, webix.ui.forminput);

5. Setting values of component

The final frontier for the Multidate component on its path to becoming the fully functioning form control is filling this control with existing data – so that users can edit it.

This is how setValues() will do this. Firstly, count the number of lines in the incoming data. Next, count the number of lines that are currently in the component. Depending on the difference between the desired number of lines and the current one, there are three ways to follow:

If you need more lines for data, add all the ‘missing’ lines.
If you need fewer lines, remove all the extra ones.
Then, in a loop, you can set the values of each form with its setValues() method.

setValue(value){
    const dataLines = value.length;
    const inputs = this.getChildViews().length;
    const delta = dataLines - inputs;  

    if (delta > 0){
      for (let i = 0; i < delta; i++)
        this.addInput(this);
    }
    else if (delta < 0){
      for (let i = 1; i <= (-1)*delta; i++){
        this.removeInput(inputs-i-1);
      }
    }

    this._inputs.forEach((view, i) => {
      $$(view).setValues(value[i]);
    });
}

Live demo >>

What You Can Do Next

Create more components 🙂 For example, if you want a similar multi-line widget, but with different inputs, create it on the base of Multidate and redefine the _getForm() method. Have a look at this snippet. It’s a multitime component with dropdown lists for inputting working hours.

webix.protoUI({
  name:"multitime",
  _getForm(mode){
    const id = webix.uid();
    return {
      view:"form", id:id, borderless:true, padding:0, margin:10,
      cols:[
        {
          view:"multiselect", label:"Day(s)", labelWidth:50, name:"day",
          options:["Monday","Tuesday",/* ... */]
        },
        {
          view:"richselect", name:"time", label:"Time", labelWidth:50,
          options:["11:00 AM - 15:00 PM","14:00 PM - 19:00 PM"]
        },
        this._getIcon(mode,id)
      ]
    };
  }
}, webix.ui.multidate);

Live demo >>

Bottom line

Okay, guys, now you have an awesome scalable input that makes both sides happy. Users have a smart input for typing or selecting smaller bits of information, and developers have a smart solution that can create inputs and process data.

Webix has a bevy of controls and widgets for various purposes. Even if you can’t find the right control, you can always get away with this issue by customizing the existing components or creating your own. If you want to share your know-how with us, feel free to drop a line in the comments section below.

The post How to Сreate Multi-line Inputs for Homogeneous User Data appeared first on Webix Blog.


Webix January 2019 Follow-up

$
0
0

The first month of 2019 has passed very quickly. We are happy to highlight for you our most significant news and interesting articles of January.

Webix highlights

• Good news! Webix got the “Rising Star” and “Premium Usability” awards from the experts of FinancesOnline. We are proud that Webix was announced one of the top JavaScript libraries for being highly intuitive, user-friendly, and having an excellent design. Webix was also noted for perfect customer support and education. In general, FinancesOnline experts acknowledged Webix JS library as an easy-to-use solution which is suitable even for junior software developers.

• We have a new Youtube channel – Webix Team. Don’t miss the chance to subscribe and get the hottest Webix news, overviews, and tutorials.

• Webix has been updated to its current version – Webix 6.1.6. It includes more than 20 upgrades. Webix 6.1.6 is equipped with component modifications to such widgets as datatable, combo, chart, form, comments, and others. We highly recommend you to update your license in order to get all the enhancements.

Webix workshop

• Are you tired of writing code for many repeated input fields? Follow the link to learn how to create Webix-based multi-line inputs for monotonous user data.

• Do you need to develop a business web application for data storage quickly and efficiently? Webix can help you do it with only 12 lines of JavaScript code! Seems to be unreal? Read the article about the Webix magic and see for yourself.

The post Webix January 2019 Follow-up appeared first on Webix Blog.

Webix 6.2 Release: Improved loading logic, tooltips everywhere and the new drag-n-drop mode

$
0
0

Webix has made yet another step to perfection. In version 6.2, you will find stylish tooltips for any part of the app and the update for server proxies that will help you load and save data more conveniently. Your users will have a visual export of charts to PDF and better drag-n-drop in data components. And we have other good news: Webix Jet 2.0 is out. You will find more goodies below.

Webix 6.2 Release: Improved loading logic, tooltips everywhere and the new drag-n-drop mode

Webix Tooltips for Widgets and Controls

One of the most awaited features came into this world as now you can add Webix tooltips not only for Webix data components, but also to datatable headers and footers, controls, templates, and any HTML elements.

Webix tooltips for widgets and controls

Export to PDF Updates

Export to PDF has become better, because now you can:

  • export widgets as images, which is especially important for Chart and other canvas-based views,
  • export several views at a time.

Webix Export to PDF improvements

DND Updates

Drag-n-drop received two updates. First, there is the new mode for dragging – move. The new drag-n-drop mode works similarly to the default one but provides a nicer user experience. The order of elements and their positions will change as you drag an element.

Webix drag move

Besides, the order mode benefited from performance and style of the new move mode, for details go to the What’s new page.

Updates for Modal Boxes

Modal boxes also entered the wonderful realm of promises. For example, when you create a confirm box, it returns a promise that resolves or rejects when the user clicks a button.

webix.confirm("Are you sure you want to exit?")
    .then(function(){
        this.$scope.exit();
    })
        .fail(function(){
            // do nothing
        });

Another good news is that modal boxes can be correctly initialized for an HTML container and received a bunch of other updates and fixes.

Updates in Proxy Mechanism

In Webix 6.2, proxies have become simpler and more straightforward. You can customize loading and saving pattern with conventional Promise API. For example, now it is easy-peasy to load data with a POST request with parameters:

view:"datatable",
url:{
    $proxy:true,
    load:function(view, params){
        return webix.ajax().post("/server/data", { param:1 });
    }
};

For details, check out the What’s new page.

Filemanager and Spreadsheet Samples to NodeJs

Finally, all package samples have migrated to NodeJs. Now you have ready-made backend solutions that can be changed and used. To view samples locally, you will not need to configure a database, PHP or an Apache server, you will be able to start local server and view the samples after running these commands:

npm install
npm start

Webix Jet 2.0

This is a big day not only for Webix, but also for our microframework Webix Jet. The total size of the source code was reduced by 5 KB, and Webix Jet became even better due to a bunch of awesome updates.

New Features and Improvements

  1. The ability to show views in new tabs.
  2. The ability to show windows like other views by including them in the app URL.
  3. Subviews in apps with their own app URLs, which is very useful for complex apps, the parts of which have complex structures of their own and work independently.
  4. Zero-friction app in app usage.
  5. The ability to use all the settings of HashRouter to configure UrlRouter, because they share all settings now.

Webix Jet 2.0

Updates for plugins

1. Menu plugin

You can set the Menu plugin in the way that it does not go to a different path, but changes a certain URL parameter.

2. User plugin

Earlier, unauthorized users could see only the “login” page. Now you can add other pages that all users are allowed to access.

Webix Jet 2.0

3. Locale plugin

The Locale plugin received several updates:

  • Additional setting for using Webix locales alongside with the Jet app locale.
  • If a lot of text in your app needs to be translated, you can split localizations and load them when they are needed.
  • You can apply settings for Polyglot.

Using Webix Jet without Webpack

If you really want to, you can drop Webpack and include Jet source code directly. npm contains two versions of Jet JS code: ES6 and ES5, and you should include the latter. When you include the file, use Jet as:

class MyApp extends webix.jet.JetApp { ... }

Using Webix Jet with Webpack and Importing Webix as Module

We strongly recommend you to include Webix as a script, but if you really need to create a single bundle with Webix and your app code, you can do it the right way.

Old IE Support

…is over 🙂 From now on, Webix Jet supports IE11+ only, and the same fate awaits Webix in the future.

Other Updates

This release also includes other useful updates and bug fixes, check out the What’s new page.

What is to Come

Join the number of happy Webix 6.2 users! Active clients can upgrade via npm or the Client Area.

Download Webix 6.2

And do not forget about the oncoming main release of Webix 7.0 that will bring on the removal of deprecated API and modules.

The post Webix 6.2 Release: Improved loading logic, tooltips everywhere and the new drag-n-drop mode appeared first on Webix Blog.

Webix February 2019 Follow-up

$
0
0

It’s about time to prepare your lighter clothing and sunglasses! Welcome the long-awaited spring! Let’s say goodbye to winter and recall the most important news and articles of February. Undoubtedly, the biggest event for our team was the release of Webix 6.2.

Check out the major updates:

• Webix tooltips for various parts of an app
• Improved export to PDF
• The new move and order modes for drag-n-drop
• Updated modal boxes
• Simpler and more straightforward proxies
• File manager and spreadsheet samples migrated to NodeJs
• Webix Jet 2.0

Click this link if you want to learn more about all the new features and improvements.

You may find it interesting:

Read our expert article with the comparison of JavaScript Datagrid widgets of 5 popular UI libraries.

The post Webix February 2019 Follow-up appeared first on Webix Blog.

Keep in Touch with Webix: How to Report Issues and Perform Feature Requests

$
0
0

We are happy to remind that you are warmly welcome to take part in the improvement of Webix products. There are different communication channels at your disposal. They allow requesting new features and reporting issues or bugs. In the course of time any widgets and controls require updates and upgrades. That’s why we strive to establish interaction and cooperation with our users. Don’t miss the chance to give us feedback and share your ideas using any convenient methods of communication.

1. Forum

One of the ways to contact us is Webix Forum. It is a place where you can share your ideas, suggestions, issues, and possible solutions. Here you can report any problems or bugs and receive professional assistance. The Webix team always encourages user activity and is happy to get any requests or feedback. Users’ questions are considered and resolved with priority given to the development process and support tickets. Besides, on the forum you can get help from our most active and experienced users.

2. Support

Another method of communication is our official support channel for licensed users. You can write to support@webix.com and get immediate help with any issues, questions, or feature requests. Anyone can submit bug reports using this e-mail. We really appreciate it, and no messages are left unattended. But as for technical support, this channel is only for those who purchased the product. By the way, if you are a new user, we have Webix Trial Developer License which allows getting full support and assistance within a period of 30 days.

3. Documentation

This is the right option for searching information and resolving problems. In addition to technical documentation, here you can find other users’ comments and explanations from our support team. You can also discuss any questions related to the articles in the documentation section. All you need to do is to enter your text in the “Start the discussion” text area. The Webix team is always happy to address your questions and give professional advice.

4. Open source communities

Webix is present at the largest platforms such as Stack Overflow and Github. You can ask questions and get technical assistance on these websites. But we’d like note that with the first three methods of communication you’ll get help and feedback faster.

We highly appreciate customers’ feedback as it helps improve the components of Webix UI library. It is the communication with customers that made it possible to bring vast enhancements and add-ins to many components and features.

Components improved thanks to customers’ feedback

Webix SpreadSheet widget

SpreadSheet is a powerful web widget that helps create tables, keep all the data, and perform different operations. In contrast to Webix Excel Viewer which solves simple tasks, Spreadsheet is a complete solution for working with tables online. It has all the necessary functions that ensure convenient work with data in the tabular form. You can edit the content of cells, change fonts, styles, and types of borders, merge cells in rows and columns, perform mathematical functions, etc. You can export the ready document into an Excel file, or an Excel document can be imported into SpreadSheet. Initially, the component didn’t have such advanced functionality. Many cutting edge features of SpreadSheet have appeared thanks to users’ contribution.

Pivot Table widget

JavaScript Pivot Table widget is another example of Webix components that have been significantly improved and elaborated based on customers’ feedback. Now Pivot has extended filtering capabilities and allows extracting important information from huge and complex datasets. It helps perform various operations with complex data at high speed. It enables you to export data to different formats, adjust filters, customize functions for data aggregation, etc.

Effective communication with Webix users also helped to bring significant advancements to data export to Excel, PDF, and other formats. By the way, some new export to PDF features have been added in the latest Webix release:
• the ability to export views as images (excellent for Chart);
• the ability to export to PDF several views at a time.

Bottom line

Each and every user of Webix UI Framework can contribute to its improvement. If you want to share your opinions, request new features, or report any issues or bugs, don’t hesitate to use any of the communication channels mentioned above.

The post Keep in Touch with Webix: How to Report Issues and Perform Feature Requests appeared first on Webix Blog.

How to Integrate Webix with dhtmlxScheduler

$
0
0

Everyday working procedures typically involve creating plans and their implementation. If you want to organize all the activities properly and manage tasks efficiently, then it’s a good idea to make use of dhtmlxScheduler. In this article, we’d like to refresh your knowledge on the integration of Webix with dhtmlxScheduler.

We’ll share a little tutorial that will allow you to use dhtmlxScheduler in your Webix applications. This JavaScript event calendar component provides users with a wide range of views and useful features. It allows creating lightweight and intuitive online scheduling applications that can be used in a wide range of solutions.

Creating a Basic Scheduler

Let’s define what we’ll need to build our app. Besides the Webix library, we’ll use a free collection of third-party integrations that are available on this GitHub repo. You can use the following command to download it to your project folder:

git clone https://github.com/webix-hub/components

Now, open the index.html file and include the required JavaScript and CSS files:

After these preparations are done, we can create a new Webix view, “dhx-scheduler”, that wraps dhtmlxScheduler and allows to communicate with it.

webix.ui({ view: "dhx-scheduler" });

To fine tune the widget, you can add the following properties to the configuration object:

date (string or object): defines the start date of the calendar;
mode (string): defines the timeline presentation – day, week or month. By default, the “week” mode is set;
init (function): specifies logic to be performed for component initializing;
ready (function): specifies code to be executed when the component is fully ready. Here we will parse some predefined events from the inline dataset.

There are also additional ways of loading and storing data when you work with dhtmlxScheduler.  
Here’s an example of code that allows you to initialize dhtmlxScheduler in Webix apps:

webix.ui({
      //create a new view
      view:"dhx-scheduler",
      //use the current date as the default one
      date:new Date(2019,1, 27),
      //scheduler config
      init:function(){
this.getScheduler().config.first_hour = 8;
    },
    //add some default events
      ready:function(){
        this.getScheduler().parse([
              { text:"Meeting", start_date:"02/27/2019 14:00",
                                      end_date:"02/27/2019 17:00" },
          { text:"Conference", start_date:"02/28/2019 12:00",
                                              end_date:"02/28/2019 19:00" },
          { text:"Interview",  start_date:"03/01/2019 09:00",
                                              end_date:"03/01/2019 10:00" }
        ], "json");
         }
});

Live demo >>

Now, if you open your scheduler app in the browser, you’ll get the following result:

There’s a calendar grid with three events that we created earlier. You can switch between the available views (Day, Week, and Month), create new events by double-click and edit the existing ones:

Everything looks pretty useful, but this example doesn’t cover the full potential of dhtmlxScheduler. Let’s see, what features you can add to extend the functionality.

Where to Go Next?

dhtmlxScheduler is an easy-to-configure component. You can change its appearance the way you need and use one of the many features it provides. For instance, besides the default set of views available in the example above, you can use Year, Timeline, Agenda, Units and Grid views. To learn how it can be done, you can check the documentation page that contains tons of step-by-step guides. In this article, we’ll focus on some of them and describe what benefits they can provide.

With dhtmlxScheduler, you can create Recurring Events that can be repeated on a daily, weekly, monthly, or yearly basis:

After you add this feature to your scheduler, the event editor window will provide users with additional functionality:

With its help each user will be able to define necessary parameters to set up events recurrence. This feature, for example, can be used for planning daily Scrum meetings. To learn more, check the documentation page.

Mini Calendar allows simplifying the navigation through the calendar grid:

This small special extension provides the ability to render a month view in an HTML container on a page. You can either display this calendar along with the scheduler or make it a popup. Such a feature will help to choose a date and see the assigned events. To learn more, check the documentation page.

For the users that travel a lot, the possibility of integration with Google Maps can be pretty useful:

With this feature, users can associate locations with particular calendar events. When a user creates a new event, there’s the possibility to specify a location in the event description window. As a result, the event will appear on the map. To learn more, check the documentation page.

The Timeline view allows you to visualize events horizontally with separate timelines arranged from left to right:

This option will be useful for monitoring the tasks assigned to particular employees or plan the rental of premises and cars, for example. The horizontal scroll feature provides the most convenient solution for surfing the calendar within impressively vast time intervals. The smart rendering feature helps to work with the Timeline view without any lags despite the number of events rendered. To learn more, check the documentation page.

Conclusion

Now you can see that using dhtmlxScheduler in Webix web applications is simple. We hope you’ll find this tutorial useful for creating your calendar apps with the help of dhtmlxScheduler!

The post How to Integrate Webix with dhtmlxScheduler appeared first on Webix Blog.

Webix March 2019 follow-up

$
0
0

The first spring month is over, and it’s high time to sum up the work accomplished during this time. We are glad to share our latest news and most significant articles of March.

Webix highlights

• Last month Webix was updated to version 6.2.6. It includes a lot of upgrades that are available only for licensed users. Click here to check them.

• Great news! Webix Treetable widget is mentioned among the top 5 JavaScript TreeGrid components.

• Learn about the software solutions for project management and find out the advantages of Webix Kanban Board component.

Webix workshop

• Do you aim at creating perfect design for your web app? Read our expert article about the most common 10 UX mistakes that should be avoided.

• If you need to organise your working procedures properly and manage day-to-day tasks efficiently, it’s a good idea to make use of dhtmlxScheduler. Read how to integrate it with Webix.

The post Webix March 2019 follow-up appeared first on Webix Blog.

How to Get PDF Reports from Webix Apps in the Most Convenient Way

$
0
0

With Webix UI library you can export any tabular app data into a PDF file. The recent Webix 6.2 offers even more capabilities regarding this feature. Now you can save views as images, format data specifically for the report, place several widgets into one PDF file, and enjoy many other useful functionalities. Make sure you haven’t missed any long-awaited updates.

Code snippet >>

  • Export widgets as they are
  • This feature is valuable when it comes to the export of Chart and even non-data components such as Form. A bright widget doesn’t have to turn into a plain table anymore. You can choose an appropriate export display mode for it:

    -table (default, exports a table with data)
    -image (screenshot, exports widget’s visual representation)
    -all (exports both)

    webix.toPDF("chart", { display:"image" });

  • Add several widgets to a single report
  • Forget about generating numerous separate PDF files one by one. Now you can download all widgets by a single action. For this, you need to provide the IDs of the necessary widgets as an array:

    webix.toPDF([ "datatable","chart" ]);

    Note, you can set shared export options for both widgets like in the example below.

    webix.toPDF(["datatable","chart"], { display:"image" })

    It is also possible to set the parameters for each widget individually.

    webix.toPDF([
        { id:"datatable" },
        { id:"chart", options:{ display:"image" }}
    ]);

    Code snippet >>

  • Specify data for export
  • Say you don’t want all the displayed app data in your report. Now you can determine columns or rows you would like to see in the exported file.

      Specifying columns

    You can leave the columns which you don’t need out of the export PDF file using the ignore property.

    // do not export `id` column
    webix.toPDF($$("data"), {
        ignore:{ id:true }
    });

    You can also determine the array of columns and set the parameters for all or just some of them. If you want to get the default parameters, you should specify only the column’s id (see the “year” column).

    webix.toPDF($$("data"), {
        columns:[
            { id:"rank", width:40, header:"Rank" },     // a column that wasn't rendered in datatable
            { id:"year" },     // column will be exported as it is
            { id:"title", header:"Top movies", width:300 }     // custom configuration of a column
        ]
    });

    Code snippet >>

    In addition, there are several ways of presenting tree data in the export table: you can either divide the hierarchy into separate columns or just mark the tree levels with hyphens. To see how it works, try the export feature in the following example.

    Code snippet >>

      Specifying rows

    A piece of code below shows how to export the rows that fit your requirements and certain terms. As a result, we filter out the movies that do not belong to the current century.

    webix.toPDF($$("data"), {
        filter:function(obj){
            return obj.year >= 2000;
        }
    });

    Code snippet >>

  • Format data for the report
  • In Webix 6.2 you can provide a pattern for modifying a widget data for any exported file. It doesn’t matter whether it is PDF, Excel or CSV. With the help of a data scheme, you can define the $export key to alter the data as you need, e.g., correct the format of a specific cell or export a fully custom data record based on the existing fields.

    webix.ui({
        view:"list",
        scheme:{
            $export:function(obj){
                return { value:obj.value, date:webix.i18n.parseFormatStr(obj.date) };
            }
        }
    });

    App data

    Modified PDF data with uppercase titles

    Code snippet >>

  • Add a company watermark
  • You can also add a company watermark or a general title to PDF reports using the docHeader or/and docHeaderImage settings. As a result, every page of the exported document will be labelled with a company’s name.

    webix.toPDF(["datatable","chart"], {
        docHeader: "Project X, March 2019",
        docHeaderImage: "../common/projectx_logo.png"
    });

  • Add notes to exported data
  • Customize exported forms and charts by adding notes to your report using textBefore and textAfter settings that can place a simple or formatted text before or after the widget.

    webix.toPDF("list", {
        textBefore:{
            text:"Tommie Shurtleff JS Programmer",
            options:{ color:0x666666, textAlign:"center", fontSize:15 }
        },
        textAfter:"11.03.2018 - 11.03.2019"
    });

    App data

    Headers and footers in a PDF file

    Code snippet >>

    Bottom line

    New functionalities enable more convenient and easy export of widgets to PDF. Now you can effortlessly customize data, design, and structure of reports generated with Webix. To sum up the information mentioned above, see the overall example of all new features for export to PDF in Webix. Check out the related documentation section where you can find more information on the topic.

    If you have any questions and ideas, feel free to share them in the comments.

    The post How to Get PDF Reports from Webix Apps in the Most Convenient Way appeared first on Webix Blog.


    Webix Snippet Tool: From a JavaScript Sandbox to a Database of Webix Examples

    $
    0
    0

    What is you favorite Webix destination? Let me guess. If it is not docs, it is obviously Webix snippets, the tool for code prototyping and sharing. Starting from today, you can use it to browse hundreds of useful snippets. Join me to find your favorite snippet.

    Webix Snippet Tool: From a coding sandbox to database of examples

    Search Interface

    We have created a database of functional snippets, most of which are familiar to you from the documentation (yep, we are lazy). These snippets are marked with tags and titles, which appear on the toolbar. You can open any starter snippet (hit the New button) to see them in action.

    Webix Snippet Tool with Tags

    To the right of the tags, you will notice an input. This input and the tags are the doors to the snippet search interface.

    Webix Snippet Tool How to Search

    How to Use

    To search by tags, click on tag labels on the toolbar or type in hashtags like #datatable or #dynamicloading. Mind that manually typed tags must not contain spaces, much like with hashtags in Facebook and Instagram.

    You can also enter any text to search, for example:

    event #datatable
    skin #kanban
    #multicombo styling

    Searching by hash tags will output the snippets that exactly match the tag while plain text is more flexible due to the partial match.

    Webix Snippet Tool: search

    Want to Get Featured?

    If you have nice and functional snippets and feel that you can contribute to the catalogue, write to our forum or drop a line here in the Comments section with the link to the snippet. We will review them and add them to the database.

    Unveiling Snippet Secrets

    The most devoted of you who stayed with me till now will be rewarded with some tips regarding snippet functionality.

    Snippets with Data Sharing

    The #presets snippets contain a group of samples for Complex widgets with the possibility to share user data. In these widgets, the data shapes the UI, that’s why it is important to save it before sharing.

    How it works:

    • you work with the widget in the snippet tool and change the data in UI (e.g. move Kanban cards or style Spreadsheet cells).
    • Click Share, and everyone who gets your link will see the same UI.

    Such snippets contain the code for saving data for snippet tool, in a real app it should be removed.

    Try it >>

    How to Open Full-screen Snippets

    To view and share a snippet without showing the code on the screen, switch on the full-screen mode. You can do this:

    • on a mobile device, scan the QR code of the snippet
    • on a desktop device, add /m to the URL of the snippet as in webix.snippet.com/m/your_sample

    Webix Snippet Tool: Full Screen Mode

    A Nifty Tip for Lovers of Testing

    This feature is quite useful for testing, and we use it pretty often ourselves. How this works:

    • Open Snippet Tool and press Shift+Alt+W
    • Enter the relative path to the Webix sources (relative to your localhost, e.g. webix or libs/webix)
    • Open the Webix version selector and choose Local

    Webix Snippet Tool: Local Webix

    * Mind that icons and fonts won’t render because of CORS, unless you enable cross-origin sharing in your browser.

    Pat a Cat…

    …and stay tuned for news about Webix 6.3. In the meantime, do not forget that our creativity goes in both directions and check the article with a list of all the outdated API and features that will be removed in Webix 7.0. Autumn is coming.

    Apart from Snippet Tool, there are two more Webix tools, Form Builder and Skin Builder. So do drop us a line or two if you are happy (or unhappy) about them, any feedback is welcome.

    The post Webix Snippet Tool: From a JavaScript Sandbox to a Database of Webix Examples appeared first on Webix Blog.

    Creating Rich Customizable Tooltips with Webix

    $
    0
    0

    The long-awaited feature has finally come into the world! Webix Tooltips can be added anywhere. If you want to create stylish and useful tooltips for different elements of your web application, join me. You will learn how to create tooltips for DataTable headers and footers, controls, and HTML elements inside or outside Webix views. So let’s start our journey.

    Live demo >>

    Why Webix Tooltips?

    Webix tooltips have several essential benefits in comparison to HTML tooltips, because you can:

    • display any text, markup, or image in a Webix tooltip;
    • display different text in a tooltip based on some condition (when you define a tooltip as a function);
    • customize tooltips is the same way as Webix data templates.

    How to add

    So how can you add Webix tooltips? It’s a piece of cake! You need just one setting to add a tooltip, e.g.:

    { view:"button", value:"Make everything great", tooltip:true },
    { view:"datatable", autoConfig:true, tooltip:true }

    View code >>

    If you need tooltips with more complex content, make use of the common templating techniques and turn them into exactly what you want. You will find the details below. Mind that they depend on the target widget or UI element.

    Tooltips everywhere

    You can add Webix tooltips almost everywhere. Let’s look closer at the most common cases.

    Items of Webix data widgets

    A simple tooltip for items of datatables, dataviews, and lists can be added with tooltip:true. It will show what is in ‘value’ of each data item. But you can also create something much more complex: tooltips with images and dynamic text. Apart from the item data, such tooltips can display any HTML content.

    {
        view:"list",
        width:250,
        select:true,
        tooltip:obj => {
            var result = "<div>" + obj.lname + ", " + obj.fname + "</div>";
            result += `<div>Born
                ${dateFormat(obj.birthday)}</div>`;
            result += `<p align="center" style="margin:0px">
            <img src="data/photos/${obj.photo}_1.jpg" width="200px" height="200px"></p>`;
            result += `<div>Click twice to see more goodies</div>`;
            return result;
        },
        // ...rest of the config
    }

    Moreover, you can change the position of tooltips and apply your CSS classes. Define tooltip as an object and add the necessary settings:

    {
        view:"list",
        width:250,
        select:true,
        tooltip:{
            template:obj => {
                //... same tooltip template as above
            },
            dx:10, dy:10,
            css:"persons_tooltip"
        },
        // ...rest of the config
    }

    View code >>

    Webix Controls

    With Webix 6.2, you can set tooltips for any form controls. Default tooltips are added with simple tooltip:true and display the value of the control. For example, here is how you can define a simple text tooltip that will show the selected date on the datepicker:

    webix.ui({
        view:"datepicker", tooltip:true
    });

    And here is how you can create something more complex. The same principles as for data item tooltips apply here. The only difference is that the contents that tooltips can display come not from the data, but from the control settings.

    {
        view:"datepicker",
        tooltip:obj => {
            var result = "";
            if (obj.value){
                var age = Math.floor((new Date() - obj.value) / (1000 * 60 * 60 * 24 * 365));
                result += "Client is " + age + " years old";
            }
            return result || "Age is unknown";
        }
    }

    Controls with options have their own peculiarity: tooltips are added for each option and can show data of an option, not the settings of the control:

    {
        view:"radio", name:"notifications",
        label:"Notifications",
        tooltip:obj => {
            var result = obj.id%2 ? "" : "no";
            return "You will receive" + result + "email notifications.";
        },
        options:[
            { id:1, value:"Yes" },
            { id:2, value:"No" }
        ]
    }

    View code >>

    DataTable peculiarities

    Webix tooltips have come to every corner of the DataTable realm. Now you can enable Webix tooltips for any part of DataTable.

    Tooltips for Headers and Footers

    In Webix 6.2 you can enjoy the new opportunity to create tooltips for DataTable headers and footers. You can set tooltips as:

    a) true (default tooltips that show the ‘text’ of the header),
    b) string,
    c) function that receives the object of a header line.

    webix.ui({
        view:"datatable",
        tooltip:true, footer:true,
        columns:[
            {
                id:"", header:{
                    text:"Purchase",
                    tooltip:"Click to sort the list by #text# name"
                    // "Click to sort the list by Purchase name"
                }
            },
            {
                id:"sum", header:"Cost",
                tooltip:false,
                footer:{
                    content:"summColumn",
                    tooltip:"Total money flow"
                }
            }
            // ...other columns
        ]
    });

    If a header or a footer have a filter or an aggregator inside, the tooltip function is a bit more complicated, because you need to get the header / footer content. E.g. use the getHeaderContent method of grid to get the sum displayed in the footer of the column:

    webix.ui({
        view:"datatable",
        tooltip:true, footer:true,
        columns:[
            {
                id:"", header:{
                    text:"Purchase",
                    tooltip:"Click to sort the list by #text# name"
                }
            },
            {
                id:"sum", header:"Cost",
                tooltip:false,
                footer:{
                    content:"summColumn",
                    tooltip:obj => {
                        var sum = this.$$("grid")
                            .getHeaderContent(obj.contentId)
                            .getValue();
                        return "Total money flow: " + sum;
                    }
                }
            }
            // ...other columns
        ]
    });

    Tooltips for Sparklines

    You can add tooltips for cells that show sparklines. You have two options:

    a) tooltip:true if you need to display bigger versions of sparklines,
    b) a special column tooltip if you want to show them for sparkline items.

    To do this, define the tooltip as a function, which in this case receives one more parameter – the value of the sparkline item.

    webix.ui({
        view:"datatable",
        data:[
            { id:1, name:"Austria", income:[710, 780, 390, 660, 600] },
            { id:2, name:"France", income:[810, 500, 780, 800, 940] }
        ],
        tooltip:true,
        columns:[
            {
                id:"income", header:"Income per Month",
                template:"{common.sparklines()}", width:200,
                tooltip:function(obj,common,value){
                    return value || "";
                }
            }
        ]
    });

    View code >>

    Active zones within Webix widgets

    One more nice opportunity that has appeared with the latest release is the ability to create tooltips for any HTML areas within Webix views. All you need to do is:

    – set tooltips for the widget with the tooltip setting,
    – set tooltip text as the webix_tooltip attribute to the HTML element.

    {
        view:"multicombo", name:"tags", id:"mcb",
        placeholder:"Click to add tags",
        options:tags,
        tooltip:true
    }
    // ...
    var delIcons =
        $$("mcb").$view.querySelectorAll(".webix_multicombo_delete");
    for (var i = 0; i < delIcons.length; i++){
        delIcons[i].setAttribute(
            "webix_tooltip",
            "<span class="danger">Click to remove the badge</span>"
        );
    }

    Mind that such configuration will enable tooltips for the entire widget, not only for the desired area. If you want to display tooltips only for the areas that are marked with webix_tooltip, you can use lower-level API. The TooltipControl mixin allows you to add the “tooltip-ability” to the top HTML element of the component:

    webix.ui({
        id:"photo",
        template:`<img style='height:260px' src='/photos/jim.jpg'>`,
        // ... other config
    });
    ...
    webix.TooltipControl.addTooltip($$("photo").$view);

    View code >>

    Tooltips for HTML elements

    You can also add Webix tooltips to any HTML on the page, even to the whole document body where a Webix and a non-Webix layout may be placed.

    For example, this is how you can create a static text tooltip:

    • Give the HTML area an ID.
    • Use the TooltipControl mixin and its addTooltip() method that expects the ID and the text of the tooltip.
    // html code
    <div class="label">
      <label for="title">Book title</label>
    </div>
    <div>
        <input type="text" name="title"  id="title" value="" placeholder="Title" />
    </div>

    // js code
    webix.TooltipControl.addTooltip("title", "Enter book title");

    And what if you have a lot of areas that you want to give tooltips to? Luckily, there is no need to call addTooltip() for each one. Just add the webix_tooltip attribute with the text of a tooltip to the areas and then enable “tooltip ability” for their common parent area with addTooltip():

    // html code
    <fieldset id="genre">
      <div id="genre1">
        <label for="genre1">Poetry</label>
      </div>
      <div id="genre2">
        <label for="genre2">Horror</label>
      </div>
    </fieldset>

    //js code
    webix.TooltipControl.addTooltip("genre");

    If you wish to create dynamic tooltips that depend on the changing contents of the master area, provide extra customization handlers within addTooltip(). The handlers determine the tooltip behavior and can be used to redefine it.

    For example, let’s add a dynamic tooltip to a textarea. The tooltip will show either the text in the textarea or “Empty field” if nothing has been typed in. Let’s use the $tooltipIn handler that defines the look of the tooltip when a user moves the cursor inside the HTML area.

    // html code
    <div class="label"><label for="annotation">Annotation</label></div>
      <textarea rows="5" cols="40" name="annotation" id="annotation">Some book annotation is here</textarea>
    </div>

    // js code
    webix.TooltipControl.addTooltip("annotation", {
        $tooltipIn:function(node){
          var tooltip = webix.TooltipControl.getTooltip();
          tooltip.define("template", function(){
            return node.value||"Empty field";
          });
          return node;
        }
    });

    Live demo >>

    Bottom line

    Design and functionality is a true power of a web app. You can increase both aspects with styling easy-to-make Webix tooltips. Now it’s really easy to create and customize stylish and functional Webix tooltips for almost any part of a web app.

    You can find more detailed information in the related documentation articles:

    And don’t hesitate to drop us a line in the comments below if you want to share your experience or ask a question.

    The post Creating Rich Customizable Tooltips with Webix appeared first on Webix Blog.

    Webix 6.3: Full-Screen Mode, Improved Button Styling, Promises for Save Operations

    $
    0
    0

    Meet new Webix 6.3. With the new version, you will get the full-screen mode for UI widgets, new rules of button styling and typing, promises for data saving, and mentioning functionality in the Comments widget.

    Check the complete list of new features and updates on the What’s new page and read on to find out more.

    Webix 6.3: Full-Screen Mode, Mentions in Comments, and Improved Data Grouping

    All Widgets to Full-Screen Mode

    Any widget or HTML element can be opened in the full screen mode thanks to the new fullscreen helper.

    // open in the fullscreen mode
    webix.fullscreeen.set("chart1");
    // exit the fullscreen mode
    webix.fullscreen.exit();

    Live demo >>

    Close Windows Easily

    It is much easier to add a button that hides a window. Just add one setting:

    { view:"window, head:"My window", close:true }

    View code >>

    Improved Settings for Buttons

    Button settings have become more consistent: now you can define button type and styling separately and combine them in any way.

    Now the buttons can be customized with the following settings:

    • types: default, “icon”, “iconTop”, “image”, “imageTop”
    • css: “webix_secondary” (default), “webix_primary”, “webix_danger”, “webix_transparent”

    For instance:

    { view:"button", type:"icon", css:"webix_primary" /* a blue button with an icon */ }

    View code >>

    The whole range of button types was reduced, in particular we have removed the outdated arrow buttons. Please pay attention to the migration guide.

    Mentioning Users in Comments Widget

    The Comments widget and mentioning functionality are together at last. Now comments can be addressed to people if you @mention them from the current discussion.

    View code >>

    Promise for Save Operations

    Now you can wait not only for data loading, but also for saving operations.

    view.waitSave(() =>
        view.add({ name:"New User", email:", roles:" })
    ).then(
        obj => view.select(obj.id)
    );

    It means that you can easily adjust saving to your needs:

    • tune pessimistic data saving: first wait for the server response, then update the client
    • wait for several saving operations
    • initialize a standalone DataProcessor that can be used as server API for multiple widgets including non-data views like forms

    Live demo >>

    Improved Data Grouping API

    API for grouping data has become more flexible. Now you can define the behaviour of records that do not fall into any group: either show them as non-grouped, or hide, or create a separate group for them.

    View code >>

    Grouping by multiple criteria is more straightforward now. You can also provide additional grouping criteria for the root or any other branch.

    view.group({
        by:"year"
    },"0$1957");

    View code >>

    Unified API for Datatable Column Options

    We have unified the way of setting options for datatable columns, editors and filters. Now you can define them as:

    • JS array or object
    • Data Collection
    • path to server script
    • loading function or proxy

    Whichever way you choose, the options will be stored in a Data Collection and you can easily access it to read and modify options data.

    Live demo >>

    Drag-n-drop Events for Dashboard

    The Dashboard widget now has DnD events. You can catch the necessary moment and conveniently customize DnD within the component.

    View code >>

    Scheduler Backend Samples to NodeJS

    Scheduler package samples have migrated to NodeJS, so now it is easier to run them locally. Just execute npm install and npm run server commands, and you will get working examples with the database.

    Scheduler server samples

    Scheduler also has an oncoming major update, the beta version of which will be available as a technical preview in mid May. You will be able to evaluate Scheduler as a Webix Jet app packed as a Webix widget. Already interested?

    What is Next

    Other updates and bug fixes can be found on the What’s new page. Also do not forget to check the the list of all the API that will be removed from Webix 7.0.

    You can get Webix 6.3 via npm and Client Area if you are a PRO user, or by downloading the Trial version to give it a try.

    Download Webix 6.3

    The post Webix 6.3: Full-Screen Mode, Improved Button Styling, Promises for Save Operations appeared first on Webix Blog.

    Websocket: Real-time Data Updates for Webix Widgets

    $
    0
    0

    As promised, today I will share with you a Webix solution for creating real-time apps. You will find out how to use a WebSocket connection for:

    • smooth live updates in data components,
    • creating live chats with Webix Comments.

    Grab the demo and join me.

    Live demo >>

    Websocket: Real-time Data Updates for Webix Widgets

    Live Updates for Data Widgets

    Let’s begin with live updates for data components. I will use Datatable as the example. First, I will load initial data without the socket, e.g.:

    webix.ui({
        view:"datatable", id:"data",
        data:some_data
    });

    I need to tune sockets only for data updates. So let’s create a simplest socket connection:

    const socket = new WebSocket("ws:host");

    Next, I will send data to the backend when they are changed on the client side. I will use the onStoreUpdate event to catch the right moment and socket.send() to send the data:

    $$("data").data.attachEvent("onStoreUpdated", (id, update, operation) => {
        socket.send(webix.stringify(update));
    });

    After that I need to be ready to receive the data from the server and update them on the client. Note that to avoid unnecessary saving of the same data back to the server, I will wrap the code in DataProcessor.ignore():

    socket.onmessage = (e) => {
        var update = webix.DataDriver.json.toObject(e.data);

        webix.dp(view).ignore(() => {
            // update view data
            // ...
        });
    };

    For this demo, the backend is kept as simple as possible. When a message is received, the backend sends it to all the clients connected to the socket:

    const WebSocket = require('ws');

    //live updates for data sample
    const wss = new WebSocket.Server({ port:8080 });
    wss.on('connection', function connection(ws) {
        ws.on('message', function incoming(message) {
            // save message to DB
            message = _dummySave(message);
            // send it to all clients
            wss.clients.forEach(function each(client) {
                client.send(message);
            });
        });
    });

    //emulate saving to db, where record id usually defined
    function _dummySave(message){
        message = JSON.parse(message);
        if (message.operation == "insert"){
            message.data.id = "s"+ message.data.id;
        }
        message = JSON.stringify(message);
        return message;
    }

    The basic solution is ready! But how to wrap it into a reusable module? Webix Proxy is the answer.

    webix with websocket

    Creating a Proxy for Live Updates in Data Components

    A proxy has the load() and the save() methods:

    • load() is called when view.load is called or when you have set config.url initially.
      I will use proxy.load to initially establish a socket connection.
    • save() is called on any data update, which coincides with the moment when the onStoreUpdated event is triggered. So instead of the event, I will use save() to send data to the server via a web socket.

    Let’s declare the proxy and use the above code plus a few more things:

    • an error handler for WebSocket errors,
    • a way to close the socket when the related view is destroyed.
    //declare
    webix.proxy.socket = {
        $proxy:true,
        load:function(view) {
            //create a socket connection
            this.socket = new WebSocket("ws:"+this.source);

            //handle errors
            this.socket.onerror = (error) => {
                console.log("WebSocket Error", error);
            };
            //receive updates
            this.socket.onmessage = (e) => {
                // update view data
                // ...
            };
            //close a socket connection when a view is destroyed
            view.attachEvent("onDestruct", () => {
                this.socket.close();
            });
        },
        save:function(view, update) {
            //send message to server
            this.socket.send(webix.stringify(update));
        }
    };

    Now I can define a common proxy for loading and saving data. I will use webix.proxy() that requires three parameters:

    • the name of the proxy,
    • the URL to which to connect,
    • the configuration settings with the unique ID of the client and the key.
    //define a common proxy for loading and saving with unique clientId and key
    var data_proxy = webix.proxy("socket", "//localhost:8080", {
        key:"data", clientId:webix.uid()
    });

    //use the proxy
    webix.ui({
        view:"datatable",
        url:data_proxy,
        save:data_proxy
    });

    That’s the general idea, now let’s fine tune the proxy.

    Proxy for Live Updates in Details

    Sending Data

    Before sending data from a client, I need to mark them to make sure all clients will work with them correctly when they receive them. I will mark data with clientId and key that were set in the proxy configuration. And this is how this works:

    1. clientId is needed to identify the client among all the clients connected to the socket.

    2. Usually there is a common socket connection for all components in an app. That is why key is needed to identify the component among all the components that use the socket.

    So let’s mark the data to send in the save() method of the proxy:

    save:function(view, update) {
        update.clientId = this.clientId;
        update.key = this.key;
        //send data
        this.socket.send(webix.stringify(update));
    }

    With the help of the key and the ID the received data will be updated for other clients.

    Updating Data

    In the onmessage handler set in the load method, I will check the incoming data updates that are received by a client. Let’s return to the onmessage callback of the socket. The callback receives the message event that contains the data object with the following properties:

    • key,
    • clientId,
    • the operation type,
    • data with the actual data that needs to be updated.

    Depending on the key and clientId, I will decide what to do with the incoming messages.

    1. If the message came from a different type of widget, ignore it:

    load:function(view) {
        // ...
        this.socket.onmessage = (e) => {
            var update = webix.DataDriver.json.toObject(e.data);
            if (update.key != this.key) return;
            //...
        }
    }

    2. Next let’s deal with the case when the data operation was issued by the same client. If it is an insert operation, the data item usually receives an ID generated in the backend. That’s why we need to update it on the client side.

    load:function(view) {
        // ...
        this.socket.onmessage = (e) => {
            var update = webix.DataDriver.json.toObject(e.data);
            if (update.key != this.key) return;

            if (update.clientId == this.clientId){
                if (update.operation == "insert")
                    view.data.changeId(update.id, update.data.id);
            }

            //...
        }
    }

    3. If the data operation came from a different client, save the data on the client and do not forget to wrap operations in dp.ignore() to prevent the data from being saved to the server again.

    load:function(view) {
        // ...
        this.socket.onmessage = (e) => {
            var update = webix.DataDriver.json.toObject(e.data);
            if (update.key != this.key) return;

            if (update.clientId == this.clientId){
                if (update.operation == "insert")
                    view.data.changeId(update.id, update.data.id);
            }
            else {
                webix.dp(view).ignore(() => {
                    if (update.operation == "delete")
                        view.remove(update.data.id);
                    else if (update.operation == "insert")
                        view.add(update.data);
                    else if (update.operation == "update")
                        view.updateItem(update.data.id, update.data);
                });
             }
        }
    }

    The proxy is completely ready and you can use it for live updates in data components.

    Notes

    Note that in the demo alongside the url property there is also data. This is done purely for the demo to load some initial data.

    var grid = {
        view:"datatable", id:"grid",
        columns:[
            { id:"title", editor:"text",  header:"Film title",  width:200},
            { id:"year",  editor:"text",  header:"Released" , width:100},
            { header:",  template:"{common.trashIcon()}", width:50}
        ],
        select:"
    row", editable:true, editaction:"dblclick",
        data:webix.ajax("
    /samples/server/films"),
        url:data_proxy,
        save:data_proxy
    };

    Live Chats with Webix Comments

    The above technique can be used for live updates with all webix data widgets. However, implementing live updates for the Comments widget has some peculiarities. Comments is a complex widget of sorts, and data coming from the server should be added/updated not in the Comments view, but in its inner List.

    webix with websocket ive chats

    So just extend the above proxy and redefine the load() method so that the was loaded into the inner list:

    webix.proxy.comments = {
        init:function(){
            webix.extend(this, webix.proxy.socket);
        },
        load:function(view){
            webix.proxy.socket.load.call(this, view.queryView("list"));
        }
    };

    Live demo >>

    What’s Next

    You can expand and reuse the WebSocket-based proxy for live updates in Webix apps. A WebSocket-based custom proxy is a better alternative to the Faye proxy that is currently deprecated and will be removed in Webix 7.0. You can find more info on proxies in our documentation in Webix Proxy Objects.

    The post Websocket: Real-time Data Updates for Webix Widgets appeared first on Webix Blog.

    Webix April 2019 follow-up

    $
    0
    0

    The spring is in full swing and it’s about time to enjoy the warm spell of May! Meanwhile, the Webix team has been working hard over the improvement of Webix UI library. Let’s recall the most important events and useful articles of April.

    Webix Insights

    • Without doubt, the most significant event of April was the release of Webix 6.3. Check the list of key updates and new features here.

    • Are you planning to make your first steps in Webix? Read our latest article to learn the most important information about Webix UI framework.

    • If you can’t decide between Webix Standard for open source projects and Webix Pro, follow this link and get familiar with the overview of both versions.

    Webix Workshop

    Learn how to create Webix tooltips for DataTable headers and footers, controls, and different HTML elements.
    • Explore the new capabilities that make export to PDF more convenient in Webix 6.2.
    • Good news! Now you can easily find any of your favorite snippets for code prototyping in a database of Webix snippets. For more details follow the link.

    The post Webix April 2019 follow-up appeared first on Webix Blog.

    Webix in Practice: Digital Solutions for Agribusiness and a Cloud-based Tool for Quick App Development

    $
    0
    0

    We always feel happy when we learn how our UI library helps our customers translate their ideas into reality. Are you a Webix user? We would be glad to hear your story. Feel free to contact us with your showcases.

    The opener of our new article series is an interview with one of the Webix users, a programmer Valeriy Kuznetsov. He develops digital solutions for both leading agricultural companies and small enterprises.

    Webix allowed Valeriy to create an effective cloud tool for software development within a short time. The system is called WizXpert. This solution combines back-end, front-end, and hybrid mobile app development. The system’s interface is Webix-based.

    — Hi, Valeriy. To start with, tell us a couple of words about yourself, your experience as a software developer.

    — Programming is my calling. I created my first app using FoxPro in 1998. I was 19 years old then. It was an accounting system for a local supermarket.

    After that, I started making solutions for the jewelry sector. I got a great project. The product was very popular among small businesses. This app is still in demand in Ukraine and Russia.
    Later, I worked on CRM systems for wholesale and retail stores, garment factories.

    In 2015, I went to Minsk to develop an estimate app, but in three months I had to go back home for personal reasons. Soon after that, I joined one of the leading agricultural companies in Ukraine.

    — Tell us about your project. What is the essence of it?

    — Actually, the essence of WizXpert concept is very close to that one of Webix — high development speed, modularity, ready-made design. I think I managed to create a state-of-the-art, well-designed and reliable product.

    This tool incorporates a versions control module, an access and roles control system.

    My system is very easy to handle even for a new team member. Everything is simple and intuitive. When you open a JavaScript module or select it from a project structure, you can see all its dependencies. A developer sees straight away all the dependent modules and can open them for editing.

    WizXpert stores all standard Webix UI widgets for projects, empty forms of mobile and web apps, dynamic styles, and templates. A cross-cutting search engine allows finding information on all the modules regardless of their type.


    — How did you learn about Webix?

    — Somebody told me about you at the conference. It was 2013. You released a version 2.3 then.

    — How was the idea born? Why did you decide to choose our library for your project?

    — I faced a big challenge. I had to combine back-end and front-end development of both web and hybrid mobile apps. Functionalities were supposed to include generation of tasks for executors, threats detection; quality, deadline, and business-regulations control. The system also should have rendered all the data in a web app and synchronized with all the other solutions. The code was supposed to be documented as well.

    I had 3 months for everything. The company’s management expected interim results from me in two months.

    I had already had extensive experience in software development and had been exploring Webix for long. I also studied other similar solutions in the market then, but finally, I realized that I liked Webix most of all. I enjoyed the 6th version with the material design. It’s very beautiful and functional. I realized that I could do everything quickly without losing quality and visuality. This is how the idea of a cloud system which united three platforms was born. I used an open source version of Ace Editor as a source code editor. I also added identification of executable modules and highlighting of tables’ names from SQL queries in order to arrange dependencies.

    I’m planning to create a capability to identify Webix components in the code for building a smart auto-complete and connecting CSS styles.

    — Who else participated in the project?

    — I did most of the work by myself, but I must admit that there are two more people who took part in the development. My wife Darja is a business analyst. She helped me to arrange a document and modules tree so that any person could effortlessly navigate the code. Our director Alexander Bondik also took part in the creation of the system.

    — How long did it take to create a system?

    — 2 months, but I’m still working on it, trying to make it even better. I add new features almost every day.

    — Do you agree that Webix accelerates the development process considerably?

    — You know, I looked through all the components and realized that your library is what I need. I 100% agree that Webix accelerates software development. I tell everybody about this. It’s pure gold. I also believe that everything should look decent. Your components have excellent design.

    — What are our library’s strongest points in your opinion?

    — It’s hassle-free, speedy and has no bugs. The navigation is great. It allows a programmer to develop a solution very quickly. And if you have a cloud system like mine at hand, everything happens almost instantly.

    — Is Webix convenient for creating mobile apps?

    — Yes, it is. My hybrid mobile app’s interface is Webix UI. After having worked with Webix for so long, I have only positive impressions. It’s not glitchy and is extremely easy to use. The documentation is very good as well. I simply take a component and implement it straight away.

    As time was a crucial factor for me, I created a code editor from the Webix components. Later, I found an equivalent similar to iCloud 9.

    On the right, I have a code editor. Documentation is automatically connected to the executed module.

    In the end, documentation will have a tree-like structure similar to Сonfluencе. The system unites business documentation storage and development management. Customers will have access to documentation to see how modules work. It will help them understand the essence of a project.

    — Have you ever faced any problems while using Webix?

    — I’ve hardly had any. I noticed one small drawback though: several pages scroll in Carousel at a time when I’m trying to scroll only one. The rest is just fine: I create a window, put the components there and write code. It’s the best accounting system solution that anyone could have ever come up with. If you embed a visual code designer and CSS into it, the speed is likely to become even higher.

    What allows us to increase speed? It’s performing fewer actions when we don’t have to spend a lot of time searching for something. When I’m working on a project, I always have a folder with code at hand. I look at the debugger console and see where the request goes, copy the part I need, paste it to the search box and find the required module. Even a specialist with little experience in software development can figure everything out very quickly. It’s very important to me personally, because I always have a lot of work to do and I should recollect very quickly where this or that piece of code is located.

    Actually, it’s very easy to create apps with Webix. One day and the system is ready. Others spend years on such projects. I’ve done everything in a couple of months. Thanks to this, our company is ahead of its competitors now. The customer is proud of this project. Its interface, speed of work, absence of bugs — everything’s at a high level.

    — Have you used any other libraries for your project?

    — I had to utilize cartographic libraries. The solution I was working on, contained several modules for cartographic data management. For example, an agronomist comes to a field. He or she needs to find out the distance to the perimeter. This task has already been automated by somebody. That’s why I’ve turned to other libraries as well, e.g., Jquery. On the whole, the use of other libraries was minimal.

    We are also planning to make schemes for code documentation. And we are thinking of employing a library that deals with vector graphics. You have a widget like this, but it doesn’t allow me to connect the blocks the way I’d like to.

    — Did you use our default design?

    — While creating the web app, I used default design with little changes. I only added some black color to the forms. I customized a mobile app design a lot because I needed a darker background there. Your default dark theme seemed a little incomplete to me, but a material one is very beautiful, and it was a perfect fit for my solution.

    — Did Webix influence your train of thoughts or bring new ideas for your project implementation?

    — The main thing is that Webix helped me bring my idea to fruition. The system that I created is unique. I must admit that the thinking process changes a little when you work with a UI library. I’d describe it this way: Webix is like a construction kit with many independent elements which I use for building a complete effective solution.

    — Are you planning to apply Webix to your future projects?

    — Sure! It seems very convenient to me. You know, the quicker we finish a project, the quicker we earn money. A project becomes less cost-effective when the team doesn’t manage to meet the deadline. That’s why we are interested in the speed of development so much, and Webix can significantly accelerate the process.

    I’d like to add, the company I work for saved a fortune thanks to me and Webix. Rapid software development allowed us to release a solution for crops condition monitoring in 3 months. Real-time data provided by an app helps the company’s managers to make timely decisions. Such digital solutions ensure the effective work of the whole agricultural enterprise.

    The post Webix in Practice: Digital Solutions for Agribusiness and a Cloud-based Tool for Quick App Development appeared first on Webix Blog.

    Webix 6.3 and Buttons: Deal with it!

    $
    0
    0

    Hi everyone! Today I suggest you dive into 6.3 updates and have a closer look at the buttons.

    Starting from the new version you can easily tune the look and feel of your buttons thanks to the optimized settings. However, we couldn’t avoid some breaking changes, but still, you can easily integrate new buttons into your application by following this guide. Let’s start!

    Webix 6.3 and Buttons: Deal with it!

    New Scheme for Buttons

    In Webix 6.3 we have unified the buttons to make styling easier. We have separated the settings that define CSS (color) and type (functionality), so now you can specify button type and apply styling to it with the help of built-in and custom CSS classes .

    Here is the new CSS-based scheme for Button and Toggle controls:

    The scheme is true for all skins, just the colors differ. In the live demo below you can switch the skins in the related menu (right top corner) to see the difference.

    Live demo >>

    The same rules apply for Toggle buttons as well.

    Live demo >>

    As you can see, all the buttons get the webix_secondary class by default while the Uploader control gets the webix_primary one. To change it, just define the “css” setting with a built-in class:

    { view:"button", value:"Standard" }, //webix_secondary
    { view:"button", value:"Standard", css:"webix_primary" },
    { view:"button", value:"Standard", css:"webix_danger" },
    { view:"button", value:"Standard", css:"webix_transparent" }

    In addition to CSS, you can choose button type depending on the required content. Now we have the following button types:

    • standard – a standard button;
    • “htmlbutton” – a button with an ability to embed any custom HTML;
    • “image” – a button with an ability to embed images;
    • “imageTop” – the same as “image”, but with a top position of the images;
    • “icon” – a button with an ability to embed icons;
    • “iconTop” – the same as “icon”, but with a top position of the images.

    Deprecated Buttons

    In the pursuit of a more up-to-date look, we have removed the buttons that are no longer popular.

    Goodbye to arrow buttons:

    { view:"button", type:"next"},
    { view:"button", type:"prev"}

    New syntax for some buttons:

    To comply with the new scheme, some features were removed. But the same functionality is still available with a different syntax:

    CSS types

    type:"form" /* is changed to */ css:"webix_primary"
    type:"danger" /* is changed to  */ css:"webix_danger"

    and the content types

    type:"imageButton"  /* is changed to */  type:"image", css:"webix_primary"
    type:"imageButtonTop" /* is changed to */  type:"imageTop", css:"webix_primary"
    type:"iconButton" /* is changed to */  type:"icon", css:"webix_primary"
    type:"iconButtonTop" /* is changed to */  type:"iconTop", css:"webix_primary"

    Mind that the types mentioned above will remain till Webix 7.0 to make the transition less painful. So please take your time, but be sure to apply the new settings in advance.

    Changes for Icon and Image buttons

    Also, as you can see, icon and image type buttons are now painted with a colored background. If you are not ready for such change and want to get back to the old transparent styling, just apply the webix_transparent CSS class:

    { view:"button", type:"icon", icon:"mdi mdi-email",
        label:"Mail", width:80, css: "webix_transparent" }

    How to Style the Buttons

    All the HTML buttons within Webix buttons now have the “webix_button” class name, while the top parent DIV element receives one of the built-in CSS classes (“webix_secondary”, “webix_primary”, etc.).

    You can override the default styling by chaining the class names in the CSS selector.

    .button2 .webix_button{
      font-size: 24px;
      font-style: italic;
      color: yellow;
    }

    Sometimes you may need to specify both built-in and custom CSS classes to define a more specific rule:

    .button3.webix_transparent .webix_icon_btn{
      color:#1ca1c1;
    }

    Live demo >>

    What’s next

    You might be already anxious about breaking changes that happen with each new release 🙂 But the goal we are trying to achieve is a simple and consistent API that is easy to work with.

    Buttons, as well as icons, are now more straightforward, flexible and open for user customizations. Besides, don’t miss the new tooltips as they are one more important UI element in any application.

    As a bottom line, we are reminding you about the upcoming API deprecation in Webix 7.0 in September. So stay tuned for the updates and be prepared for all the good.

    The post Webix 6.3 and Buttons: Deal with it! appeared first on Webix Blog.


    Webix May 2019 follow-up

    $
    0
    0

    Hooray! The long-awaited summer has finally come! It’s high time to enjoy the sun and take stock of the work accomplished during the last month of spring. We are glad to highlight the most significant events and interesting articles of May.


    Great news!

    • Goodfirms.co has named Webix UI library one of the top app development software that helps create web apps with a limited budget.

    Webix Workshop

    • Do you need to integrate buttons into your application? Learn how to do it easily and get familiar with Webix 6.3 updates in regard to the buttons.

    • We would like to remind that you are welcome to use our ready-made JS templates from Webix UI library. If you are starting new web applications, take advantage of the new Admin Dashboard Template. The live demo and the source code are here. For developing a QA Dashboard you can use the Webix QA Dashboard demo.

    Showcases

    • Read this interview and find out how Webix users create business solutions in practice. If you want to share your showcases on our blog, don’t hesitate to contact us. We’ll be happy to write about you and your project.

    Webix Insights

    • Explore the evolution of Webix from 6.0 to 6.3 and note the most significant improvements that have seen the world.

    • Are you aiming at organizing work with hierarchical data in your business solution? Follow this link and check out the overview of Webix TreeGrid widget.

    • If you need to facilitate work with large volumes of data, you can use Webix DataGrid and SpreadSheet widgets. Find out the key differences between these components here.

    • Are you searching for alternative ways of using Webix File Manager widget? Go to this article to gain new ideas.

    • Find out how JavaScript UI libraries can facilitate IT startup projects.

    The post Webix May 2019 follow-up appeared first on Webix Blog.

    Internet Fraudsters – How not to Fall Victims to Their Tricks?

    $
    0
    0

    Fraudulent messages from helpless millionaires have already become history, but it’s too early to let your guard down. Internet fraudsters haven’t lost their creativity yet. That’s why we urge our customers to be vigilant. Criminals can pretend to be working for Webix and try to fish for your personal data or passwords, make you transfer money to them or download malware, etc.  
     
    Internet fraudsters

    How Internet fraudsters can double-cross you

    1. A sender asks you for your personal details

    Fraudsters, pretending to be Webix team members, can ask you to provide them with your private data like passwords, bank account, credit card or passport information. Please note, we have no reasons for demanding this data from our clients. If somebody acts like this on behalf of Webix, most likely, you’ve come across a fraud.

    2. You are asked to follow the link or download something

    Everybody seems to know about this trick but still keep on falling for it. If you follow some dubious link, you can appear on a page with useless information at best. Or your computer can get infected with malware at worst.

    3. You are asked to pay one more time

    Most of all, fraudsters wish to get to your money. If you receive a message from your manager that one of your payments haven’t gone through, don’t rush to transfer the sum one more time. Check if the money really hasn’t left your account.

    How to define a dangerous email

    · Pay attention to the whole email address

    Criminals are even able to add information about the sender who is familiar to you to the letter. In this case, it’s especially hard to notice anything suspicious. For example, an email can seem to be from Tatsiana Drozd from Webix, but actually, be sent from some strange address aefzdf0980@somemail.org.

    Therefore, to avoid being fooled, have a look at the whole email address but not only at the stated sender’s name. You can move the cursor to the name or click the reply button to see the full email address.

    · Beware of strange links and attachments

    They can contain spam, viruses, and other threats. Note, we never send you letters with attachments. If there’s a link in an email, always check it before you click.  

    · Check the website’s name

    Be attentive – a fake name can have a small difference from the real one. When you want to visit our website, the safest way is to enter www.webix.com into your browser instead of clicking a link from an email which can lead you, e.g., to www.webixx.com.

    · Consider the language

    Pay attention to the tone of the letter. For instance, it can sound suspicious. Grammar and other kinds of mistakes also disclose a trickster. Be careful with a puzzling text which is too short and stingy with details.  

    If you doubt that a letter was sent by us, feel free to contact our support service via info@webix.com to verify any information.

    The post Internet Fraudsters – How not to Fall Victims to Their Tricks? appeared first on Webix Blog.

    Webix in Practice: Project Management Application Based on Kanban widget

    $
    0
    0

    We are happy to present the second interview in our new series of articles about how Webix users put their ideas into practice. If you want to share your experience in building apps with Webix, you are welcome to contact us.

    Today we will tell you about Jochen who is an experienced SharePoint and Office 365 developer, consultant, and business analyst from Germany.

    —Hello, Jochen! Please tell us a little bit about yourself and your experience in web development.

    —I started my career as a freelance web developer in 1996 with PHP and MySQL. In 2000, I switched to Microsoft technologies with asp / asp.net, IIS, and MS SQL. In 2004, I began to specialize in Microsoft SharePoint as a developer, admin, and consultant. Since 2015, I have extended my scope to Office 365 and Azure development.

    Over the years, I have seen plenty of different ways to build applications including Microsoft and open source tools. And I have been constantly searching for methods that can speed up development and increase usability.

    There has always been a choice either to be free in the long-running process of building my own datagrid or deal with a limited tool which has shortcomings that are difficult to overcome. But with Webix, JavaScript, and Visual Code I can do everything ! … in a fast way and without any limits!

    In general, today I have considerable expertise in developing effective business applications with a high level of usability.

    —Can you describe your typical working process?

    —First, my clients contact me with an idea of their business solution. For example, they want an application that will collect and process customer data needed to open an account. As soon as I get the basic requirements from my customers, I start prototyping the product (it usually takes me about 3-5 days). Since I have worked with Microsoft for many years, I prefer building my apps on the basis of SharePoint or Office 365. I think this way of app development is a very promising trend now. In general, even ordinary users can utilize SharePoint for creating sites or less complex “applications”. But SharePoint offers only the standard interface design which is not perfect. And that’s why I use ready-made business UI elements from the Webix library. They help me build fast complex applications with an outstanding design. The apps run right inside SharePoint. This is how I usually develop software products. After creating the first prototype of the application, I show it to the customer, clarify the requirements, and then refine the prototype in an agile way. Once this is done, I finalize the development of Version 1.0.

    As soon as the initial prototype is ready, it’s much easier to get a realistic roadmap and calculate the costs.

    —How long have you been using Webix for app development?

    —I have been developing SharePoint applications with the help of Webix for more than 4 years so far.

    —You have a lot of interesting projects created on the basis of Webix UI components. Let’s focus on one of them and discuss it in more detail. Tell us about your project management application based on Kanban widget.

    —The application was created upon one of my clients’ requests. The purpose of this solution is to control the implementation of tasks and projects within a company. As you can see, the app runs inside SharePoint. On the Root Site you have this Kanban Overview and from there you can navigate to a specific project SubSite based on your permissions.

    Without doubt, the crucial part of this solution is Webix Kanban widget that makes the app very functional and efficient. I especially like the fact that it supports drag-n-drop. Moreover, each project in Kanban contains a popup for the project wiki (OneNote), main project document (Word/Excel) and project presentation (Powerpoint) with all the necessary information about the tasks and business processes.


    The important benefit of integrating the application with OneNote is the possibility to add and edit information on projects directly, e.g., in a meeting. All the changes are saved immediately and become available to everyone including customers based on their access rights. These features allow establishing an effective workflow.

    Filters and an Audit Trail (activity log) are also great tools in this application. Besides, there is a section View where you can change the contents of the project and the number of Kanban lanes if you wish. The app runs on premises and in the Cloud (Office 365), which is also a significant advantage for many customers.

    —Why did you decide to use Kanban widget for your application?

    —In my opinion, Kanban is one of the best and most popular Webix widgets. It helps manage projects quickly and efficiently. By the way, all my customers really like Kanban widget. It is very functional and quite easy to use. There are many implementation areas for this widget.

    —How long does it usually take you to develop an application with Webix?

    —It depends on the project, but on average it takes me about 20-30 days to build an application of medium complexity. Within the period of 3-5 days, the first prototype is ready for discussion.

    —What do you think about the Webix design? Do you use the standard design or customize it?

    —I always need to customize and modify design based on my customers’ corporate identity. I use your design tool, but it’s not perfect (right now) for me. So I try to refine the look of applications using CSS.

    —Why did you choose Webix?

    —I have already worked with some of your competitors and I should say that I really like Webix. By the way, I’ve already brought in three new clients for you.

    The most important thing for me is the ability to speed up web development. Webix really helps me save time on creating applications. One more undeniable advantage for me is a great variety of ready-to-use UI controls and complex widgets. Last but not the least, Webix extracts the logic from the underlying services. If needed, the whole application could be switched from SharePoint to other platforms with minimum effort.

    —What other frameworks have you used?

    —I’ve worked with Ext Js on a project and I’d like to note that it’s quite difficult. It takes a lot of time to build software solutions and integrate them with SharePoint.

    Moreover, I have some React experience. This framework doesn’t accelerate SharePoint app development as Webix does. In addition, React doesn’t have a large variety of ready-made components and complex widgets.

    I think that for web part development it might be a good idea to use the SharePoint Framework (SPFx).

    —How did you learn about Webix?

    —Honestly, I don’t remember. I have been working in the field of app development for many years. I always read a lot of specialized literature as I’m in constant search for new technologies. Probably, I’ve read somewhere about you. I remember being very impressed by a large number of UI widgets and controls that Webix JS library contains.

    —What is the biggest challenge you’ve faced when using Webix for web development?

    —Unfortunately, I have some difficulties with exporting large amounts of tabular data to PDF. I am currently trying to resolve this issue with your support service.

    —What are the greatest advantages of Webix in your opinion?

    —As I’ve already mentioned, Webix significantly speeds up web development, which is extremely important for me. Webix also stands out for its complex widgets, especially Kanban and SpreadSheet.

    In addition, I like the fact that you are constantly developing, adding new elements and features, fixing bugs.

    I would also like to praise your support service. Whenever I have any problems or questions, I get quick assistance and detailed answers with perfect examples.

    Another valuable thing for me is the Webix Forum. This is a storehouse of useful information for developers. I always read your forum to expand my knowledge about Webix and gain new ideas for implementing my projects.

    —What improvements does the Webix library need from your point of view?

    —1. I think the Form widget could be improved. It should be adapted for ordinary users. Why do you need to simplify this widget? I’ll give you an example. Imagine that a developer goes to his customer to get the requirements for a future application. Obviously, the client knows the internal processes of the company much better. Therefore, I believe it’s a good idea for customers to fill/build in the information within the Form widget by themselves. And after all the information is filled in by the customer, the developer can start creating an application. Thus, a lot of time can be saved. That’s why I think the Form widget needs to be simplified as much as possible so that it can be filled/built by customers. Unfortunately, now it’s not very easy for ordinary users to find out how to do it. I believe many Webix widgets can be used by customers at the initial stage of web development.

    2. The integration into Visual Code could be better.

    —What are your plans for the future? Do you intend to use Webix in other projects?

    —I will definitely continue developing applications with Webix UI library and integrating them with SharePoint and Office 365.

    Moreover, I’m planning to open my own IT company by the end of this year. I am going to develop cloud applications focused on Microsoft products. I intend to investigate how to build artificial intelligence forms with Webix and Microsoft Cognitive Services.

    Undoubtedly, Webix will be an important part of my business.

    If you are a Webix user and want to tell us about your experience in creating apps, don’t hesitate to contact us with your showcases. We will be glad to write about you on our blog.

    The post Webix in Practice: Project Management Application Based on Kanban widget appeared first on Webix Blog.

    Webix 6.4: No Breaking Changes, Only Improvements

    $
    0
    0

    Today we are happy to introduce Webix 6.4. We dedicated this release to stabilizing the library itself and its integration with backend platforms. Alongside the long list of fixes, the new version includes the support of Amazon S3 for File Manager, .NET backend examples for Webix widgets, and the updated WJet CLI tool for quick prototyping of Webix Jet apps. Read more for details.

    Webix 6.4 Release

    99 Little Bugs in the Code…

    We took them down and patched them around… Which leads us to the key of today’s release – improved stability of the core library and complex widgets. Webix 6.4 includes over 70 bug fixes, the most notable of which are:

    • fixed dragscroll for column DnD in Datatable, which is used for auto scrolling of datatables with big contents during DnD,
    • fixes for the minuteStep setting of Calendar and Datepicker,
    • user interaction with modal/disabled views,
    • some tooltip and DnD issues,
    • styling stabilized.

    The whole bunch of bug fixes can be found on the What’s new page.

    Webix Filemanager Works with Amazon S3

    Good news for those of you who wanted to connect Filemanager with the Amazon S3 storage instead of the local filesystem. The fully functional backend is provided for NodeJS.

    .NET Core Backend for Webix Widgets

    You can get examples of the .NET Core backend for complex widgets, forms with Uploader and Webix Jet in this repository. You will find the examples for:

    • Filemanager
    • Spreadsheet
    • Kanban
    • Datatable
    • Form with Uploader
    • Webix Jet

    Webix Jet: WJet CLI Tool Update

    The Webix Jet CLI tool has been updated. With version 1.1.0, you can add complex widgets and DHX widgets (Scheduler and Gantt), views and models. All skins are supported. Read more about WJet.

    What’s Next

    You can get the latest stable version of Webix via npm, the Client Area or by clicking the button.

    Download Webix 6.4

    Also stay tuned for more news and do not forget about the changes that will happen in September. Yes, it’s already coming soon.

    The post Webix 6.4: No Breaking Changes, Only Improvements appeared first on Webix Blog.

    Webix June 2019 Follow-up

    $
    0
    0

    Time flies… Especially in summer. So, don’t miss your chance to enjoy the warm days. Meanwhile, June is already over, and we’ve prepared for you a follow-up with the most significant Webix news and articles of the past month.

    webix follow-up

    Webix 6.4 release

    The biggest event in June for us was surely our new release. Webix 6.4 has several fixes and a bevy of improvements: the support of Amazon S3 for File Manager, .NET backend examples for Webix widgets, the updated WJet CLI tool for quick prototyping of Webix Jet apps, etc. Check out the detailed release overview.

    Beware of spammers

    We also warned you against spammers in one of our blog articles. Don’t miss a chance to read this post. It will help you protect yourself from the Internet fraudsters.

    New partnership program for outsourcing companies

    Become our partner to get unlimited access to our technical database and resources. Follow the link to learn more.

    Webix in practice

    We talked to our customer Jochen Funk who is an experienced software developer from Germany. We had a conversation about his web app created on the base of Webix Kanban widget, discussed the problems of effective business application development, and more. Read the full interview with Jochen.

    Other useful articles

    • Web design does more than you think. Read this article to discover its hidden powers.

    • What should one know to choose the most appropriate UI library for a particular project? Feel free to use our checklist.

    • It’s often said that JavaScript is a real troublemaker in terms of SEO. Check out the post to find out how to deal with these problems.

    The post Webix June 2019 Follow-up appeared first on Webix Blog.

    Viewing all 244 articles
    Browse latest View live