FM Design
Would you like to react to this message? Create an account in a few clicks or log in to continue.

IMPORTANT

FM Design is in read-only mode, please click here for more information.

Latest topics
» Forumactif Edge - Releases
by Ange Tuteur Tue 03 Sep 2019, 11:49

» GIFActif - Giphy Button for the Editor
by Ange Tuteur Wed 08 May 2019, 17:21

» Forum Closure
by Ange Tuteur Mon 01 Jan 2018, 01:28

» Chit Chat Thread
by Valoish Sun 31 Dec 2017, 19:15

» Font/Text background color.
by Valoish Sun 31 Dec 2017, 19:11

» Forumactif Messenger - Instant Message Application for Forumotion
by Wolfuryo Sun 31 Dec 2017, 18:24

» [GAME] Count to One Million!
by brandon_g Fri 29 Dec 2017, 18:58

» Post Cards
by manikbiradar Wed 20 Dec 2017, 07:50

» [GAME] Countdown from 200,000
by Valoish Wed 13 Dec 2017, 23:22

» GeekPolice Tech Support Forums - GeekPolice.net
by Dr Jay Mon 11 Dec 2017, 19:12

» Asking about some plugin for Forumotion
by Dr Jay Mon 11 Dec 2017, 19:10

» [GAME] What are you thinking right now?
by Van-Helsing Sat 09 Dec 2017, 14:51

» Widget : Similar topics
by ranbac Wed 06 Dec 2017, 18:11

» Change the Background of the Forum and put an image and how to make prefixs?
by Clement Wed 06 Dec 2017, 15:19

» Hello from Western Australia
by SarkZKalie Wed 06 Dec 2017, 05:34

Recent Tutorials
Top posting users this month

Who is online?
In total there are 9 users online :: 0 Registered, 0 Hidden and 9 Guests :: 1 Bot

None

[ View the whole list ]


Most users ever online was 515 on Tue 14 Sep 2021, 15:24

GIFActif - Giphy Button for the Editor

Page 3 of 3 Previous  1, 2, 3

View previous topic View next topic Go down

Ange Tuteur
Ange Tuteur
Administrator
Gender : Male
Posts : 4741
Points : 12252
Reputation : 2376
Location : Pennsylvania
Language : EN, JA, FR
Browser : Browser : Brave Forum Version : Forum Version : Forumactif Edge
https://sethclydesdale.github.io/ https://twitter.com/sethc1995

PostAnge Tuteur Fri 26 Aug 2016, 15:26

First topic message reminder :

What is GIFActif ? GIFActif is a Giphy search plugin for the free forum service, Forumotion aka Forumactif. GIFActif adds a new button to the message editor that gives your members the ability to search for GIFS and attach them to their messages without ever leaving the page ! Why express yourself with just words alone when you can add a GIF to your message to liven things up ?

editor - GIFActif - Giphy Button for the Editor - Page 3 2DO0i76

Click to view demo

How does it work ?

  • GIFActif adds a new button to the editor with the Giphy logo -->
    editor - GIFActif - Giphy Button for the Editor - Page 3 Giphy10
  • Clicking the button opens the Giphy search drop down.
  • Type any words you want into the search bar and you'll immediately be presented with GIFs relevant to your keywords.
  • Scrolling to the end of the results will load more results.
  • Click the GIF you want to add to your message and you're done !
  • Open the drop down again to find more GIFs !!


Where do the GIFs come from ?
All GIFs are retrieved from Giphy.com by using the Giphy Search API to find GIFs just for you !
Note : Since this project is open source, it'll be using the public beta key provided by Giphy, which is subject to rate limit constraints.


Feel free to move onto the installation if you're ready to get giphy with it ! Cool


Installation

To install the Giphy search button, go to Admin Panel > Modules > JavaScript codes management and create a new JavaScript with the following settings.

