├── .github ├── PULL_REQUEST_TEMPLATE.md ├── stale.yml ├── ISSUE_TEMPLATE.md ├── CONTRIBUTING.md └── GIT-WORKFLOW.md ├── src ├── SortableInputAsset.php ├── assets │ └── js │ │ ├── kv-sortable-input.min.js │ │ └── kv-sortable-input.js └── SortableInput.php ├── CHANGE.md ├── composer.json ├── LICENSE.md └── README.md /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Scope 2 | This pull request includes a 3 | 4 | - [ ] Bug fix 5 | - [ ] New feature 6 | - [ ] Translation 7 | 8 | ## Changes 9 | The following changes were made (this change is also documented in the [change log](https://github.com/kartik-v/yii2-sortable-input/blob/master/CHANGE.md)): 10 | 11 | - 12 | - 13 | - 14 | 15 | ## Related Issues 16 | If this is related to an existing ticket, include a link to it as well. -------------------------------------------------------------------------------- /src/SortableInputAsset.php: -------------------------------------------------------------------------------- 1 | 17 | * @since 1.0 18 | */ 19 | class SortableInputAsset extends AssetBundle 20 | { 21 | /** 22 | * @inheritdoc 23 | */ 24 | public function init() 25 | { 26 | $this->setSourcePath(__DIR__ . '/assets'); 27 | $this->setupAssets('js', ['js/kv-sortable-input']); 28 | parent::init(); 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 60 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - bug 8 | - enhancement 9 | - pinned 10 | - security 11 | # Label to use when marking an issue as stale 12 | staleLabel: wontfix 13 | # Comment to post when marking an issue as stale. Set to `false` to disable 14 | markComment: > 15 | This issue has been automatically marked as stale because it has not had 16 | recent activity. It will be closed if no further activity occurs. Thank you 17 | for your contributions. 18 | # Comment to post when closing a stale issue. Set to `false` to disable 19 | closeComment: false -------------------------------------------------------------------------------- /CHANGE.md: -------------------------------------------------------------------------------- 1 | Change Log: `yii2-sortable-input` 2 | ================================= 3 | 4 | ## Version 1.2.1 5 | 6 | **Date:** 29-Aug-2018 7 | 8 | - (bug #12): Correct sortable input plugin for the latest `html5sortable` release. 9 | - Add github contribution and PR/issue log templates. 10 | - Fix composer settings 11 | - Update copyright year to current. 12 | - Reorganize source code in `src` directory. 13 | 14 | ## Version 1.2.0 15 | 16 | **Date:** 29-Jan-2015 17 | 18 | - (enh #1): Plugin enhancement to update parent keys for connected sortables. 19 | 20 | ## Version 1.1.0 21 | 22 | **Date:** 10-Nov-2014 23 | 24 | - Set dependency on Krajee base components 25 | - Set release to stable 26 | 27 | ## Version 1.0.0 28 | 29 | **Date:** 01-Aug-2014 30 | 31 | - Initial release 32 | - PSR4 alias change -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kartik-v/yii2-sortable-input", 3 | "description": "Sortable input widget based on yii2-sortable extension.", 4 | "keywords": ["yii2", "extension", "widget", "input", "sortable", "range", "jquery", "bootstrap"], 5 | "homepage": "https://github.com/kartik-v/yii2-sortable-input", 6 | "type": "yii2-extension", 7 | "license": "BSD-3-Clause", 8 | "authors": [ 9 | { 10 | "name": "Kartik Visweswaran", 11 | "email": "kartikv2@gmail.com", 12 | "homepage": "http://www.krajee.com/" 13 | } 14 | ], 15 | "require": { 16 | "kartik-v/yii2-sortable": "~1.2" 17 | }, 18 | "autoload": { 19 | "psr-4": { 20 | "kartik\\sortinput\\": "src" 21 | } 22 | }, 23 | "extra": { 24 | "branch-alias": { 25 | "dev-master": "1.2.x-dev" 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Prerequisites 2 | 3 | - [ ] I have searched for similar issues in both open and closed tickets and cannot find a duplicate. 4 | - [ ] The issue still exists against the latest `master` branch of yii2-sortable-input. 5 | - [ ] This is not an usage question. I confirm having gone through and read the [documentation and demos](http://demos.krajee.com/sortable-input). 6 | - [ ] This is not a general programming / coding question. (Those should be directed to the [webtips Q & A forum](http://webtips.krajee.com/questions)). 7 | - [ ] I have attempted to find the simplest possible steps to reproduce the issue. 8 | - [ ] I have included a failing test as a pull request (Optional). 9 | 10 | ## Steps to reproduce the issue 11 | 12 | 1. 13 | 2. 14 | 3. 15 | 16 | ## Expected behavior and actual behavior 17 | 18 | When I follow those steps, I see... 19 | 20 | I was expecting... 21 | 22 | ## Environment 23 | 24 | #### Browsers 25 | 26 | - [ ] Google Chrome 27 | - [ ] Mozilla Firefox 28 | - [ ] Internet Explorer 29 | - [ ] Safari 30 | 31 | #### Operating System 32 | 33 | - [ ] Windows 34 | - [ ] Mac OS X 35 | - [ ] Linux 36 | - [ ] Mobile 37 | 38 | #### Libraries 39 | 40 | - jQuery version: 41 | - yii2-sortable-input version: 42 | 43 | ## Isolating the problem 44 | 45 | - [ ] This bug happens [on the docs and demos page](https://demos.krajee.com/sortable-input) 46 | - [ ] The bug happens consistently across all tested browsers 47 | - [ ] This bug happens when using yii2-sortable-input without other plugins. -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 - 2018, Kartik Visweswaran 2 | Krajee.com 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without modification, 6 | are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | * Redistributions in binary form must reproduce the above copyright notice, this 12 | list of conditions and the following disclaimer in the documentation and/or 13 | other materials provided with the distribution. 14 | 15 | * Neither the names of Kartik Visweswaran or Krajee nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 23 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /src/assets/js/kv-sortable-input.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2018 3 | * @version 1.2.1 4 | * 5 | * JQuery Plugin for yii2-sortable-input. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014, Kartik Visweswaran, Krajee.com 9 | * For more JQuery plugins visit http://plugins.krajee.com 10 | * For more Yii related demos visit http://demos.krajee.com 11 | */ 12 | !function(t){var e=function(e,i){this.$element=t(e),this.options=i,this.init(i),this.listen()};e.prototype={constructor:e,init:function(e){var i=this;i.$sortable=t("#"+e.sortableId),i.delimiter=e.delimiter,i.$form=i.$element.closest("form"),i.initialValue=i.getKeys(),i.initialContent=i.$sortable.html(),i.$element.val(i.initialValue)},listen:function(){var e=this;e.$sortable.on("sortupdate",function(i){var n=t(i.detail.origin.container);if(n.length){if(n.attr("id")!=e.$sortable.attr("id")){var a=t("input[data-sortable='"+n.attr("id")+"']");a.val(e.getKeys(n)).trigger("change")}e.$element.val(e.getKeys()).trigger("change")}}),e.$form.on("reset",function(){setTimeout(function(){e.$sortable.html(e.initialContent).sortable(e.options),e.$element.val(e.initialValue)},300)})},getKeys:function(){var e=this,i=arguments.length>0?arguments[0]:e.$sortable;return i.find("li").map(function(e,i){return t(i).data("key")}).get().join(e.delimiter)}},t.fn.sortableInput=function(i){var n=Array.apply(null,arguments);return n.shift(),this.each(function(){var a=t(this),r=a.data("sortableInput"),l="object"==typeof i&&i;r||a.data("sortableInput",r=new e(this,t.extend({},t.fn.sortableInput.defaults,l,t(this).data()))),"string"==typeof i&&r[i].apply(r,n)})},t.fn.sortableInput.defaults={sortableId:"",delimiter:","}}(jQuery); -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contributing to yii2-sortable-input 2 | =================================== 3 | Looking to contribute something to yii2-sortable-input? **Here's how you can help.** 4 | 5 | Using the issue tracker 6 | ----------------------- 7 | When [reporting bugs][reporting-bugs] or 8 | [requesting features][requesting-features], the 9 | [issue tracker on GitHub][issue-tracker] is the recommended channel to use. 10 | 11 | The issue tracker **is not** a place for support requests. Refer the 12 | [extension documentation and demos](http://demos.krajee.com/sortable-input) and/or refer to the 13 | [webtips Q & A forum](http://webtips.krajee.com/questions) which are the better places to get help. 14 | 15 | How to contribute via a pull request? 16 | ------------------------------------- 17 | Refer this [git workflow for contributors](.github/GIT-WORKFLOW.md). 18 | 19 | Reporting bugs with yii2-sortable-input 20 | --------------------------------- 21 | We really appreciate clear bug reports that _consistently_ show an issue 22 | within _yii2-sortable-input_. 23 | 24 | The ideal bug report follows these guidelines: 25 | 26 | 1. **Use the [GitHub issue search][issue-search]** — Check if the issue 27 | has already been reported. 28 | 2. **Check if the issue has been fixed** — Try to reproduce the problem 29 | using the code in the `master` branch. 30 | 3. **Isolate the problem** — Try to share a demo or a test case that 31 | consistently reproduces the problem. 32 | 33 | Please try to be as detailed as possible in your bug report, especially if an 34 | isolated test case cannot be made. Some useful questions to include the answer 35 | to are: 36 | 37 | - What steps can be used to reproduce the issue? 38 | - What is the bug and what is the expected outcome? 39 | - What browser(s) and Operating System have you tested with? 40 | - Does the bug happen consistently across all tested browsers? 41 | - What version of jQuery are you using? And what version of yii2-sortable-input? 42 | - Are you using yii2-sortable-input with other plugins? 43 | 44 | All of these questions will help others fix and identify any potential bugs. 45 | 46 | Requesting features in yii2-sortable-input 47 | ------------------------------------ 48 | Before starting work on a major feature for yii2-sortable-input, **read the 49 | [documentation](http://demos.krajee.com/sortable-input) first** or you may risk spending a considerable amount of 50 | time on something which the project developers are not interested in bringing into the project. 51 | 52 | Licensing 53 | --------- 54 | 55 | It should also be made clear that **all code contributed to yii2-sortable-input** must be 56 | licensable under the [BSD-3 license][licensing]. Code that cannot be released 57 | under this license **cannot be accepted** into the project. 58 | 59 | [issue-search]: https://github.com/kartik-v/yii2-sortable-input/search?q=&type=Issues 60 | [issue-tracker]: https://github.com/kartik-v/yii2-sortable-input/issues 61 | [licensing]: https://github.com/kartik-v/yii2-sortable-input/blob/master/LICENSE.md 62 | [reporting-bugs]: #reporting-bugs-with-yii2-sortable-input 63 | [requesting-features]: #requesting-features-in-yii2-sortable-input -------------------------------------------------------------------------------- /src/assets/js/kv-sortable-input.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014 - 2018 3 | * @version 1.2.1 4 | * 5 | * JQuery Plugin for yii2-sortable-input. 6 | * 7 | * Author: Kartik Visweswaran 8 | * Copyright: 2014, Kartik Visweswaran, Krajee.com 9 | * For more JQuery plugins visit http://plugins.krajee.com 10 | * For more Yii related demos visit http://demos.krajee.com 11 | */ 12 | (function ($) { 13 | var SortableInput = function (element, options) { 14 | this.$element = $(element); 15 | this.options = options; 16 | this.init(options); 17 | this.listen(); 18 | }; 19 | 20 | SortableInput.prototype = { 21 | constructor: SortableInput, 22 | init: function (options) { 23 | var self = this, $form; 24 | self.$sortable = $('#' + options.sortableId); 25 | self.delimiter = options.delimiter; 26 | self.$form = self.$element.closest('form'); 27 | self.initialValue = self.getKeys(); 28 | self.initialContent = self.$sortable.html(); 29 | self.$element.val(self.initialValue); 30 | }, 31 | listen: function () { 32 | var self = this; 33 | self.$sortable.on('sortupdate', function (e) { 34 | var $parent = $(e.detail.origin.container); 35 | if (!$parent.length) { 36 | return; 37 | } 38 | if ($parent.attr('id') != self.$sortable.attr('id')) { 39 | var $parentEl = $("input[data-sortable='" + $parent.attr('id') + "']"); 40 | $parentEl.val(self.getKeys($parent)).trigger('change'); 41 | } 42 | self.$element.val(self.getKeys()).trigger('change'); 43 | }); 44 | self.$form.on('reset', function () { 45 | setTimeout(function () { 46 | self.$sortable.html(self.initialContent).sortable(self.options); 47 | self.$element.val(self.initialValue); 48 | }, 300); 49 | }); 50 | }, 51 | getKeys: function () { 52 | var self = this, $sortable = arguments.length > 0 ? arguments[0] : self.$sortable; 53 | return $sortable.find('li').map(function (i, n) { 54 | return $(n).data('key'); 55 | }).get().join(self.delimiter); 56 | 57 | }, 58 | }; 59 | 60 | // sortableInput plugin definition 61 | $.fn.sortableInput = function (option) { 62 | var args = Array.apply(null, arguments); 63 | args.shift(); 64 | return this.each(function () { 65 | var $this = $(this), 66 | data = $this.data('sortableInput'), 67 | options = typeof option === 'object' && option; 68 | 69 | if (!data) { 70 | $this.data('sortableInput', (data = new SortableInput(this, $.extend({}, $.fn.sortableInput.defaults, options, $(this).data())))); 71 | } 72 | 73 | if (typeof option === 'string') { 74 | data[option].apply(data, args); 75 | } 76 | }); 77 | }; 78 | 79 | $.fn.sortableInput.defaults = {sortableId: '', delimiter: ','}; 80 | }(jQuery)); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
4 |
5 |
11 |
12 |