diff --git a/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.css b/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.css
new file mode 100644
index 00000000..6918d98f
--- /dev/null
+++ b/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.css
@@ -0,0 +1,60 @@
+.InputfieldIconAll {
+ overflow: visible !important;
+ margin-top: 12px;
+ text-align: justify;
+}
+.InputfieldIconAll .fa.fw {
+ padding: 7px 6px;
+ font-size: 16px !important;
+ transition: all 0.16s;
+ min-width: 34px;
+ text-align: center;
+ backface-visibility: hidden;
+ background: white;
+}
+.fa.fw:hover {
+ background: #E2E9EF;
+ cursor: pointer;
+ border-radius: 3px;
+}
+.fa.fw.on {
+ background: #d52978;
+ color: white;
+ border-radius: 3px;
+}
+.fa.fw:active {
+ animation: 0.16s zoomIcon 0.3s forwards;
+ z-index: 200;
+}
+.fa.fw::after {
+ content: attr(title);
+ color: inherit;
+ position: absolute;
+ top: 100%;
+ margin-top: -3px;
+ font-size: 4px;
+ letter-spacing: 0;
+ left: 0;
+ right: 0;
+ padding-bottom: 2px;
+ backface-visibility: hidden;
+ opacity: 0;
+ transition: opacity 0.4s cubic-bezier(0.895, 0.030, 0.685, 0.220);
+}
+.fa.fw:active::after {
+ background: #E2E9EF;
+ opacity: 1;
+ pointer-events: none;
+}
+
+@keyframes zoomIcon {
+ 0% {
+ transform: scale(1);
+ }
+ 100% {
+ transform: scale(4);
+ color: inherit;
+ background: #E2E9EF;
+ pointer-events: none;
+ }
+}
diff --git a/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.js b/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.js
index 9180642a..8c83cc03 100644
--- a/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.js
+++ b/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.js
@@ -1,81 +1,74 @@
-
-$(document).ready(function() {
+function InputfieldIcon() {
- $(".InputfieldIcon select").change(function() {
-
- var $select = $(this);
+ $('.InputfieldIcon select').change(function() {
+ var $select = $(this);
var val = $select.val();
-
if(val.length > 0) {
- $select.closest(".InputfieldIcon").find(".InputfieldHeader > i.fa:first-child")
- .attr('class', 'fa ' + val)
+ $select.closest('.InputfieldIcon').find('.InputfieldHeader > i.fa:first-child')
+ .attr('class', 'fa fa-fw ' + val)
.parent().effect('highlight', 500);
- var $all = $select.siblings(".InputfieldIconAll");
- if($all.is(":visible")) {
- $all.find('.on').removeClass('on').mouseout();
- var $icon = $all.find("." + val).parent('span');
- if(!$icon.hasClass('on')) $icon.addClass('on').mouseover();
+ var $all = $select.siblings('.InputfieldIconAll');
+ if($all.is(':visible')) {
+ $all.find('.on').removeClass('on');
+ $all.find('.' + val).addClass('on');
}
}
-
- $select.removeClass('on');
+ $select.removeClass('on');
});
-
- $(".InputfieldIconAll").hide();
-
- $("a.InputfieldIconShowAll").click(function() {
-
- var $link = $(this);
- var $all = $link.siblings(".InputfieldIconAll");
- var $select = $link.siblings("select");
+
+ $('.InputfieldIconAll').hide();
+
+ $('a.InputfieldIconShowAll').on('click', function() {
+
+ var $a = $(this);
+ var $ai = $a.prev('i');
+ var $all = $a.siblings('.InputfieldIconAll');
+ var $select = $a.siblings("select");
+ $ai.toggleClass('fa-angle-down fa-angle-right');
+
if($all.is(":visible")) {
- $all.slideUp('fast', function() {
- $all.html('');
- });
+ $all.hide();
return false;
}
-
- $select.children("option").each(function() {
- var val = $(this).attr('value');
+
+ $all.show();
+
+ if($all.hasClass('initialized')) return false;
+
+ $all.addClass('initialized');
+
+ $select.children('option').each(function() {
+ var val = $(this).val();
if(val.length == 0) return;
- var $icon = $("")
- .addClass(val)
- .attr('data-name', val)
- .css('cursor', 'pointer')
- .attr('title', val);
- var $span = $("")
- .css('padding', '2px 2px 2px 2px')
- .css('margin-right', '10px')
- .css('line-height', '30px')
- .append($icon);
- $all.append($span);
- });
-
- $all.slideDown('fast', function() {
-
- $all.on('click', 'span', function() {
- $all.find('.on').removeClass('on').mouseout();
- $(this).addClass('on').mouseover();
- if(!$select.hasClass('on')) $select.val($(this).find('i.fa').attr('data-name')).change();
+ $all.append("");
+ });
- });
- $all.on('mouseover', 'span', function() {
- $(this).css('background-color', 'red').css('color','white');
- });
- $all.on('mouseout', 'span', function() {
- if(!$(this).hasClass('on')) {
- $(this).css('background-color', 'inherit').css('color', 'inherit');
- }
- });
+ $all.on('click', 'i', function() {
+ var $i = $(this);
+ if($i.hasClass('on')) {
+ $i.removeClass('on');
+ $select.val('').change();
+ return;
+ }
+ $all.find('.on').removeClass('on');
+ $i.addClass('on');
+ if(!$select.hasClass('on')) {
+ $select.val($i.attr('title')).change();
+ }
+ });
+
+ var val = $select.val();
+ if(val.length > 0) {
+ $all.find('.' + val).addClass('on');
+ }
- var val = $select.val();
- if(val.length > 0) $all.find("." + val).each(function() {
- $(this).parent('span').addClass('on').mouseover();
- });
- });
-
return false;
- });
-
-});
\ No newline at end of file
+ });
+
+}
+
+$(document).ready(function() {
+ InputfieldIcon();
+});
+
diff --git a/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.min.js b/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.min.js
index a37367c4..0cebb031 100644
--- a/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.min.js
+++ b/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.min.js
@@ -1 +1 @@
-$(document).ready(function(){$(".InputfieldIcon select").change(function(){var b=$(this);var d=b.val();if(d.length>0){b.closest(".InputfieldIcon").find(".InputfieldHeader > i.fa:first-child").attr("class","fa "+d).parent().effect("highlight",500);var c=b.siblings(".InputfieldIconAll");if(c.is(":visible")){c.find(".on").removeClass("on").mouseout();var a=c.find("."+d).parent("span");if(!a.hasClass("on")){a.addClass("on").mouseover()}}}b.removeClass("on")});$(".InputfieldIconAll").hide();$("a.InputfieldIconShowAll").click(function(){var a=$(this);var c=a.siblings(".InputfieldIconAll");var b=a.siblings("select");if(c.is(":visible")){c.slideUp("fast",function(){c.html("")});return false}b.children("option").each(function(){var f=$(this).attr("value");if(f.length==0){return}var e=$("").addClass(f).attr("data-name",f).css("cursor","pointer").attr("title",f);var d=$("").css("padding","2px 2px 2px 2px").css("margin-right","10px").css("line-height","30px").append(e);c.append(d)});c.slideDown("fast",function(){c.on("click","span",function(){c.find(".on").removeClass("on").mouseout();$(this).addClass("on").mouseover();if(!b.hasClass("on")){b.val($(this).find("i.fa").attr("data-name")).change()}});c.on("mouseover","span",function(){$(this).css("background-color","red").css("color","white")});c.on("mouseout","span",function(){if(!$(this).hasClass("on")){$(this).css("background-color","inherit").css("color","inherit")}});var d=b.val();if(d.length>0){c.find("."+d).each(function(){$(this).parent("span").addClass("on").mouseover()})}});return false})});
\ No newline at end of file
+function InputfieldIcon(){$(".InputfieldIcon select").change(function(){var $select=$(this);var val=$select.val();if(val.length>0){$select.closest(".InputfieldIcon").find(".InputfieldHeader > i.fa:first-child").attr("class","fa fa-fw "+val).parent().effect("highlight",500);var $all=$select.siblings(".InputfieldIconAll");if($all.is(":visible")){$all.find(".on").removeClass("on");$all.find("."+val).addClass("on")}}$select.removeClass("on")});$(".InputfieldIconAll").hide();$("a.InputfieldIconShowAll").on("click",function(){var $a=$(this);var $ai=$a.prev("i");var $all=$a.siblings(".InputfieldIconAll");var $select=$a.siblings("select");$ai.toggleClass("fa-angle-down fa-angle-right");if($all.is(":visible")){$all.hide();return false}$all.show();if($all.hasClass("initialized"))return false;$all.addClass("initialized");$select.children("option").each(function(){var val=$(this).val();if(val.length==0)return;$all.append("")});$all.on("click","i",function(){var $i=$(this);if($i.hasClass("on")){$i.removeClass("on");$select.val("").change();return}$all.find(".on").removeClass("on");$i.addClass("on");if(!$select.hasClass("on")){$select.val($i.attr("title")).change()}});var val=$select.val();if(val.length>0){$all.find("."+val).addClass("on")}return false})}$(document).ready(function(){InputfieldIcon()});
\ No newline at end of file
diff --git a/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.module b/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.module
index ac92d95f..99580a83 100644
--- a/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.module
+++ b/wire/modules/Inputfield/InputfieldIcon/InputfieldIcon.module
@@ -12,25 +12,39 @@ class InputfieldIcon extends Inputfield {
return array(
'title' => __('Icon', __FILE__), // Module Title
'summary' => __('Select an icon', __FILE__), // Module Summary
- 'version' => 2,
+ 'version' => 3,
);
}
const prefix = 'fa-';
protected $options = array();
-
+
+ /**
+ * Construct
+ *
+ */
public function __construct() {
parent::__construct();
- $this->options = file(dirname(__FILE__) . '/icons.inc', FILE_IGNORE_NEW_LINES);
+ $this->options = file(__DIR__ . '/icons.inc', FILE_IGNORE_NEW_LINES);
$this->set('prefixValue', true); // should value attr always start with prefix? (externally)
}
-
+
+ /**
+ * Init
+ *
+ */
public function init() {
parent::init();
$this->icon = 'puzzle-piece';
}
-
+
+ /**
+ * Render
+ *
+ * @return string
+ *
+ */
public function ___render() {
$out = '';
$attrs = $this->getAttributes();
@@ -38,27 +52,35 @@ class InputfieldIcon extends Inputfield {
if($value && strpos($value, self::prefix) !== 0) $value = self::prefix . $value;
if($value) $this->icon = $value;
unset($attrs['value']);
- $out .= "\n ";
$out .=
- " " .
- "" .
+ "" .
+ "" .
"" . $this->_('Show All Icons') . "" .
"
";
return $out;
}
-
+
+ /**
+ * Set attribute
+ *
+ * @param array|string $key
+ * @param array|bool|int|string $value
+ * @return Inputfield
+ *
+ */
public function setAttribute($key, $value) {
- if($key == 'value' && !empty($value)) {
+ if($key === 'value' && !empty($value)) {
if(strpos($value, self::prefix) !== 0) $value = self::prefix . $value;
$index = array_search($value, $this->options);
if(is_int($index)) {
@@ -69,9 +91,16 @@ class InputfieldIcon extends Inputfield {
}
return parent::setAttribute($key, $value);
}
-
+
+ /**
+ * Get attribute
+ *
+ * @param string $key
+ * @return bool|mixed|null|string
+ *
+ */
public function getAttribute($key) {
- if($key == 'value') {
+ if($key === 'value') {
$value = parent::getAttribute($key);
if(empty($value)) return $value;
if($this->getSetting('prefixValue')) {