Title : GIFActif
Placement : In all the pages
Paste the following script and submit :
Code:
(function() {
  // return if gifactif has been initialized
  if (window.gifactif) {
    if (window.console && console.warn) {
      console.warn('gifactif has already been initialized');
    }
    return;
  }


  // setup global object
  window.gifactif = {
    key : 'API_KEY', // authorization
    limit : 26, // max image results
    delay : 200, // delay before searches commence (200ms)
    auto_close : true,

    // general language settings
    lang : {
      searching : 'Searching...',
      not_found : 'No results found.. <img src="https://2img.net/i/fa/i/smiles/icon_sad.gif" style="margin:0;vertical-align:middle;"/>'
    },

    // dropdown markup
    dropDown : $(
      '<div>'+
        '<input type="text" id="gifactif_search" placeholder="Search for a GIF..." style="width:90%;"/>'+
        '<div id="gifactif_results" onscroll="gifactif.scrolling(this);"><div id="gifactif_images"></div></div>'+
        '<div id="giphy_attribution_mark"></div>'+
      '</div>'
    )[0],


    // initial setup of the SCEditor command
    init : function () {
      if ($.sceditor && window.toolbar) {

        // set the gifactif command
        $.sceditor.command.set('gifactif', {

          tooltip : 'Find a GIF',

          // Dropdown and general functionality for gifactif
          dropDown : function (editor, caller, callback) {
            gifactif.reset();
            gifactif.editor = editor;
            gifactif.callback = callback;
            editor.createDropDown(caller, 'gifactif', gifactif.dropDown);

            $('#gifactif_search', gifactif.dropDown)[0].focus(); // focus the search area
          },


          // WYSIWYG MODE
          exec : function(caller) {
            var editor = this;

            $.sceditor.command.get('gifactif').dropDown(editor, caller, function(gif) {
              editor.insert('[img]' + gif + '[/img]');
            });
          },


          // SOURCE MODE
          txtExec : function(caller) {
            var editor = this;

            $.sceditor.command.get('gifactif').dropDown(editor, caller, function(gif) {
              editor.insertText('[img]' + gif + '[/img]');
            });
          }

        });


        // add gifactif to the editor toolbar
        toolbar = toolbar.replace('image,', 'image,gifactif,');

        // add CSS for button image and dropdown
        $('head').append(
          '<style type="text/css">'+
            '.sceditor-button-gifactif div { background-image:url(https://i.servimg.com/u/f35/18/21/60/73/giphy10.png) !important; }'+
            '.sceditor-button-gifactif:after, .sceditor-button-gifactif:before { content:""; }'+ // Forumactif Edge override
            '#gifactif_results { width:300px; margin:10px auto; min-height:30px; max-height:300px; overflow-x:hidden; overflow-y:auto; }'+
            '.gifactif_imagelist { line-height:0; column-count:2; column-gap:3px; }'+
            '.gifactif_imagelist img { margin-bottom:3px; cursor:pointer; width:100%; }'+
            'html #giphy_attribution_mark { background:url(https://i.servimg.com/u/f35/18/21/60/73/powere11.png) no-repeat 50% 50% transparent !important; height:22px !important; width:100%; !important; min-width:200px !important; display:block !important; visibility:visible !important; opacity:1 !important; }'+
          '</style>'
        );
      }

    },


    // search for a GIPHY gif
    search : function (query) {
      if (gifactif.timeout) {
        gifactif.abort(); // abort ongoing searches and requests
      }

      if (query) {

        // set a small timeout in case the user is still typing
        gifactif.timeout = window.setTimeout(function() {
          gifactif.reset(true, gifactif.lang.searching);
          gifactif.query = encodeURIComponent(query);

          gifactif.request = $.get('http://api.giphy.com/v1/gifs/search?q=' + gifactif.query + '&limit=' + gifactif.limit + '&rating=pg-13&api_key=' + gifactif.key, function(data) {
            // update global data such as page offsets for scrolling
            gifactif.request = null;
            gifactif.offset = data.pagination.offset + gifactif.limit;
            gifactif.offset_total = data.pagination.total_count;

            gifactif.reset(true); // reset HTML content
            gifactif.addGIF(data); // send data to be parsed
          });

        }, gifactif.delay);

      } else {
        gifactif.reset(true);
      }
    },


    // abort ongoing searches and requests
    abort : function () {
      if (gifactif.timeout) {
        window.clearInterval(gifactif.timeout);
        gifactif.timeout = null;
      }

      if (gifactif.request) {
        gifactif.request.abort();
        gifactif.request = null;
      }
    },


    // add gifs to the result list
    addGIF : function (data, loadMore) {
      // setup data and begin parsing results
      var gif = data.data,
          i = 0,
          j = gif.length,
          list = $('<div class="gifactif_imagelist" />')[0];

      if (j) {
        for (; i < j; i++) {
          list.appendChild($('<img id="' + gif[i].id + '" src="' + gif[i].images.fixed_width.url + '" />').click(gifactif.insert)[0]);
        }
      } else if (!loadMore) {
        gifactif.reset(true, gifactif.lang.not_found);
      }

      // add results to the result list
      $('#gifactif_results', gifactif.dropDown).append(list);
    },


    // listen to the scrolling so we can add more gifs when the user reaches the bottom
    scrolling : function (that) {
      if (that.scrollHeight - that.scrollTop === that.clientHeight) {
        gifactif.loadMore();
      }
    },


    // load more results once the user has scrolled through the last results
    loadMore : function () {
      if (gifactif.offset < gifactif.offset_total) {
        gifactif.request = $.get('http://api.giphy.com/v1/gifs/search?q=' + gifactif.query + '&offset=' + gifactif.offset + '&limit=' + gifactif.limit + '&rating=pg-13&api_key=' + gifactif.key, function(data) {
          gifactif.request = null;
          gifactif.offset = data.pagination.offset + gifactif.limit;
          gifactif.offset_total = data.pagination.total_count;

          gifactif.addGIF(data, true); // send data to be parsed
        });
      }
    },


    // inserts the gif into the editor
    insert : function () {
      // add the gif to the editor and close the dropdown
      gifactif.callback('http://media0.giphy.com/media/' + this.id + '/giphy.gif');

      if (gifactif.auto_close) {
        gifactif.editor.closeDropDown(true);
        gifactif.reset();
      }
    },


    // reset the dropdown fields
    reset : function (resultsOnly, newContent) {
      $('#gifactif_results', gifactif.dropDown).html(newContent ? newContent : '');

      if (!resultsOnly) {
        $('#gifactif_search', gifactif.dropDown).val('');
      }
    }
  };


  // bind keyup event to search input
  $('#gifactif_search', gifactif.dropDown)[0].onkeyup = function(e) {
    var k = e.keyCode;

    // ignore specific key inputs to prevent unnecessary requests
    if (k && (k == 16 || k == 17 || k == 18 || k == 20 || k == 37 || k == 38 || k == 39 || k == 40)) {
      return;
    } else {
      gifactif.search(this.value);
    }
  };

  // initilize gifactif
  $(gifactif.init);
}());

