Пробую Vue.js

Ниже писал как тестировал React.js, в итоге не привилось от слова совсем. Всё надумано и усложнено.  Для реализации элементарных вещей типа вывода динамического списка загруженного из вне требуются феерические велосипеды. В итоге не смог придумать ни одного примера использования где было бы проще и удобнее чем с использованием чистого javascript + jquery. Теперь задумался в сторону фреймворка Vue.js В нём понравилась идея компонентности (кирпичиков из «своих» тегов) для создания страницы. Пока тестировал, получился вот такой скриптик, демонстрирующий базовые возможности:

<!doctype html>
<head>		
        <meta charset="UTF-8">
        <title>VUE.js test</title>		
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>        
</head>
<body>
<div id="app">
  {{ message }}
  <span v-bind:title="title">Hello</span>
  <ol>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>      
  </ol>    
  <button v-on:click="addItem">Добавить элемент</button>
  <input v-model="message">
  <brick></brick>
  <brick></brick>
</div>        
<script>   
Vue.component('brick', {
    template: '<div>Это кирпичик</div>'
});    
var app = new Vue({
  el: '#app',
  data: {
    message: 'Привет'+ new Date().toLocaleString(),
    title: 'title me'+ new Date().toLocaleString(),
    msg:"DDD",
    todos:[
        {text:'Один',key:"wedwe"},
        {text:'Два'},
        {text:'Три'}
    ]
  },
  methods: {
        addItem: function () {
          this.todos.push({text: this.message});
        }
  },  
});    

</script>    
</body>
</html>        

Демо тут

Пробуем ReactJS

Если честно, пока не представляю, что можно сделать с ReactJS, что нельзя сделать удобно и понятно при помощи Jquery+PHP. Но решил таки попробовать. Итак, что такое ReactJS — фактически это надстройка над JavaScript написанная на языке JavaScript. Т.е. всё что написано на ReactJS — компилируется или «на лету» при помощи babel в javascript или при выкладывании в «продакт» и далее подключается вызовом обычного JavaScript.

Чтобы не разделять «продакт» «девелоп» и не возиться с бабелом, я у себя настроил один из вариантов, а именно в косоли висит запущеный скрипт-компилятор, который мониторит изменения файлов в папке src и при изменении чего-либо, компилирует файл в папку js. Соответственно всегда имеем «продакт».

Что нужно сделать чтоб начать пользоваться ReactJS:

1) Поставить NodeJS и ReactJS на компьютере где разрабатываем (компиляция кода ReactJS в JavaScript происходит при помощи его):

apt install nodejs
npm install babel-cli@6 babel-preset-react-app@3

2) Ставим npx — утилита которая позволяет запускать npm пакеты

npm install -g npx

3) Зпаускаем в консоли что-типа:

npx babel --watch src --out-dir js --presets react-app/prod

В моем случае все скрипты из папки src компилируются в папку js

В итоге html страница может выглядеть так:

<!DOCTYPE html>
<html>    
    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
    <head>
        <meta charset="UTF-8">
        <title id="rj_title"></title>
    </head>
    <body id="rj_body">
        <div id="root"></div>
        <script src="js/test.js"></script>
    </body>
</html>

а файл src/test.js так:

const name='Павел Игоревич';
const element = <h1>Привет {name}!</h1>;
ReactDOM.render(
  element,
  document.getElementById('root')
);

В браузере выведет:

jqgrid-free экспорт в эксель

В «свободном» форке jqgrid, к сожалению нет «встроенного» способа сформировать на основании таблицы файл Excel. Однако можно использовать сторонний способ https://github.com/SheetJS/sheetjs

Тогда код может получиться примерно следующий:

        jQuery("#paylist").jqGrid('navButtonAdd',"#paypager",{caption:'Excel',                              
             title: "Выгрузить в Excel",buttonicon: "none",position:"last",
             onClickButton:function(){                
                          var filename = "export_rents.xlsx",
                            data = $("#paylist").getRowData();
                            dataAsArray = [["dt", "amount", "comment"]];
                              for (i = 0; i < data.length; i++) {
                                item = data[i];
                                dataAsArray.push([item.dt, item.amount, item.comment]);
                              }
                              var ws_name = "SheetJS";
                              var wb = XLSX.utils.book_new(),
                                  ws = XLSX.utils.aoa_to_sheet(dataAsArray);
                              XLSX.utils.book_append_sheet(wb, ws, ws_name);
                              XLSX.writeFile(wb, filename);                
             }        
         });

Иногда при попытке установить (apt-get update) какой то пакет в Ubuntu можно увидеть ошибки вида:

Ош  http://security.ubuntu.com vivid-security/multiverse i386 Packages
  404  Not Found [IP: 91.189.91.24 80]
W: Не удалось получить http://ru.archive.ubuntu.com/ubuntu/dists/vivid/main/source/Sources  404  Not Found [IP: 213.180.204.183 80]

Скорее всего это лишь означает, что версия Ubuntu устарела, и обновления и пакеты далее доступны по другому адресу:

http://old-releases.ubuntu.com/ubuntu/pool/main/

Что делать: открываем файл источников ПО, и заменяем ссылки вида http://security.ubuntu.com на http://old-releases.ubuntu.com/

mcedit /etc/apt/sources.list

Жизнь замечательных грибов