From cc7b4ad0b69a35238b3811f00ad3e4412fa2f1b7 Mon Sep 17 00:00:00 2001 From: vitalets <noginsk@rambler.ru> Date: Thu, 29 Nov 2012 18:59:04 +0400 Subject: [PATCH] inputs-ext directory with sample address input --- grunt.js | 30 +++----- src/inputs-ext/address/address.css | 9 +++ src/inputs-ext/address/address.js | 107 +++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 19 deletions(-) create mode 100644 src/inputs-ext/address/address.css create mode 100644 src/inputs-ext/address/address.js diff --git a/grunt.js b/grunt.js index 3b66d5b..4282da2 100644 --- a/grunt.js +++ b/grunt.js @@ -151,7 +151,8 @@ module.exports = function(grunt) { 'src/element/*.js', 'src/inputs/*.js', 'src/inputs/date/date.js', - 'src/inputs/dateui/dateui.js' + 'src/inputs/dateui/dateui.js', + 'src/inputs-ext/**/*.js' ] }, /* @@ -192,29 +193,20 @@ module.exports = function(grunt) { flatten: true } }, + inputs_ext: { + files: { + '<%= dist %>/inputs-ext/': 'src/inputs-ext/**' + }, + options: { + basePath: 'inputs-ext' + } + }, ui_datepicker: { files: { //copy jquery ui datepicker '<%= dist %>/jquery-editable/jquery-ui-datepicker/' : 'src/inputs/dateui/jquery-ui-datepicker/**' } - } - }, - yuidoc: { - compile: { - name: '<%= pkg.title || pkg.name %>', - description: '<%= pkg.description %>', - version: '<%= pkg.version %>', - url: "<%= pkg.homepage %>", - // logo: 'src/editable-form/img/loading.gif', - options: { - paths: "src/", - ignorePaths: ['src/inputs/date/locales'], - outdir: "../docs/", -// theme: "simple", - themedir: "../yuidoc-theme" - //themedir: "../yuidoc-bootstrap-theme-master" - } - } + } }, //compress does not work properly for MAC OS (see https://github.com/vitalets/bootstrap-editable/issues/19) diff --git a/src/inputs-ext/address/address.css b/src/inputs-ext/address/address.css new file mode 100644 index 0000000..f37a43b --- /dev/null +++ b/src/inputs-ext/address/address.css @@ -0,0 +1,9 @@ +.editable-address { + display: block; + margin-bottom: 5px; +} + +.editable-address span { + width: 70px; + display: inline-block; +} \ No newline at end of file diff --git a/src/inputs-ext/address/address.js b/src/inputs-ext/address/address.js new file mode 100644 index 0000000..7cc562e --- /dev/null +++ b/src/inputs-ext/address/address.js @@ -0,0 +1,107 @@ +/** +Address editable input. +Internally value stored as {city: "Moscow", street: "Lenina", building: "15"} + +@class address +@extends abstract +@final +@example +<a href="#" id="address" data-type="address" data-pk="1">awesome</a> +<script> +$(function(){ + $('#address').editable({ + url: '/post', + title: 'Enter city, street and building #', + value: { + city: "Moscow", + street: "Lenina", + building: "15" + } + }); +}); +</script> +**/ +(function ($) { + var Address = function (options) { + this.init('address', options, Address.defaults); + }; + + $.fn.editableform.utils.inherit(Address, $.fn.editableform.types.abstract); + + $.extend(Address.prototype, { + render: function() { + Address.superclass.render.call(this); + + // this.$input. + }, + + + value2html: function(value, element) { + var html = value.city + ', st. ' + value.street + ', bld. ' + value.building; + $(element).text(html); + }, + + html2value: function(html) { + /* + you may write parsing method to get value by element's html + e.g. "Moscow, st. Lenina, bld. 15" => {city: "Moscow", street: "Lenina", building: "15"} + but for complex structures I do not recommend do that. + Better always set value directly via javascript, e.g. + editable({ + value: { + city: "Moscow", + street: "Lenina", + building: "15" + } + }); + */ + return null; + }, + + /* + method for converting data before sent on server. + As jQuery correctly sends objects via ajax, you can just return value + */ + value2str: function(value) { + return value; + }, + + /* + this is mainly for parsing value defined in data-value attribute. + If you will always set value by javascript, no need to overwrite it + */ + str2value: function(str) { + return str; + }, + + value2input: function(value) { + this.$input.find('input[name="city"]').val(value.city); + this.$input.find('input[name="street"]').val(value.street); + this.$input.find('input[name="building"]').val(value.building); + }, + + input2value: function() { + return { + city: this.$input.find('input[name="city"]').val(), + street: this.$input.find('input[name="street"]').val(), + building: this.$input.find('input[name="building"]').val() + }; + }, + + activate: function() { + //set focus on city + this.$input.find('input[name="city"]').focus(); + } + }); + + Address.defaults = $.extend({}, $.fn.editableform.types.abstract.defaults, { + tpl: '<div><label><span>City: </span><input type="text" name="city" class="span2"></label></div>'+ + '<div><label><span>Street: </span><input type="text" name="street" class="span2"></label></div>'+ + '<div><label><span>Building: </span><input type="text" name="building" class="span1"></label></div>', + + inputclass: 'editable-address' + }); + + $.fn.editableform.types.address = Address; + +}(window.jQuery)); \ No newline at end of file