NOTE:
For this application to work properly, you must replace API_KEY with your API key.

To get your own personal API key, go to https://developers.giphy.com/dashboard/?create=true and create a giphy account if you do not already have one. Once you've done that, click create an app and name it whatever you like and submit it. Afterwards you should be given an API key. Simply replace API_KEY in the script with your new API key.


Modifications
If you want to make any modifications to this plugin, please click the spoiler below to reveal the instructions.
Click to view modifications:

Once you've installed the script and you're finished making modifications, the Giphy button should now be available in your editor !! Click the button to do searches and exchange some awesome GIFs with everyone ! Party

If you have any comments, questions, or problems, feel free to leave a reply below. Enjoy !

editor - GIFActif - Giphy Button for the Editor - Page 3 Giphy


Extra - Display Giphy GIFs like Facebook


Thanks to baivong, you can also install an additional plugin which displays Giphy's GIFs like Facebook ; the GIFs will remain static until you click on them !

editor - GIFActif - Giphy Button for the Editor - Page 3 Captur12
Click to view demo

To install this additional plugin, go to Admin Panel > Modules > JavaScript codes management and create a new script with the following settings.

Title : GIFActif Player
Placement : In all the pages
Paste the script below and submit :
Code:
// Demo: https://jsfiddle.net/baivong/a4z0hz63/embedded/result,html,js/

jQuery(function() {
  'use strict';

  // Giphy image in post
  var $giphyImg = $('.postbody, .post-entry').find('img[src*=".giphy.com/media/"][src$="giphy.gif"]');

  if (!$giphyImg.length) return;

  // Add style to player like Facebook
  $('head').append($('<style/>', {
    text: '.gifactif_icon_bg,.gifactif_icon_load,.gifactif_icon_text{background-image:url(//i.imgur.com/VvrpCQJ.png);background-repeat:no-repeat;background-size:auto;left:50%;top:50%;cursor:pointer}.gifactif_wrap{position:relative;display:inline-block}.gifactif_icon_bg{background-position:0 0;height:72px;margin-left:-36px;margin-top:-36px;position:absolute;width:72px}.gifactif_icon_load{background-position:0 -73px;height:66px;margin-left:-33px;margin-top:-33px;position:absolute;width:66px}.rotate-spinner{-webkit-animation:rotateSpinner 2.5s linear infinite;animation:rotateSpinner 2.5s linear infinite}.gifactif_icon_text{background-position:0 -140px;height:17px;margin-left:-16px;margin-top:-9px;position:absolute;width:32px}.gifactif_external{display:block;background:url(//i.imgur.com/1yqUihp.png) repeat-x;bottom:0;color:#fff;font-size:11px;-webkit-font-smoothing:antialiased;font-weight:700;height:56px;left:0;position:absolute;right:0;text-align:left;text-shadow:0 1px 4px rgba(0,0,0,.4);text-transform:uppercase;white-space:nowrap}.gifactif_external_text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;bottom:9px;left:11px;max-width:400px;position:absolute;vertical-align:top;color:#fff}.gifactif_external_icon{width:24px;height:24px;background-image:url(//i.imgur.com/VvrpCQJ.png);background-size:auto;background-repeat:no-repeat;display:inline-block;background-position:0 -158px;bottom:9px;position:absolute;right:10px}.gifactif_player,.gifactif_poster{max-width:100%}.gifactif_cover{display:block}.gifactif_player,.gifactif_video .gifactif_cover{display:none}.gifactif_video .gifactif_player{display:block}@-webkit-keyframes rotateSpinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotateSpinner{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}'
  }));

  // Replace GIF image to player like Facebook
  $giphyImg.replaceWith(function() {
    var imgUrl = this.src,
      pre = imgUrl.replace(/\.gif$/, '');

    return '<div class="gifactif_wrap" data-pre="' + pre + '" data-id="' + pre.match(/\/media\/([^\/]+)\/giphy/)[1] + '"><img class="gifactif_cover gifactif_poster" src="' + pre + '_s.gif" alt=""><div class="gifactif_cover gifactif_icon"><div class="gifactif_icon_bg"></div><div class="gifactif_icon_load"></div><div class="gifactif_icon_text"></div></div><a class="gifactif_cover gifactif_external" href="' + pre + '_s.gif" target="_blank"><div class="gifactif_external_text">giphy.com</div><i class="gifactif_external_icon"></i></a></div>';
  });

  // Click on player
  $('.gifactif_wrap').on('click', function(e) {
    var $this = $(this),
      $cover = $this.find('.gifactif_cover'),
      $video = $this.find('.gifactif_player'),
      $poster = $this.find('.gifactif_poster'),
      $loader = $this.find('.gifactif_icon_load'),
      pre = $this.data('pre');

    // Skip external url
    if (e.target.className === 'gifactif_cover gifactif_external') return;

    if (e.target.tagName !== 'VIDEO') {
      if (!$video.length) {

        // Generate video player
        $video = $('<video/>', {
          class: 'gifactif_player',
          poster: pre + '_s.gif',
          loop: 'loop',
          muted: 'muted',
          width: $poster.width(),
          height: $poster.height(),
          html: '<source src="' + pre + '.mp4" type="video/mp4"><source src="' + pre + '.webm" type="video/webm">Your browser does not support HTML5 video.'
        });
        $this.append($video);

        // Loading effect
        $loader.addClass('rotate-spinner');

        $video.on('canplay canplaythrough', function() {
          $loader.removeClass('rotate-spinner'); // Disable loading effect

          $this.addClass('gifactif_video'); // Hide image, show video
          $video.trigger('play');
        });

        $video.on('click', function() {
          $this.removeClass('gifactif_video'); // Show image, hide video
          $video.trigger('pause');
        });

        // Get real source url
        $.get('http://api.giphy.com/v1/gifs/' + $this.data('id') + '?api_key=' + (window.gifactif ? window.gifactif.key : 'dc6zaTOxFJmzC')).done(function(res) {
          if (res.meta.status !== 200) return;

          $this.find('.gifactif_external').attr('href', (res.data.source_post_url || res.data.url));
          $this.find('.gifactif_external_text').text(res.data.source_tld || 'giphy.com');
        });

      } else {
        $this.addClass('gifactif_video');
      }

      $video.get(0).currentTime = 0; // Play video from the start
      $video.trigger('play');
    }
  });

});

When you're finished, save the script and the Giphy GIFs should now display like Facebook ! Wink


Notice
Tutorial written by Ange Tuteur.
Special thanks to baivong for the Giphy player and to the Beta Testers for testing this plugin.
Reproduction not permitted without consent from the author.


Last edited by Ange Tuteur on Wed 08 May 2019, 11:32; edited 1 time in total

Ange Tuteur
Ange Tuteur
Administrator
Gender : Male
Posts : 4741
Points : 12252
Reputation : 2376
Location : Pennsylvania
Language : EN, JA, FR
Browser : Browser : Brave Forum Version : Forum Version : Forumactif Edge
https://sethclydesdale.github.io/ https://twitter.com/sethc1995

PostAnge Tuteur Wed 21 Sep 2016, 12:39

@Niko! you're back from the dead !? affraid lol. Thank you ! Razz
Niko!
Niko!

Gender : Male
Age : 28
Posts : 98
Points : 4233
Reputation : 51
Location : Milan, Italy
Language : Italian, English, French,
Browser : Browser : Google Chrome Forum Version : Forum Version : punBB
https://www.openstudio.one https://www.facebook.com/TranslationsCloud https://twitter.com/TranslaCloud https://pinterest.com/translacloud

PostNiko! Wed 21 Sep 2016, 12:44

Yes Ange, I am back LOL

Just a looong period of work, relax and work again editor - GIFActif - Giphy Button for the Editor - Page 3 1f601 editor - GIFActif - Giphy Button for the Editor - Page 3 1f601
I paused everything, even my projects editor - GIFActif - Giphy Button for the Editor - Page 3 1f634 editor - GIFActif - Giphy Button for the Editor - Page 3 1f62b

but now I am back, stronger than before editor - GIFActif - Giphy Button for the Editor - Page 3 1f60e
Ange Tuteur
Ange Tuteur
Administrator
Gender : Male
Posts : 4741
Points : 12252
Reputation : 2376
Location : Pennsylvania
Language : EN, JA, FR
Browser : Browser : Brave Forum Version : Forum Version : Forumactif Edge
https://sethclydesdale.github.io/ https://twitter.com/sethc1995

PostAnge Tuteur Wed 21 Sep 2016, 13:48

Well welcome back ! Cool

It's good to take a break to focus on other stuff.. that's something I gotta learn. xD

Good luck on your projects ! Very good
Michael_vx
Michael_vx

Gender : Male
Age : 32
Posts : 302
Points : 4304
Reputation : 76
Language : Arabic
Browser : Browser : Mozilla Firefox Forum Version : Forum Version : Other
http://miccsoft.net https://www.facebook.com/Michaelvx2008

PostMichael_vx Fri 07 Oct 2016, 11:45

question about
Extra - Display Giphy GIFs like Facebook
some GIFs not doing well with the Script
not static till click
some GIFs works fine
static till click
some Examples topics
http://miccsoft.net/showthread.php?tid=2526
http://miccsoft.net/showthread.php?tid=2534
http://miccsoft.net/showthread.php?tid=2532
if you can look after that it would be great
thanks in advance
Ange Tuteur
Ange Tuteur
Administrator
Gender : Male
Posts : 4741
Points : 12252
Reputation : 2376
Location : Pennsylvania
Language : EN, JA, FR
Browser : Browser : Brave Forum Version : Forum Version : Forumactif Edge
https://sethclydesdale.github.io/ https://twitter.com/sethc1995

PostAnge Tuteur Wed 12 Oct 2016, 13:17

Hi @Michael_vx the extra plugin was only for images from Giphy, so it doesn't work on images that aren't hosted on Giphy.
Michael_vx
Michael_vx

Gender : Male
Age : 32
Posts : 302
Points : 4304
Reputation : 76
Language : Arabic
Browser : Browser : Mozilla Firefox Forum Version : Forum Version : Other
http://miccsoft.net https://www.facebook.com/Michaelvx2008

PostMichael_vx Thu 13 Oct 2016, 14:44

@Ange Tuteur
is it possible to let it for all GIFs from any where Very Happy
its just question only
thanks
Ange Tuteur
Ange Tuteur
Administrator
Gender : Male
Posts : 4741
Points : 12252
Reputation : 2376
Location : Pennsylvania
Language : EN, JA, FR
Browser : Browser : Brave Forum Version : Forum Version : Forumactif Edge
https://sethclydesdale.github.io/ https://twitter.com/sethc1995

PostAnge Tuteur Thu 13 Oct 2016, 14:47

Hmm.. maybe if you replace this :
Code:
find('img[src*=".giphy.com/media/"][src$="giphy.gif"]');

With this ?
Code:
find('img[src$=".gif"]');
Michael_vx
Michael_vx

Gender : Male
Age : 32
Posts : 302
Points : 4304
Reputation : 76
Language : Arabic
Browser : Browser : Mozilla Firefox Forum Version : Forum Version : Other
http://miccsoft.net https://www.facebook.com/Michaelvx2008

PostMichael_vx Thu 13 Oct 2016, 15:17

ouch Very Happy looks worse
TypeError: pre.match(...) is null
Code:
            return '<div class="gifactif_wrap" data-pre="' + pre + '" data-id="' + pre.match(/\/media\/([^\/]+)\/giphy/)[1] + '"><img class="gifactif_cover gifactif_poster" src="' + pre + '_s.gif" alt=""><div class="gifactif_cover gifactif_icon"><div class="gifactif_icon_bg"></div><div class="gifactif_icon_load"></div><div class="gifactif_icon_text"></div></div><a class="gifactif_cover gifactif_external" href="' + pre + '_s.gif" target="_blank"><div class="gifactif_external_text">giphy.com</div><i class="gifactif_external_icon"></i></a></div>';
YoshiGM
YoshiGM
Member
Gender : Male
Age : 32
Posts : 13
Points : 2970
Reputation : 7
Language : Spanish & English
Browser : Browser : Google Chrome Forum Version : Forum Version : phpBB3
http://www.yoshifansclub.com https://twitter.com/YoshiGM

PostYoshiGM Tue 08 Nov 2016, 13:34

WoW! Thanks for the code Very Happy
Yuushishio
Yuushishio
New Member
Gender : Unspecified
Posts : 2
Points : 3155
Reputation : 1
Language : English
Browser : Browser : Google Chrome Forum Version : Forum Version : phpBB3

PostYuushishio Thu 24 Nov 2016, 12:37

Thank you very much!! This is so wonderful! However please teach me how to add it to the quick reply.
Edit:
Sorry I made a mistake >_< it now works very well! Thanks much again!
Ange Tuteur
Ange Tuteur
Administrator
Gender : Male
Posts : 4741
Points : 12252
Reputation : 2376
Location : Pennsylvania
Language : EN, JA, FR
Browser : Browser : Brave Forum Version : Forum Version : Forumactif Edge
https://sethclydesdale.github.io/ https://twitter.com/sethc1995

PostAnge Tuteur Wed 08 May 2019, 17:21

Please note that the public beta key is no longer useable, as such the script will be inoperable until the API key is updated. Follow the steps below to get your giphy plugin working again.

NOTE:
For this application to work properly, you must replace API_KEY with your API key.

To get your own personal API key, go to https://developers.giphy.com/dashboard/?create=true and create a giphy account if you do not already have one. Once you've done that, click create an app and name it whatever you like and submit it. Afterwards you should be given an API key. Simply replace API_KEY in the script with your new API key.

Note: API_KEY should be dc6zaTOxFJmzC in pre-existing scripts in use prior to this change.

This updated info has been added to the first post.
Sponsored content

PostSponsored content

Page 3 of 3 Previous  1, 2, 3

View previous topic View next topic Back to top

Create an account or log in to leave a reply

You need to be a member in order to leave a reply.

Create an account

Join our community by creating a new account. It's easy!


Create a new account

Log in

Already have an account? No problem, log in here.


Log in

 
Permissions in this forum:
You cannot reply to topics in this forum